Form的问题??? 我的目的是想执行Form2的一些操作后,引起Form1的一些变化。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 注意看看你的USES一句中的内容,是不是出现了循环引用 unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Unit2;//注意这!!!!!!!!!!!!!!!type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation//uses Unit2;//注意这!!!!!!!!!!!!!!!!!!!!{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);beginForm2.Show;end;end.unit Unit2;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm2 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form2: TForm2;implementationuses Unit1;//注意这!!!!!!!!!!!!!!!!!!!!{$R *.dfm}procedure TForm2.Button1Click(Sender: TObject);begin Form1.Button1.Caption := 'test';end;end. to zfpcb(我是你的传说):是啊,Unit1中uses了Unit2,Unti2 uses 了 Unit1,那应该如何解决? 对呀,用的不对就是循环引用,看看上面的程序,第一个中的UNIT2有注释的地方,再试试 这个不是你想的那样需要完成的也不仅仅是调用问题里面设计到了窗体之间的信息传递看看下面的文章 利用RegisterWindowMessage在不同程序窗体间传递消息 这个例子讲述了如何在程序间传递消息,如何获得屏幕图形。代码如下,同时运行这两个程序,在form1中按下按纽,则在form2中会出现form1的图形。为简便,只列出窗体代码。-----------------------form1代码------------------------------unit Unit1;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } INTERMSG : UINT; public { Public declarations } end;var Form1: TForm1;implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);begin INTERMSG := RegisterWindowMessage('窗口通信的例子');end;procedure TForm1.Button1Click(Sender: TObject);begin sendmessage(HWND_BROADCAST,INTERMSG,handle,0);end;end.---------------------form2代码----------------------------------unit Unit2;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls;type TForm2 = class(TForm) Image1: TImage; procedure FormCreate(Sender: TObject); private { Private declarations } Msg2 : UINT; procedure GetImage(Form1Window : HWND); public { Public declarations } protected procedure WndProc(var Message: TMessage); override; end;var Form2: TForm2;implementation{$R *.DFM}procedure TForm2.FormCreate(Sender: TObject);begin Msg2 := RegisterWindowMessage('窗口通信的例子');end;procedure TForm2.WndProc(var Message: TMessage);begin if Message.Msg = Msg2 then GetImage(Message.WParam) else inherited;end;procedure TForm2.GetImage(Form1Window : HWND);var Form1DC: HDc; Form1Rect: TRect;begin image1.Picture := nil; Form1DC := GetWindowDC(Form1Window); GetWindowRect(Form1Window,Form1Rect); image1.Width := Form1Rect.Right-Form1Rect.Left; image1.Height := Form1Rect.Bottom - Form1Rect.Top; BitBlt(Image1.Canvas.Handle,0,0,image1.Width, image1.Height, Form1DC, 0, 0, SRCCOPY); Image1.Refresh; ReleaseDC(Form1Window, Form1DC); SetForegroundWindow(handle); beep; //收到信号并且成功完成end;end.程序我调试过,98+d5 不要在Interface段中uses,尽量在Implementation段中uses DELPHI 的PopupMenu用法? delphi for net 如何制作报表? 欢迎大家加入我的群"华南软件技术基地",群QQ为8373474,一起提高啊 超难 用变量值生成,对象!!! 我也遇到MIDAS连接不上服务器的问题,请问如何解决? 菜鸟问题,路过的朋友看看。 使用delphi第三方控件出现的问题 怎样让进度条以SHOWMODAL的形式显示 socket如何传图片 下面为什么出错了? 会用 PowerPoint 的高手请进 请高手帮我用NMHTTP或IDHTTP实现以下内容的自动登录,ok就给分。
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Unit2;//注意这!!!!!!!!!!!!!!!type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation//uses Unit2;//注意这!!!!!!!!!!!!!!!!!!!!{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Show;
end;end.unit Unit2;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form2: TForm2;implementationuses Unit1;//注意这!!!!!!!!!!!!!!!!!!!!{$R *.dfm}procedure TForm2.Button1Click(Sender: TObject);
begin
Form1.Button1.Caption := 'test';
end;end.
需要完成的也不仅仅是调用问题
里面设计到了窗体之间的信息传递
看看下面的文章
利用RegisterWindowMessage在不同程序窗体间传递消息
这个例子讲述了如何在程序间传递消息,如何获得屏幕图形。代码如下,同时运行这两个程序,在form1中按下按纽,则在form2中会出现form1的图形。为简便,只列出窗体代码。-----------------------form1代码------------------------------
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
INTERMSG : UINT;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
begin
INTERMSG := RegisterWindowMessage('窗口通信的例子');
end;procedure TForm1.Button1Click(Sender: TObject);
begin
sendmessage(HWND_BROADCAST,INTERMSG,handle,0);
end;end.
---------------------form2代码----------------------------------
unit Unit2;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls;type
TForm2 = class(TForm)
Image1: TImage;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
Msg2 : UINT;
procedure GetImage(Form1Window : HWND);
public
{ Public declarations }
protected
procedure WndProc(var Message: TMessage); override;
end;var
Form2: TForm2;implementation{$R *.DFM}procedure TForm2.FormCreate(Sender: TObject);
begin
Msg2 := RegisterWindowMessage('窗口通信的例子');
end;procedure TForm2.WndProc(var Message: TMessage);
begin
if Message.Msg = Msg2 then
GetImage(Message.WParam)
else inherited;
end;procedure TForm2.GetImage(Form1Window : HWND);
var
Form1DC: HDc;
Form1Rect: TRect;
begin
image1.Picture := nil;
Form1DC := GetWindowDC(Form1Window);
GetWindowRect(Form1Window,Form1Rect);
image1.Width := Form1Rect.Right-Form1Rect.Left;
image1.Height := Form1Rect.Bottom - Form1Rect.Top;
BitBlt(Image1.Canvas.Handle,0,0,image1.Width,
image1.Height,
Form1DC, 0,
0, SRCCOPY);
Image1.Refresh;
ReleaseDC(Form1Window, Form1DC);
SetForegroundWindow(handle);
beep; //收到信号并且成功完成
end;end.程序我调试过,98+d5