線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:953
推到 Plurk!
推到 Facebook!

原件名稱如何用變數?

尚未結案
mcho
初階會員


發表:57
回覆:106
積分:42
註冊:2002-11-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-06-14 19:17:52 IP:220.137.xxx.xxx 未訂閱
請問個位大大: 我要Create 一個 FORM 如下: SLB1101:=TSLB1101.Create(self); FORM 的名稱"SLB1101"可用變數嗎?請高手們指點!謝謝! 何明昌
------
何明昌
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-06-14 21:32:20 IP:219.129.xxx.xxx 未訂閱
引言: 請問個位大大: 我要Create 一個 FORM 如下: SLB1101:=TSLB1101.Create(self); FORM 的名稱"SLB1101"可用變數嗎?請高手們指點!謝謝! 何明昌
你好: 不知道,有没有理解错你的意思: procedure TForm1.Button1Click(Sender: TObject); var SLB1101:TForm; begin SLB1101:=Tform.Create(self); SLB1101.Caption:=Edit1.Text; SLB1101.Show; end; 试试看 ——行径窄处,留一步与人行—— ——
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-06-15 10:27:12 IP:61.71.xxx.xxx 未訂閱
引言: 請問個位大大: 我要Create 一個 FORM 如下: SLB1101:=TSLB1101.Create(self); FORM 的名稱"SLB1101"可用變數嗎?請高手們指點!謝謝! 何明昌
procedure TForm1.Button1Click(Sender: TObject);
          var tmpform: TForm;
begin
     tmpform:= TForm(FindComponent(Edit1.Text));
     if tmpform=nil then tmpform:= TForm.Create(self);
     tmpform.name:= Edit1.Text;
     tmpform.show;
end;
發表人 - P.D. 於 2004/06/15 10:30:04
yachanga
資深會員


發表:24
回覆:335
積分:296
註冊:2003-09-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-06-15 11:23:08 IP:210.68.xxx.xxx 未訂閱
引言: 請問個位大大: 我要Create 一個 FORM 如下: SLB1101:=TSLB1101.Create(self); FORM 的名稱"SLB1101"可用變數嗎?請高手們指點!謝謝! 何明昌
Hi mcho您好: 若是要使用的Form 很多, 您可以考慮使用TFormClass 來實作.. 小弟有一個專案100多個Form 就是使用TFormClass 與TForm 實作差別如下 1. 用TFormClass不用 use Form..只要在include 在Porject 即可 2. 用TFormClass必須在每個Form 最後面加上幾行code
var
  Form2: TForm2;    implementation    {$R *.dfm}    Initialization
  RegisterClass(TFORM2);
finalization
  UnregisterClass(TFORM2);
end. 
參考範例如下:
unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;    type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    function CreateForm(className: String;Caption:String): TFORM;
    { Public declarations }
  end;    var
  Form1: TForm1;    implementation    {$R *.dfm}    procedure TForm1.Button1Click(Sender: TObject);
Var
 tmpform: TFORM;
begin
  tmpform:=CreateForm('TFORM2','FORM2 Caption'); 打開Form2
  if  tmpform is TFORM then
    tmpform.Show;    end;    function TForm1.CreateForm(className: String;Caption:String): TFORM;
var c:TformClass;
    f:TForm;
begin
   result:=nil;
   try
    c:=TFormClass(findclass(className)); //找到FormClass
    if (c<>nil) then//Check 此Form是否已 Create
     begin
      application.CreateForm(c,f);  //用找到之class來Create Instance
      if Caption<>'' then f.Caption:=Caption;
      result:=f;
    end;
    except
     showmessage(className  ' can not found');
    end;
end;        end.    
~悠遊法國號~
mcho
初階會員


發表:57
回覆:106
積分:42
註冊:2002-11-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-06-15 12:23:04 IP:220.137.xxx.xxx 未訂閱
hi! yachanga : 謝謝您指點,Form 可以開但參數要如何傳進去?可否再請教,我想您一定知 道吧!謝謝您! 何明昌
------
何明昌
yachanga
資深會員


發表:24
回覆:335
積分:296
註冊:2003-09-27

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-06-15 12:33:52 IP:210.68.xxx.xxx 未訂閱
引言: hi! yachanga : 謝謝您指點,Form 可以開但參數要如何傳進去?可否再請教,我想您一定知 道吧!謝謝您! 何明昌
Hi mcho您好 您指的參數是指Form Name嗎?? 假設您輸入在Edit1 輸入 "SLB1101" 則 試試看:
procedure TForm1.Button1Click(Sender: TObject);
Var
 tmpform: TFORM;
begin
  tmpform:=
  CreateForm('T' Edit1.text, Edit1.text ' Caption'); 
  if  tmpform is TFORM then
    tmpform.Show;    end;    
~悠遊法國號~
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-06-15 14:22:31 IP:202.39.xxx.xxx 未訂閱
引言:
procedure TForm1.Button1Click(Sender: TObject);
          var tmpform: TForm;
begin
     tmpform:= TForm(FindComponent(Edit1.Text));
     if tmpform=nil then tmpform:= TForm.Create(self);
     tmpform.name:= Edit1.Text;
     tmpform.show;
end;
P.D. 兄這樣的方式, FindComponent 的回傳值必是 nil 得用 Application.FindComponent 發表人 -
mcho
初階會員


發表:57
回覆:106
積分:42
註冊:2002-11-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-06-15 17:59:24 IP:220.137.xxx.xxx 未訂閱
hi! yachanga : 除了傳入Form Name外還可傳入其他自訂參數嗎! 至於P.D.提供的另種方式:會產生A Component named Form2 already exists. 錯誤訊息! hagar:點出用Application.FindComponent也是一樣 何明昌
------
何明昌
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-06-15 18:05:38 IP:202.39.xxx.xxx 未訂閱
P.D. 兄, Sorry! 小弟錯了!
yachanga
資深會員


發表:24
回覆:335
積分:296
註冊:2003-09-27

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-06-16 09:02:44 IP:210.68.xxx.xxx 未訂閱
引言: hi! yachanga : 除了傳入Form Name外還可傳入其他自訂參數嗎! 何明昌
Hi mcho您好: 當然可以..只要是form 可以設定的property, 都可以透過參數方式設定. 小弟這邊在舉兩個例子..以您的聰明才智 , 其他的就讓您自己試試囉... 重點在 class="code"> function TForm1.CreateForm(className: String;Caption:String;Hint:String;Tag:Integer): TFORM; var c:TformClass; f:TForm; begin result:=nil; try c:=TFormClass(findclass(className)); //找到FormClass if (c<>nil) then//Check 此Form是否已 Create begin application.CreateForm(c,f); //用找到之class來Create Instance if Caption<>'' then f.Caption:=Caption; f.Hint:=Hint; f.Tag:=Tag; .............//form 的屬性都在這裡設定 result:=f; end; except showmessage(className ' can not found'); end; end; ~悠遊法國號~
mcho
初階會員


發表:57
回覆:106
積分:42
註冊:2002-11-11

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-06-18 11:02:09 IP:220.137.xxx.xxx 未訂閱
hi!yachanga : 謝謝您指教!本站真是高手如雲. 何明昌
------
何明昌
系統時間:2024-07-04 15:58:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!