新手求助,子窗口如何调用父窗口的方法

lf 2012-03-13 05:56:12
如题,本人delphi菜鸟,现在用delphi写了一个简易浏览器(被逼的),然后又因为要通过js和应用程序进行一些交互,因此做了一个扩展。


unit UMyExternal;

interface

uses
Classes, ComObj, Article22_TLB,Windows, Messages, SysUtils, Variants, Graphics,Controls, Forms,
Dialogs, OleCtrls, SHDocVw, ComCtrls, StdCtrls,IniFiles,ActiveX,MSHTML;
type

TMyExternal = class(TAutoIntfObject, IMyExternal, IDispatch)
private
fData: TStringList; // info from data file
procedure ShowSBMsg(const Msg: string); // helper method
protected
{ IMyExternal methods }
function GetPrecis(const ProgID: WideString): WideString;
safecall;
procedure ShowURL(const ProgID: WideString); safecall;
procedure HideURL; safecall;
procedure flashShow; safecall;
procedure flashHide; safecall;
procedure SetVideoOpen; safecall;
public
constructor Create;
destructor Destroy; override;
end;

implementation

uses
StdActns;

{ TMyExternal }


procedure TMyExternal.SetVideoOpen;
begin
// 就是这里,我想让主窗口的一个控件显示出来,应该怎么做。。
end;

constructor TMyExternal.Create;
var
TypeLib: ITypeLib; // type library information
ExeName: WideString; // name of our program's exe file
begin
// Get name of application
ExeName := ParamStr(0);
// Load type library from application's resources
OleCheck(LoadTypeLib(PWideChar(ExeName), TypeLib));
// Call inherited constructor
inherited Create(TypeLib, IMyExternal);
// Create and load string list from file
fData := TStringList.Create;
//fData.LoadFromFile(ChangeFileExt(ExeName, '.dat'));
end;


现在问题出来了,我想在这个扩展的方法中调用主窗口的方法,以此来控制各种组件的状态。


请教各位大侠,我该怎么做,最好能给出代码片段,小弟感激不尽。。
...全文
280 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lf 2012-03-14
  • 打赏
  • 举报
回复
谢谢大家,问题解决了

采用的就是
uses unit1;


Form1.XXOO.visible:=True;

再次谢谢大家,由于早上开会,没能及时回复大家~

这就结贴去~
kaikai_kk 2012-03-14
  • 打赏
  • 举报
回复
最简单的,比如你的主窗体是Form1,单元名是unit1,则
uses unit1;


Form1.XXOO.visible:=True;
金卯刀 2012-03-14
  • 打赏
  • 举报
回复
给Application.MainForm发送消息,mainform实现该消息的处理函数,主窗自行控制组件状态。需要传额外信息,可将消息的LParam或wParam利用起来。
一剑飘雪 2012-03-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lmcj001 的回复:]
谢谢大家,我想实现的是让 主窗口的一个控件显示出来, 方法越简单越好。

to: case5166 ,我应该怎样做才可以拿到 mainform
[/Quote]
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses Unit2;//这样引用就行了
{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin

end;

end.
lf 2012-03-14
  • 打赏
  • 举报
回复
谢谢大家,我想实现的是让 主窗口的一个控件显示出来, 方法越简单越好。

to: case5166 ,我应该怎样做才可以拿到 mainform
我看见佛 2012-03-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mwy654321 的回复:]
楼上的方法结果是对的,但严重破坏了代码的封装性和可移植性。

楼主你研究一下Delphi自带的clipbrd.pas单元,实例化一个clipboard对象,主窗体使用即可。
[/Quote]postmessage?SendMessage?有必要弄这么麻烦?对于初学者来说,首先要实现功能就好,然后再逐渐优化代码。写多了,看多了,代码的自然会有所提高。比如FOR循环都还没学好,就学软件工程,研究高内聚低耦合,有多大意义呢?
SVIP_ 2012-03-13
  • 打赏
  • 举报
回复
1. postmessage
2. 弄个回调函数
无条件为你 2012-03-13
  • 打赏
  • 举报
回复
楼上的方法结果是对的,但严重破坏了代码的封装性和可移植性。

楼主你研究一下Delphi自带的clipbrd.pas单元,实例化一个clipboard对象,主窗体使用即可。
我看见佛 2012-03-13
  • 打赏
  • 举报
回复
主窗口的一个控件显示出来?显示到子窗口上?

uses Main;
procedure TMyExternal.SetVideoOpen;
begin
mainform.控件名称.Visible := true;
end;
又或者是:mainform.控件名称.Parent := self; ???

没怎么理解,不知道对不对

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧