我的目的是想执行Form2的一些操作后,引起Form1的一些变化。

解决方案 »

  1.   

    注意看看你的USES一句中的内容,是不是出现了循环引用
      

  2.   

    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);
    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.
      

  3.   

    to  zfpcb(我是你的传说):是啊,Unit1中uses了Unit2,Unti2 uses 了 Unit1,那应该如何解决?
      

  4.   

    对呀,用的不对就是循环引用,看看上面的程序,第一个中的UNIT2有注释的地方,再试试
      

  5.   

    这个不是你想的那样
    需要完成的也不仅仅是调用问题
    里面设计到了窗体之间的信息传递
    看看下面的文章 
    利用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
      

  6.   

    不要在Interface段中uses,尽量在Implementation段中uses