例如
A窗口,调用并打开B窗口.在B窗口下操作之后,所得的结果要传回到A窗口继续工作.我要怎么办呢?回传的是多个数值和多个字符串我只想用到剪切板.除此还有别的什么办法?

解决方案 »

  1.   

    给b窗口加属性或变量,在关闭后,释放前获取
    或利用事件,b窗口有动作时触发a窗口中的(你自己定义的)的事件,事件中的参数就是内容。
      

  2.   

    简单一点,放属性变行了
    多个数值和字符串如有必要你可以做成一个record
      

  3.   

    我是用ShowModal方法的,B窗口在操作时,A窗口不能操作有属性,或公共变量也不能从A窗口向B窗口读~~看来只在"消息"和"剪贴板"两条路了
      

  4.   

    我这个代码比较啰嗦。
    还有像楼主说的,可以在b窗口准备好属性后给a发消息,a收到消息后去读取属性就行了
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, unit2, StdCtrls;type
      TForm1 = class(TForm)
        btn1: TButton;
        procedure btn1Click(Sender: TObject);
      private
        { Private declarations }
        procedure myevent(sender: tobject; arec: tmyrec);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}{ TForm1 }procedure TForm1.myevent(sender: tobject; arec: tmyrec);
    begin
      caption := arec.a2;
    end;procedure TForm1.btn1Click(Sender: TObject);
    var
      frm2: tform2;
    begin
      frm2 := tform2.Create(self);
      try
        frm2.myevent := self.myevent;
        frm2.showmodal;
      finally
        frm2.free;
      end;
    end;end.unit Unit2;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TMyRec = record
        a1: integer;
        a2: string;
      end;
      TMyEvent = procedure(Sender: TObject; ARec: TMyRec) of object;  TForm2 = class(TForm)
        btn1: TButton;
        procedure btn1Click(Sender: TObject);
      private
        { Private declarations }
        FMyEvent: TMyEvent;
      public
        { Public declarations }
        property MyEvent: TMyEvent read FMyEvent write FMyEvent;
      end;var
      Form2: TForm2;implementation{$R *.dfm}procedure TForm2.btn1Click(Sender: TObject);
    var
      ARec: TMyRec;
    begin
      aRec.a1 := 1;
      aRec.a2 := 'a';
      if assigned(FMyEvent) then FMyEvent(self, ARec);
    end;end.
      

  5.   

    兄弟感激不尽~~我还有一个小问题~~就是B窗口有一个确定按钮,要执行的运算就放在它那里,它算完后直接关闭窗口,这样A窗口能不能来行及读取B的属性呢??我总结现在有的办法,剪贴板,临时文件(我刚想到的),还有就是息消...我的想法是,B窗口有没有可能像函数一样返回一个值或一个结构?
      

  6.   

    窗口关了(你看不到了)后还能读取他的信息的,Free之后就不能了。
      

  7.   

    比如这样
    frm2 := tform2.create;
    try
      frm.showmodal;
      当运行到这里的时候窗口已经关了,但你还可以在这里读取form2的属性,变量什么的。
    finally
      frm2.free; 这句之后就不能读了
    end;
    代码我随意敲的,大概就是这么个意思
      

  8.   

    这个,,我是在B窗口的close事件中Free的,哈哈,要不就改成你那种了..我在另一页也看到一个办法:就是设全局变量,http://topic.csdn.net/u/20090608/12/e326d40c-2a70-44f3-b208-c7268c03608f.html?23998
      

  9.   

    把这个写到一个函数中,函数中用传址调用,定义变量的时候加个var。窗体返回的时候var变量已经变成你想要的值了。
      

  10.   

    从你的问题以及你陆续对问题的补充看,你对Delphi的窗体还是不很了解。
    Delphi的窗体是类,你创建了一个窗体,也就是创建了一个窗体对象,这个对象在被Free之前,你都是可以访问对象中的公布的属性和方法的。窗体对象的Show或者Close并不会释放窗体对象,除非你在Close时释放了他。你使用了ShowModal方式显示窗体,那更简单了,你不要在窗体关闭的地方释放窗体对象,把这个释放的操作放到 ShowModal 处,在其后释放,因为 ShowModal 的方式显示窗体,直到这个窗体关闭,代码才会从 ShowModal 函数处返回并继续向下执行,因此,在 ShowModal 之后 Free 之前,你可以访问这个窗体中的任何公布的数据。而你被 ShowModal 的窗体的那个计算按钮,在其点击事件中,把要传递出去的数据都写在这个窗体的私有域中,并以只读的属性公布出去,那么在这个窗体Close的时候,就能够被其他地方读取了。
      

  11.   

    一般情况下,只有以 Show 的方式显示的窗体,才会在其 OnClose 事件中,指定 Action 为 caFree
    因为 Show 方式显示的窗体,窗体显示出来之后,调用 Show 的代码就会返回,并不会等待窗体的关闭,因此,为了节省资源,才会在被 Show 的窗体关闭的同时释放自己。