前提:
  有两个窗口Form1和Form2,点击form1上的按钮button1会动态生成3个form2,并给form2上的Edit1.Text附值.form2有两个动作,一是改变窗体form2的AlphaBlendValue的值;二是取得form2上的Edit1.Text的值.问题:
  1.Form2上为什么要定义var Form2:TForm2这样的变量.如果不定义,出现的3个窗口中无论鼠标移到那个窗口中只有其中固定的一个窗体发生变化,只有这样定义3个窗口才能分别发生改变.
  2.在3个Form2上我如何取得各自的Edit1.Text的值.程序如下:窗体Form1上的程序:procedure TForm1.Button1Click(Sender: TObject);
var i:Integer;
    Form:array of TForm2;
begin
   SetLength(Form,3);
   for i:=0 to 2 do
     begin
       form[i] := TForm2.Create(Application);
       form[i].Show;
       form[i].Edit1.Text:='123';
     end;
end;窗体Form2上的程序:procedure TForm2.GroupBox1MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
var Form2:TForm2;
begin
  Form2.AlphaBlendValue:=255;
end;procedure TForm2.FormShow(Sender: TObject);
begin
  Panel1.Caption:=Form2.Edit1.Text;
end;

解决方案 »

  1.   

    落了一句话,如果Form2里用了var Form2:TForm2这个,在编译的时候会出现提示:[Warning]Unit2.pas(33):Variable 'Form2' might not have been initialized不知道是什么意思,但是不影响程序的使用,而且不这样定义也不行.不定义就会出现3个窗口不能各自改变各自的AlphaBlendValue值.
      

  2.   

    改成这样呢?procedure TForm2.GroupBox1MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
    begin
    AlphaBlendValue:=255;
    end;
      

  3.   

    procedure TForm2.FormShow(Sender: TObject);
    begin
    Panel1.Caption:=Edit1.Text;
    end;
      

  4.   

    要搞清楚TForm2是Class,Form2是Object,就是Class的实例。请看看面向对象的书,一般都有详细的说明类(class)与实例(Object)的关系。
      

  5.   

    程序修改如下:
    窗体Form1上的程序:procedure TForm1.Button1Click(Sender: TObject);
    var i:Integer;
        Form:array of TForm2;
    begin
       SetLength(Form,3);
       for i:=0 to 2 do
         begin
           form[i] := TForm2.Create(Application);
           form[i].Show;
           form[i].Edit1.Text:='123';
         end;
    end;
    窗体Form2上的程序:procedure TForm2.GroupBox1MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
    var Form2:TForm2;             //不用定义这个变量
    begin
      Form2.AlphaBlendValue:=255; //修改为Self.AlphaBlendValue := 255;
    end;procedure TForm2.FormShow(Sender: TObject);
    begin
      Panel1.Caption:=Form2.Edit1.Text;  //修改为Panel1.Caption := Self.Edit1.Text;
    end;
      

  6.   

    keyz(keyz)的和二个回答,是不行的,正常的写法是这样的取不到值.gobiz(拔剑容易收剑难) 的回答利用self可以不用再定var Form2:TForm2这个了第一个问题解决,但第二问题,利用Panel1.Caption := Self.Edit1.Text;这个,依然取不到值.另Self.Panel1.Caption := Self.Edit1.Text;这样也取不到.
      

  7.   

    form[i].Show;
           form[i].Edit1.Text:='123';
    改为
           form[i].Edit1.Text:='123';
           form[i].Show;
      

  8.   

    handong2004(冬雨) ( ) 信誉:100    Blog  2007-01-13 10:53:26  得分: 0  
     
     
       keyz(keyz)的和二个回答,是不行的,正常的写法是这样的取不到值.gobiz(拔剑容易收剑难) 的回答利用self可以不用再定var Form2:TForm2这个了第一个问题解决,但第二问题,利用Panel1.Caption := Self.Edit1.Text;这个,依然取不到值.另Self.Panel1.Caption := Self.Edit1.Text;这样也取不到.
      
     
    -----------------------------------------------------------------------------------
    针对这个问题,你只需要好好再看一下你自己些的代码就明白了,你是在Form2的FormShow事件中获取的Edit1.Text,但是你的调用是先执行了FormShow事件(form[i].Show),这个时候你的Edit1.Text还没有赋值,你怎么能得到呢?应该先执行form[i].Edit1.Text := '123',然后再执行form[i].show事件!
      

  9.   

    原来是逻辑上的问题呀!哎!....牛角尖全都钻在Form2上了.问题全部解决!散分喽......对了,delphi上的鼠标事件都有什么呀?我只找到:
    OnMouseDown
    OnMouseMove
    OnMouseUp
    OnMouseWheel
    OnMouseWheelDown
    OnMouseWheelup
    这几个事件,可是我想要做鼠标离开某个控件的动作,如何完成啊?给个思路就行.
    还有没有其它的鼠标事件啊?
      

  10.   

    Delphi里面的标准事件中很少有提供类似MouseOut事件的,一个比较另类的解决方法是,一个Panel,里面放一个Button,想处理Button的类似MouseOut事件的话,就直接处理Panel的MouseMove事件来替代好了!
      

  11.   

    可以了吗??
    怎么我把顺序换过来,panel1.caption还是不能得到‘123’????