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

動態產生的Form的問題?

尚未結案
fj
一般會員


發表:20
回覆:12
積分:6
註冊:2004-11-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-30 17:28:11 IP:220.229.xxx.xxx 未訂閱
小弟我有一個疑問,每當我用動態產生一個Form之後,再在動態產生出來的Formcreate事件中想去動態產生其他的控制項,像是Label,Checklistbox等元件,但是卻不會有任何的作用,可是若在動態產生出來的Form中加入Button,然後再在Buttonclick事件中去動態Create元件是可以的,一直想不出是什麼原因,希望有前輩可以指教。
chris_shieh
高階會員


發表:46
回覆:308
積分:240
註冊:2004-04-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-30 18:05:49 IP:218.167.xxx.xxx 未訂閱
記得給Parent 才會顯示在Parent 上
procedure TForm1.FormCreate(Sender: TObject);
var
  btn1, btn2: TButton;
begin
  btn1 := TButton.Create(Self);
  with btn1 do begin
    Parent := Self;
    Top := 10;
    Left := 10;
    Caption := 'Btn1';
  end;      btn2 := TButton.Create(Self);
  with btn2 do begin
    Parent := Self;
    Top := 50;
    Left := 50;
    Caption := 'Btn2';
  end;
end;
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-30 18:12:39 IP:210.65.xxx.xxx 未訂閱
Hi fj,    有無可能是因為動態產生 Form 再 Assign 其 OnCreate 事件,故 OnCreate 並未被觸發?    建議你將程式碼移至 OnShow 事件上試試。     ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
fj
一般會員


發表:20
回覆:12
積分:6
註冊:2004-11-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-31 10:42:13 IP:211.78.xxx.xxx 未訂閱
多謝各位指教,我試過將其寫在onshow事件中,但還是不行,也有設parent。 程式碼如下: procedure TTrendLine.onshow(Sender: TObject); var FN: array[0..MAX_PATH- 1] of char; CeXEpATH:String; // label3 : Tlabel; begin with Tlabel.Create(self) do begin parent := panel2; caption := 'We are family'; height:= 21; width := 100; left := 1; top := 1; show; end; SetString(cExePath, FN, GetModuleFileName(hInstance, FN, SizeOf(FN)));//抓取現在正在執行的程式所在路徑包含完整路徑 exe_path:=ExtractFilePath(cExePath);//僅抓取路徑不包含檔名 showmessage(exe_path); if FileExists(exe_path 'PropertyTagList.dfm') then //將dreamdesigner元件從檔案中取出載入 DreamDesigner1.LoadComponentFromFile(DreamDesigner1.LimitControl,exe_path 'PropertyTagList.dfm'); end; 但仍然沒看到label出現,其他動作行為好像也沒有作用。 能否幫我看一下,是有哪漏掉嗎?
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-31 11:17:01 IP:210.65.xxx.xxx 未訂閱
Hi fj,    方便提供程式嗎?     ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
fj
一般會員


發表:20
回覆:12
積分:6
註冊:2004-11-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-12-31 12:01:01 IP:211.78.xxx.xxx 未訂閱
當然方便,如下 ---------------------------------------------------------------------- unit TrendTestLine; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, TeeProcs, TeEngine, Chart, DBChart, dcfdes, dcddes, CheckLst, ComCtrls, ExtCtrls; type TTrendLine = class(TForm) Panel1: TPanel; PageControl1: TPageControl; DBChart1: TDBChart; Panel2: TPanel; Label1: TLabel; Edit1: TEdit; GroupBox1: TGroupBox; Button2: TButton; Button1: TButton; TagNoList: TCheckListBox; Label2: TLabel; DreamDesigner1: TDreamDesigner; Button4: TButton; Button3: TButton; procedure Button2Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure formcreate(Sender : TObject); procedure onshow(Sender : TObject); procedure Button3Click(Sender: TObject); private exe_path:String; { Private declarations } public { Public declarations } end; var TrendLine: TTrendLine; implementation {$R *.DFM} //將component儲存至檔案中 procedure TTrendLine.Button2Click(Sender: TObject); var FN: array[0..MAX_PATH- 1] of char; CeXEpATH:String; begin SetString(cExePath, FN, GetModuleFileName(hInstance, FN, SizeOf(FN)));//抓取現在正在執行的程式所在路徑包含完整路徑 exe_path:=ExtractFilePath(cExePath);//僅抓取路徑不包含檔名 showmessage(exe_path); dreamdesigner1.SaveComponentToFile(DreamDesigner1.LimitControl,exe_path 'PropertyTagList.dfm.dfm'); end; //新增項目至CheckListBox procedure TTrendLine.Button4Click(Sender: TObject); var i : integer; begin if edit1.text = '' then begin showmessage('請輸入Tag_No'); exit; end; for i := 0 to tagnolist.Items.count-1 do begin if edit1.Text = TagNoList.Items[i] then begin showmessage('此Tag_No已存在,請從新輸入'); exit; end; end; tagnoList.Items.add(edit1.text); end; procedure TTrendLine.formcreate(Sender: TObject); {var FN: array[0..MAX_PATH- 1] of char; CeXEpATH:String; } begin { SetString(cExePath, FN, GetModuleFileName(hInstance, FN, SizeOf(FN)));//抓取現在正在執行的程式所在路徑包含完整路徑 exe_path:=ExtractFilePath(cExePath);//僅抓取路徑不包含檔名 showmessage(exe_path); if FileExists(exe_path 'PropertyTagList.dfm') then //將dreamdesigner元件從檔案中取出載入 DreamDesigner1.LoadComponentFromFile(DreamDesigner1.LimitControl,exe_path 'PropertyTagList.dfm'); } end; procedure TTrendLine.onshow(Sender: TObject); {var FN: array[0..MAX_PATH- 1] of char; CeXEpATH:String; // label3 : Tlabel; } begin { with Tlabel.Create(self) do begin parent := panel2; caption := 'We are family'; height:= 21; width := 100; left := 1; top := 1; show; end; SetString(cExePath, FN, GetModuleFileName(hInstance, FN, SizeOf(FN)));//抓取現在正在執行的程式所在路徑包含完整路徑 exe_path:=ExtractFilePath(cExePath);//僅抓取路徑不包含檔名 showmessage(exe_path); } end; //載入 component procedure TTrendLine.Button3Click(Sender: TObject); var FN: array[0..MAX_PATH- 1] of char; CeXEpATH:String; begin if FileExists(exe_path 'PropertyTagList') then //將dreamdesigner元件從檔案中取出載入 showmessage('iiiiii'); DreamDesigner1.LoadComponentFromFile(DreamDesigner1.LimitControl,exe_path 'PropertyTagList'); end; end. -------------------------------------------------------------- 有些元件是外加的component --> DreamDesigner for your reference
fj
一般會員


發表:20
回覆:12
積分:6
註冊:2004-11-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-01-03 14:50:00 IP:220.229.xxx.xxx 未訂閱
chris_shieh,Fishman兩位大哥,多謝你們的提醒,我已知為何formCreate事件會Run不出來,原來是Form.onCreate事件是我自己key的,沒連到Object Inspector上的事件驅動,所以沒作用。---------------是我豬頭
系統時間:2024-06-02 1:31:55
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!