請問,怎麼動態新增按鈕呀?? |
|
JASAM
一般會員 發表:4 回覆:4 積分:1 註冊:2002-03-14 發送簡訊給我 |
嗨!大家好:
方才查閱了一下先前的資料,發現有幾個動態新增元件的說明,
雖然依樣話葫蘆,但是還是沒有反應,傷腦筋,可以指點一下嘛? 目的:想要按一下按鈕就動態新增一個新的按鈕
我的原始碼:
procedure TForm1.Button1Click(Sender: TObject);
var btn : TButton;
begin
btn := TButton.Create(Self);
Height := Height 40;
btn.Top := Height-30;
btn.Left := 8;
btn.Height := 25;
btn.Width := 137;
btn.Visible := True;
end;
| ||
mihopaul
一般會員 發表:25 回覆:59 積分:16 註冊:2002-03-17 發送簡訊給我 |
引言: 嗨!大家好: 方才查閱了一下先前的資料,發現有幾個動態新增元件的說明, 雖然依樣話葫蘆,但是還是沒有反應,傷腦筋,可以指點一下嘛? 目的:想要按一下按鈕就動態新增一個新的按鈕 我的原始碼: procedure TForm1.Button1Click(Sender: TObject); var btn : TButton; begin btn := TButton.Create(Self); btn.parent:=self; ------------>加上這行就會出現了^^ Height := Height 40; btn.Top := Height-30; btn.Left := 8; btn.Height := 25; btn.Width := 137; btn.Visible := True; end; 至於為什麼,不好意思,我也不知道,書上是這樣子的^^ |
||
JASAM
一般會員 發表:4 回覆:4 積分:1 註冊:2002-03-14 發送簡訊給我 |
|||
mihopaul
一般會員 發表:25 回覆:59 積分:16 註冊:2002-03-17 發送簡訊給我 |
例如,我一次新增十個按鈕後,
我想要針對他們一個一個設定Caption的屬性,
我應該怎麼做呢?
是不是有像是陣列的設定方式呢?
像是 btn[1].Caption 這樣?? 我幫你找了一下相關的問題解答,請你自已試試噲^^
我想主要的部份是 ComponentCount和 Components這二個用法,你了解了就
會吧^^ ===============這是hagar大大對別人的解答,我想你改一下,應該可以
var edt: TEdit;
i: Integer;
begin for i := 1 to 20 do begin
edt := FindComponent('Edit' IntToStr(i)) as TEdit; edt.Text := ''
end;
end; =============這是別人的解答 BCB的,但我想delphi也一樣吧 由於動態建立元件, 都會指定Owner, 所以
在Owner裡, 一個一個比對, 如果是動態生成的元件, 就釋放
像這樣
for (int i=0;i{
if (Components[i]->Name="Button1")
Components[i]->Free();
}
====================================mhwu1
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;
Btn: TButton;
begin
for i := 0 to 10 do begin
Btn := TButton.Create(Self);
Btn.Parent := Self;
Btn.Top := i * 20;
Btn.Left := i * 30;
end;
// 此處 TForm 為 Btn 的容器類別 for i := 0 to Self.ComponentCount - 1 do begin
if Self.Components[i].ClassName = 'xxx' then
// 利用 ClassName 或其他相關資訊找到你要的 Component
end; end;
|
||
mihopaul
一般會員 發表:25 回覆:59 積分:16 註冊:2002-03-17 發送簡訊給我 |
你可以利用搜尋文章的功能去找,這應該是很多人問過的問題~~ 我下面的都是在深度歷險找到的,用動態二字就找的到了 這還有個相關的討論
http://forum.vclxx.org/topic.php?TOPIC_ID=3826&FORUM_ID=3&CAT_ID=2&Topic_Title=½аݥi¥H°ʺA«ü©w¤¸¥ó¦WºٶÜ? ex:form1.label(1.....10).caption&Forum_Title=Misc http://forum.vclxx.org/topic.php?TOPIC_ID=8120&FORUM_ID=4&CAT_ID=2&Topic_Title=¦p¦ó¦b°õ¦æ®ɴA°ʺAªº®ø·Àpanel¤Wªº¤¸¥ó©O?&Forum_Title=VCL http://forum.vclxx.org/topic.php?TOPIC_ID=8172&FORUM_ID=4&CAT_ID=2&Topic_Title=Ãö©ó°õ¦æ®ɴA°ʺA§R°£°ʺA·s¼Wªº¤¸¥ó(part ii)&Forum_Title=VCL 至於事件部份則有下面這個
http://forum.vclxx.org/topic.php?TOPIC_ID=2189&FORUM_ID=8&CAT_ID=2&Topic_Title=¦p¦ó°ʺA«ü©wEvent&Forum_Title=Pascal http://forum.vclxx.org/topic.php?TOPIC_ID=11398&FORUM_ID=4&CAT_ID=2&Topic_Title=½аÝDelphi¥i¥H°ʺA«ü©wEventn°õ¦檺Procedure¶Ü??&Forum_Title=VCL
|
||
JASAM
一般會員 發表:4 回覆:4 積分:1 註冊:2002-03-14 發送簡訊給我 |
|||
JASAM
一般會員 發表:4 回覆:4 積分:1 註冊:2002-03-14 發送簡訊給我 |
可以再發問嗎?!
就是呀,我已經動態新增了按鈕,並可以設定他們各自的屬性了,但是,
我要從哪裡設定他們的Events觸發事件呀!?
-------------------------------------------------------------------
//假設我動態新增了一個按鈕叫做button2,接著試著想要設定它的事件...
if self.Components[i] is TButton then
if self.Components[i].Name = 'button2' then
begin
//像一般事件都是直接到Events的地方做觸發事件的設定,那麼,
//假設現在這個Components[i]就是我想要設定的對象,我怎麼針對它做
//觸發事件的設定呢?
end;
-------------------------------------------------------------------
|
||
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
|||
linkolong
一般會員 發表:4 回覆:35 積分:12 註冊:2002-04-23 發送簡訊給我 |
1.建立陣列
var
BtnArray:Array [0..4] of TButton;
2.利用迴圈產生BtnArray,並指派屬性事件,並設定Tag值以檢索事件
var
loop:integer;
begin
for loop:= 0 to 4
begin
BtnArray[loop]:=TButton.Create(Self);
with BtnArray[loop] do
begin
Parent :=self; //指定舥泊地點
Caption :=IntToStr(loop);
Width :=50;
Height :=25;
Top :=30;
Left :=(loop*60) 10;
Tag :=loop;
OnClick :=ButtonClick;
end;
end;
3.設定ButtonClick,並利用Tag值以檢索事件
procedure TForm1.ButtonClick(Sender: TObject);
var
t : Integer;
begin
t:=(Sender as TButton).Tag;
MessageBox.Caption:='You pressed Button ' IntToStr(t);
end;
另外,當然你也可以直接在2.中直接設定對應的事件,以下為部分程式碼
Top :=30; //見2.xxx之程式區塊敘述
Left :=(loop*60) 10;
case loop of
0 :OnClick:=BCK0 ; //需設定BCK0,1,2,3,4滑鼠觸發事件以對應
1 :OnClick:=BCK1 ; //兩邊事件型態需符合
2 :OnClick:=BCK2 ; //也就是說不可將KeyEvent指派給mouseEvent
3 :OnClick:=BCK3 ;
4 :OnClick:=BCK4 ;
end;
|
||
welkin
一般會員 發表:2 回覆:6 積分:1 註冊:2002-09-28 發送簡訊給我 |
小弟另外有個問題
小弟目前已經動態新增了按鈕陣列
但是要如何針對不同的按鈕設定事件呢?
譬如:
小弟希望按下第二排第一個按鈕(button name = W2L1)
系統可以自動將該按鈕設定成visable = False;
或是可以改變該按鈕的caption
該如何設定呢? 以下是小弟產生動態陣列的原始代碼
希望有前輩可以指導一下,謝謝. procedure Tnew_class_seat.Button1Click(Sender: TObject);
var
BtnArray:Array of Array of TButton;
I,J : integer;
Btn_front : TButton;
begin setLength(BtnArray,25,25); for I := 1 to StrtoInt(EX.Text) do
begin
for J :=1 to StrToInt(EY.Text) do
begin
BtnArray[I,J]:=TButton.Create(Self);
with BtnArray[I,J] do
begin
Parent :=self;
Caption :=IntToStr(I) '-' IntToStr(J);
Name :='W' IntToStr(I) 'L' IntToStr(J);
Width :=25;
Height :=25;
Top :=(J*30) 60;
Left :=(I*30) 150;
Tag :=StrToInt(IntToStr(I) IntToStr(J));
OnClick :=ButtonClick;
end;
end;
end;
Btn_front:=TButton.Create(Self);
Btn_front.Parent :=self;
Btn_front.Caption :='黑板';
Btn_front.Width := StrtoInt(EX.Text)*30 - 5;
Btn_front.Height :=25;
Btn_front.Top := 60;
Btn_front.Left :=180;
end;
|
||
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
|||
welkin
一般會員 發表:2 回覆:6 積分:1 註冊:2002-09-28 發送簡訊給我 |
|||
andersonhsieh
版主 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
|||
welkin
一般會員 發表:2 回覆:6 積分:1 註冊:2002-09-28 發送簡訊給我 |
是的...小弟也是這麼打算的
不過現在不知道該怎麼用語法....
所以卡住了...
以下是程式的片段
不知道有哪位前輩可以指導一下 try
mySQLTable1.Open; setLength(BtnArray,26,26);
for I := 1 to StrtoInt(EX.Text) do
begin
for J :=1 to StrToInt(EY.Text) do
begin
mySQLTable1.Insert;
Button_temp := 'W' IntToStr(I) 'L' IntToStr(J);
mySQLTable1.FieldByName('classroom_id').Value := classroom_id.Text;
mySQLTable1.FieldByName('classroom_name').Value := classroom_name.Text;
mySQLTable1.FieldByName('classroom_id').Value := classroom_id.Text;
mySQLTable1.FieldByName('EX').Value := EX.Text;
mySQLTable1.FieldByName('EY').Value := EY.Text;
mySQLTable1.FieldByName('seat_name').Value :=Button_temp;
//mySQLTable1.FieldByName('seat_color').Value := PDJButton(Sender).color;
//mySQLTable1.FieldByName('seat_font_color').Value := BtnArray[I,J].font.color;
mySQLTable1.FieldByName('create_date').Value := strnow;
mySQLTable1.post;
end;
end;
showmessage('建立成功!!');
except
showmessage('錯誤訊息');
abort();
end;
|
||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 小弟已經大致完成了 謝謝各位大哥 不過還有個問題.... 如果要存入資料庫 要如何將動態產生的按鈕一筆一筆的置入資料庫呢? 另外 以後要如何從資料庫內叫出來 並排列成先前的陣列狀態呢?...謝謝~將整個元件存入資料庫的Text型態的欄位,要用再建立此元件即可。 如下是Delphi的Help function ComponentToString(Component: TComponent): string; var BinStream:TMemoryStream; StrStream: TStringStream; s: string; begin BinStream := TMemoryStream.Create; try StrStream := TStringStream.Create(s); try BinStream.WriteComponent(Component); BinStream.Seek(0, soFromBeginning); ObjectBinaryToText(BinStream, StrStream); StrStream.Seek(0, soFromBeginning); Result:= StrStream.DataString; finally StrStream.Free; end; finally BinStream.Free end; end; function StringToComponent(Value: string): TComponent; var StrStream:TStringStream; BinStream: TMemoryStream; begin StrStream := TStringStream.Create(Value); try BinStream := TMemoryStream.Create; try ObjectTextToBinary(StrStream, BinStream); BinStream.Seek(0, soFromBeginning); Result := BinStream.ReadComponent(nil); finally BinStream.Free; end; finally StrStream.Free; end; end;
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
||
welkin
一般會員 發表:2 回覆:6 積分:1 註冊:2002-09-28 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |