關於程式可以指定按下的動作問題 |
答題得分者是:Mickey
|
ringox
一般會員 發表:7 回覆:14 積分:4 註冊:2003-04-09 發送簡訊給我 |
在FormCreate時ToolButton會由資料庫選單中產生對應的Caption
接著TreeView同時載入選單再讓程式可以指定按下的動作
請問我該如何,麻煩大家請大家幫幫忙以下是我目前想到的方式 procedure TFormMenu._TreePathMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var Sel,ID:String;
I:Integer;
begin
Sel:=TreePath.Selected.Text;
for I:=10 to 90 do
begin
if FindComponent('B' Inttostr(I)) <> nil then
ID:=TToolButton(FindComponent('B' inttostr(I))).Caption;
if Sel=ID then <指定按下的動作不知如何處理>
end;
end; 因為已經想很久也找不到相關的例子所以才...
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
|
ringox
一般會員 發表:7 回覆:14 積分:4 註冊:2003-04-09 發送簡訊給我 |
太感謝Mickey板主這麼快回覆^^已經解決我的問題
但是我想再請問一下
若Button是在不同的視窗中我可以去呼叫嗎
ex: FormTime.TToolButton(FindComponent('ToolButton'+Inttostr(I)));
再如果我想再將Form設為變數是否可解
是否一定要有元件才可以用此方式
如果我的程式碼已經寫好但是FindComponent沒有元件可呼應這方式還可行嗎
是不是每一個有OnClick事件的元件都可以用此方式
抱歉百忙之中打擾一下 發表人 -
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
引言: 若Button是在不同的視窗中我可以去呼叫嗎 ex: FormTime.TToolButton(FindComponent('ToolButton' Inttostr(I)));可以. 1. use FormTime 所在的 Unit. 2. TToolButton(FormTime.FindComponent('ToolButton' Inttostr(I))); 但要注意 FormTime 是否已經 create 好了. 引言: 再如果我想再將Form設為變數是否可解MDIForm 可以用一個 Loop 找 MdiChildForm, 如 : for i := 0 to MdiChildCount-1 do if (MdiChildren[i].Name='FormTime') then ... 引言: 是否一定要有元件才可以用此方式不太清楚你的問題... 用猜的回答 : FindComponent 是 TComponent 的 Method , 節錄一段 Help 內容: Indicates whether a given component is owned by the component. 只要是繼承自 TComponent Class 的, 都有此 Method. 引言: 如果我的程式碼已經寫好但是FindComponent沒有元件可呼應這方式還可行嗎如果已是 exe/dll 等, 只能透過 Win API 的方式, 如用 FindWindow 找出 Button 的 Window Handle, 然後用 SendMessage, 送 Mouse or KeyBoard Message 給它. 引言: 是不是每一個有OnClick事件的元件都可以用此方式基本上, 是的. 但是呼叫執行時, 不同的物件, 傳入的參數可能不同. |
ringox
一般會員 發表:7 回覆:14 積分:4 註冊:2003-04-09 發送簡訊給我 |
不太清楚你的問題...
用猜的回答 :
FindComponent 是 TComponent 的 Method , 節錄一段 Help 內容:
Indicates whether a given component is owned by the component.
只要是繼承自 TComponent Class 的, 都有此 Method.
引言: 如果我的程式碼已經寫好但是FindComponent沒有元件可呼應這方式還可行嗎如果已是 exe/dll 等, 只能透過 Win API 的方式, 如用 FindWindow 找出 Button 的 Window Handle, 然後用 SendMessage, 送 Mouse or KeyBoard Message 給它. [quote] ------------------------ Mickey大哥你好: 我想我的敘述不是很清楚所以你可能造成你的誤會 我做法是先將OnClick編輯好<----我想這不是正確的做法所以 然後再讓產生的選單按下執行該段程式 所以procedure XXXClick(Sender: TObject);已經存在 而我不懂得如何讓XXX的部分成為變數再去執行那一段程式 有勞你費時解決我的疑惑 |
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
|
ringox
一般會員 發表:7 回覆:14 積分:4 註冊:2003-04-09 發送簡訊給我 |
抱歉我看了例子但是我還是作不出來
以下是我的程式碼請幫我看看 謝謝 var IniFile:TIniFile;
ID,Sel,Fot,BB:String;
I,F:Integer;
m:TMyPorcdure;
p:Pointer;
begin
Sel:=TreeEdit.Selected.Text;
IniFile:=TIniFile.create('.\Databass\System.ini');
Fot:=EditID.Hint;
if Sel=IniFile.ReadString(Fot,'Button'+Inttostr(I),'') then
begin
for F := 0 to MdiChildCount-1 do
if (MdiChildren[F].Name=Fot) then
begin
for I:=0 to 9 do
begin
BB:='_B80';<------此處可否改為變數FORM
if ID=BB then
p:=MethodAddress(ID);
if p<>nil then
begin
TMethod(m).Code := p;
TMethod(m).Data := Self;
m(Sender);
end
else raise Exception.CreateFmt('Procedure %ID not exists',[ID]);
end;
end;
end;
IniFile.Free;
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
引言: 抱歉我看了例子但是我還是作不出來 以下是我的程式碼請幫我看看 謝謝var IniFile:TIniFile; ID,Sel,Fot,BB:String; I,F:Integer; m:TMyPorcdure; p:Pointer; begin Sel:=TreeEdit.Selected.Text; IniFile:=TIniFile.create('.\Databass\System.ini'); Fot:=EditID.Hint; if Sel=IniFile.ReadString(Fot,'Button' Inttostr(I),'') then begin for F := 0 to MdiChildCount-1 do if (MdiChildren[F].Name=Fot) then begin for I:=0 to 9 do begin BB:='_B80';<------此處可否改為變數FORM if ID=BB then p:=MethodAddress(ID); if p<>nil then begin TMethod(m).Code := p; TMethod(m).Data := Self; m(Sender); end else raise Exception.CreateFmt('Procedure %ID not exists',[ID]); end; end; end; IniFile.Free; |
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
|
ringox
一般會員 發表:7 回覆:14 積分:4 註冊:2003-04-09 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |