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

請問如何使用在其中某個表單的元件?

答題得分者是:Justmade
darnell
版主


發表:25
回覆:103
積分:145
註冊:2003-03-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-07 10:52:17 IP:61.219.xxx.xxx 未訂閱
我在主表單設計了一個ToolBar並且撰寫了事件...且使用SDI方式設計其他表單...因為其他表單中的ToolBar所需和主表單一模一樣...因此我希望可以將主表單中的ToolBar和事件拿來給其他表單使用...但是由於ToolBar的設計有可能變動...請問我應該如何在其他表單產生的時候動態建立跟主表單一樣的ToolBar和其事件程序呢??? 謝謝!!
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-07 11:02:30 IP:218.16.xxx.xxx 未訂閱
先設計一個 基礎的 Form, 包含 ToolBar 及其他共用的元件及程式碼 之後建立其他的 Form 時 : File->New->Other->你的 Project 名 選那個其礎的 Form 這樣,所有用這個方式建立的 Form 都可共享這些共通元件 若要修改共通部份只要到其礎的 Form 修改即可
darnell
版主


發表:25
回覆:103
積分:145
註冊:2003-03-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-07 11:38:40 IP:61.219.xxx.xxx 未訂閱
引言: 先設計一個 基礎的 Form, 包含 ToolBar 及其他共用的元件及程式碼 之後建立其他的 Form 時 : File->New->Other->你的 Project 名 選那個其礎的 Form 這樣,所有用這個方式建立的 Form 都可共享這些共通元件 若要修改共通部份只要到其礎的 Form 修改即可
謝謝你...這個方法我有想過...還想請問一件事...有辦法動態...也就是寫程式的方法來產生這個Form...也就是不想在設計階段就直接產生...因為數目並不固定要幾個...因此需要用程式碼來產生那個有東西的Form...?
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-07 12:14:39 IP:218.16.xxx.xxx 未訂閱
當然可以啊    
use MyForm
 
procedure MainForm.NewMyFormClick(Sender : TObject);
begin
  with TMyForm.Create(Application) do
  begin
    Caption := 'ABCDE'
    .....
    ......
    Show;
  end
end;
這樣每按一次就會制做一個 TMyForm 的 instance, 你可針對不同 instance 作不同修改才 show 出來。
darnell
版主


發表:25
回覆:103
積分:145
註冊:2003-03-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-07 13:01:11 IP:61.219.xxx.xxx 未訂閱
引言: 當然可以啊
use MyForm
 
procedure MainForm.NewMyFormClick(Sender : TObject);
begin
  with TMyForm.Create(Application) do
  begin
    Caption := 'ABCDE'
    .....
    ......
    Show;
  end
end;
這樣每按一次就會制做一個 TMyForm 的 instance, 你可針對不同 instance 作不同修改才 show 出來。
不好意思...最後一個小小問題...這樣的話...可以不經由Form而直接產生Form中的東西ㄇ?比如說...
use MyForm
 
procedure MainForm.NewMyFormClick(Sender : TObject);
begin
  with TMyForm.ToolBarA.Create(MainForm) do
  begin
    Name:= 'ABCDE';
    Parent:=MainForm;
    ......
    Show;
  end
end;
這樣可以ㄇ??
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-07 13:20:40 IP:218.16.xxx.xxx 未訂閱
除非你將你常用的一組 ToolBar 做成元件,否則便要逐個 ToolButton 去複制非常麻煩,又或是使用 RTTI 的功能來複制(要學習並不容易) RTTI 可參考 http://www.google.com/search?q=Delphi RTTI 始終是承繼 Form 容易很多。其次是將該 ToolBar 做成自定元件。
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-07 13:25:13 IP:211.76.xxx.xxx 未訂閱
可以的, 也就是動態生成 form 上的 vcl 元件, 不過語法不是這樣子的. 要寫為這樣:
procedure TForm1.Button4Click(Sender: TObject);
var
  a: TButton;
begin
  a:=TButton.Create(form1);// owner 指定為放在那個 form 上, 這樣在 owner 結束時便會自動 free 這個元件
  a.Name := 'mybutton';
  a.Caption := '123';
  a.Parent := form1; // Parent 指定為要出現的 form
  a.Top := 10;
  a.Left := 10;
end;
wnhoo
高階會員


發表:75
回覆:443
積分:198
註冊:2003-04-22

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-05-07 13:32:42 IP:61.155.xxx.xxx 未訂閱
我在主表單設計了一個ToolBar並且撰寫了事件...且使用SDI方式設計其他表單...因為其他表單中的ToolBar所需和主表單一模一樣...因此我希望可以將主表單中的ToolBar和事件拿來給其他表單使用...但是由於ToolBar的設計有可能變動...請問我應該如何在其他表單產生的時候動態建立跟主表單一樣的ToolBar和其事件程序呢???    //实现了动态创建窗体与LABEL控件 //我想这个例子对你的问题可能会提供一些帮助
unit Unit1; interface uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls, Buttons, ExtCtrls; type TAboutBox = class(TForm) procedure FormShow(Sender: TObject); private { Private declarations } public procedure NewMyFormClick(Sender : TObject); { Public declarations } end; var AboutBox: TAboutBox; str:string; implementation {$R *.dfm} procedure TAboutBox.NewMyFormClick(Sender : TObject); begin with TAboutBox.Create(Application) do begin Caption := datetimetostr(now()); Show; end ; end; procedure TAboutBox.FormShow(Sender: TObject); var label1:tlabel; begin label1:=tlabel.Create(self); label1.Top :=50; label1.Left :=50; label1.Caption :=str; label1.Parent:=self; end; end. unit Unit2; 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 { Public declarations } end; var Form1: TForm1; implementation uses unit1; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin unit1.str :=InputBox('Input Box', 'Prompt', '动态显示LABEL'); //动态创建FORM unit1.AboutBox.NewMyFormClick(self); end; end. 风花雪月 e梦情缘
------
风花雪月 e梦情缘
darnell
版主


發表:25
回覆:103
積分:145
註冊:2003-03-04

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-05-07 17:24:11 IP:61.219.xxx.xxx 未訂閱
非常謝謝各位的熱心解答... timhuang...動態產生元件我了解,只不過我想要的是動態產生已設計完成的元件,還是謝謝你!! wnhoo...謝謝你ㄉ類似例子... 綜合我找ㄉ一些資料和各位的解答我歸納出以下方法...也供大家參考 1.使用RTTI 2.使用New-->自己專案名稱 3.使用Frame 4.使用VCL建置法 5.程式模擬法 6.DLL呼叫法 以上是小弟歸納應該可行的方法...旦有些並沒有實際實做過只是理論上我認為可行...因此僅供參考...
系統時間:2024-06-14 11:22:35
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!