全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1901
推到 Plurk!
推到 Facebook!

動態create並且使用function取得傳回值

尚未結案
fantasy
一般會員


發表:10
回覆:9
積分:3
註冊:2003-11-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-10-12 03:29:42 IP:61.61.xxx.xxx 未訂閱
各位大哥你們好      我知道傳回值有很多人討論,我看了很多的範例也試了很多的example,      不過我好像找不到跟我同樣的問題      問題如下              小妹我想把 Form A 的 edit1 的值傳給 CREATE 的 Form B 然後 Form B           的 FAvalue接著Form B 就秀出來,等使用者輸入Form B 後按確定       就關了Form B,然後Form A 的edit2便得到 Form B 把 FAvalue + 使用者         輸入的值,我試著在FormA的 Button1Click 把 Form B CREATE 出來,但       是不知道什麼時候知道Form B的使用者關了Form B , 希望前輩能指教         
          type
          TForm1 = class(TForm)
          Edit1: TEdit;
          Button1: TButton;
          Edit2: TEdit;
          procedure Button1Click(Sender: TObject);
       private
          { Private declarations }
       public
          { Public declarations }
       end;
     
 
          type
            TForm2 = class(TForm)
            Edit1: TEdit;
            Button1: TButton;
          private
            { Private declarations }
          public
            { Public declarations }
             FAvalue:Integer;
           function rtnval(ia:integer):Integer;
            
         end;
     
shinjie
資深會員


發表:12
回覆:275
積分:287
註冊:2003-03-19

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-10-12 08:19:15 IP:203.73.xxx.xxx 未訂閱
因為不是很清楚問題,所以寫得不是很好。    
type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
  private
  public
  end;    var
  Form1: TForm1;    implementation    uses Unit2;    procedure TForm1.Button1Click(Sender: TObject);
begin
try
  if Application.FindComponent('Form2')=nil then
    Application.CreateForm(TForm2, Form2);
  Form2.FAvalue:=StrToInt(Edit1.Text);
  if Form2.ShowModal = Mrok then
  begin
    Edit2.Text:=intToStr(Form2.rtnval());
  end;
Finally
    Form2.Free;
end;
end;    type
  TForm2 = class(TForm)
    Button1: TButton;
  private
    { Private declarations }
  public
     FAvalue:Integer;
     function rtnval():Integer; //只要回傳值,傳入的值要做啥???
  end;    var
  Form2: TForm2;    implementation    { TForm2 }    function TForm2.rtnval(): Integer;
begin
Result:=FAvalue; //自已加上B輸入的值
end;    
Form2的Button要設定ModalResult為Mrok ========================================= 程式有問題並不可怕,最怕是不知問題出在那 不知問題在那不可怕,更怕是不知如何問問題 寫程式要從最簡單的開始 發表人 - shinjie 於 2005/10/12 08:20:48
------
我將在茫茫人海中尋訪我唯一之靈魂伴侶。
得之;我幸。不得;我命。
fantasy
一般會員


發表:10
回覆:9
積分:3
註冊:2003-11-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-10-13 02:31:30 IP:61.61.xxx.xxx 未訂閱
謝謝 shinjie前輩 熱心的幫我解答, 試過在SDI可以執行,但是在 MDI 使用 ShowModal 會丟出一個例外出來,例外原因如下 "EInvlid Operation with message Cannot make a visible widow modal' 使用SHOW的話就Create 完就直接 Free,想請問一下 有沒有辦法解決呢?
shinjie
資深會員


發表:12
回覆:275
積分:287
註冊:2003-03-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-10-13 08:57:43 IP:220.134.xxx.xxx 未訂閱
引言: 謝謝 shinjie前輩 熱心的幫我解答, 試過在SDI可以執行,但是在 MDI 使用 ShowModal 會丟出一個例外出來,例外原因如下 "EInvlid Operation with message Cannot make a visible widow modal' 使用SHOW的話就Create 完就直接 Free,想請問一下 有沒有辦法解決呢?
使用SHOW的話就Create 完就直接 Free 這個是try..Finally的問題,把他拿掉就好了。 在 MDI 是不能使用 ShowModal的,所以要改變方式。 在FormA的public設一個function,然後在FormB關畢之前,將值set 回FormA。
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    function setedit(str:string):Boolean;
  end;    var
  Form1: TForm1;    implementation    uses Unit2;    function TForm1.setedit(str: string): Boolean;
begin
  Edit2.Text:=str;
end;    procedure TForm1.Button1Click(Sender: TObject);
begin
if Application.FindComponent('Form2')=nil then
    Application.CreateForm(TForm2, Form2);
  Form2.FAvalue:=StrToInt(Edit1.Text);
  Form2.Show;
end;    type
  TForm2 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
  public
    FAvalue:Integer;
  end;    var
  Form2: TForm2;    implementation    uses Unit1;    procedure TForm2.Button1Click(Sender: TObject);
begin
  Form1.setedit(inttostr(FAvalue));
  Form2.Close;
end;
========================================= 程式有問題並不可怕,最怕是不知問題出在那 不知問題在那不可怕,更怕是不知如何問問題 寫程式要從最簡單的開始
------
我將在茫茫人海中尋訪我唯一之靈魂伴侶。
得之;我幸。不得;我命。
cxh17895
初階會員


發表:13
回覆:37
積分:25
註冊:2003-03-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-10-13 21:10:54 IP:210.68.xxx.xxx 未訂閱
你參考一下,這是我的寫法 且應該不限於mdi 與sdi的限制...就是呼叫輔助視窗啦..     
 
unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;    type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Edit2: TEdit;
    procedure FormShow(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;    var
  Form1: TForm1;    implementation    uses Unit2;    {$R *.dfm}    procedure TForm1.FormShow(Sender: TObject);
begin
edit1.Clear;
edit2.Clear;    edit1.Text := '我是edit1' ;
end;    procedure TForm1.Button1Click(Sender: TObject);
begin
edit2.Text := Form2.ReutenValue(edit1.Text);
end;    end.    //-------
unit Unit2;    interface    uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;    type
  TForm2 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    procedure FormShow(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    FormBValue :String; //建一個私值      public
    { Public declarations }
    function ReutenValue(VinSTring: String): String;
    //建一個可供其他unit呼叫的function
  end;    var
  Form2: TForm2;    implementation    {$R *.dfm}
function TForm2.ReutenValue(VinSTring:String):String ;
var
newForm : TForm2;
begin    newForm := TForm2.Create(nil);   //重態建立FORM
  Try
  newform.FormBValue  := VinSTring;   //把傳入直放入newFrom中的值
  newForm.ShowModal;
  Finally
  Result := newform.FormBValue;  //回傳
  newForm.Free;
  end;    end;    procedure TForm2.FormShow(Sender: TObject);
begin
  edit1.Text := FormBValue;
end;    procedure TForm2.Button1Click(Sender: TObject);
begin
   FormBValue :=  edit1.Text;  // 更新fromBValue
   close;
end;    end.        
fantasy
一般會員


發表:10
回覆:9
積分:3
註冊:2003-11-27

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-10-13 23:04:56 IP:61.61.xxx.xxx 未訂閱
感謝 shinjie 前輩的指導以及 cxh17895前輩的技巧 我已經懂得怎麼傳值了,衷心的謝謝
系統時間:2017-12-11 15:22:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!