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

如何動態建立相同已建立的視窗?

答題得分者是:P.D.
ryoutobu
一般會員


發表:1
回覆:1
積分:0
註冊:2005-11-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-04-30 06:18:11 IP:220.138.xxx.xxx 訂閱
請問各位前輩,可以動態建立相同的視窗嗎?
如圖
點下 form1 的button1 會產生一個新的 form2
P.D.
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-04-30 10:29:41 IP:118.169.xxx.xxx 未訂閱
這是最簡單的範例, 由form1 開出一個 form2
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
Form2: TForm;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2:= TForm.Create(self);
... 在這裡加入 form1 的其他設計, 但這就有點技巧, 因為所有form2的物件都要自己建立, 包含事件等
Form2.Show;
end;
===================引 用 ryoutobu 文 章===================
請問各位前輩,可以動態建立相同的視窗嗎?
如圖
點下 form1 的button1 會產生一個新的form2

ryoutobu
一般會員


發表:1
回覆:1
積分:0
註冊:2005-11-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-05-01 05:36:33 IP:218.168.xxx.xxx 訂閱

我經由這篇文章的範例,實現我的需求。
http://delphi.ktop.com.tw/board.php?cid=31&fid=97&tid=62188
但如果增加一個執行緒。
執行緒如何存取Form 內的物件並且傳遞正確參數?
如以下的code,建立相同的兩個form2(這裡取名為 form2-1 form2-2)
myThread 如何正確的存取form1-1內的ProgressBar1但又不會存取到form2-2的ProgressBar1?

[code delphi]
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ExtCtrls;
Type
TFreeMyForm = procedure(FormPoint: Pointer);
type
TForm2 = class(TForm)
Button1: TButton;
Label1: TLabel;
ProgressBar1: TProgressBar;
Timer1: TTimer;
Button2: TButton;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
FreeMyForm : TFreeMyForm;
TableName : String;
end;
myThread=class(TThread)
private
{ Private declarations }
x:integer;
protected
procedure Execute; override;
end;
var
Form2: TForm2;
f:myThread;
implementation
{$R *.dfm}
procedure myThread.Execute;
var
i:integer;
begin
for i:=0 to 500 do
begin
x:=i;
sleep(1);
end;
end;
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FreeMyForm(Self);
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
f:=myThread.Create(false);
Timer1.Enabled:=true;
end;
procedure TForm2.Timer1Timer(Sender: TObject);
begin
ProgressBar1.Position:= f.x;
end;
procedure TForm2.Button2Click(Sender: TObject);
begin
f.Suspend;
end;
end.
[/code]
編輯記錄
ryoutobu 重新編輯於 2011-04-30 15:37:23, 註解 無‧
系統時間:2024-07-02 16:09:59
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!