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

一個複合物件的怪問題!ActiveControl 使用問題!

缺席
g9221712
高階會員


發表:145
回覆:344
積分:162
註冊:2006-07-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-01-20 01:35:21 IP:220.134.xxx.xxx 訂閱
一個複合物件的怪問題!
各位前輩及版主大人:
我自己寫了一個複合物件,就是一個物件內包含三個物件TLable Ttntdbedit TLable
但是我使用showmessage(Self.ActiveControl.ClassName);去捉取目前表單上的物件
都會只會顯示Ttntdbedit,但是我已經有自訂物件的名稱(假設是TXXX),但是為何
捉到的物件是Ttntdbedit而非TXXX,真是搞不懂!
懇請給予提示疑惑!
------
「人們所以覺得寂寞,是因為他們會築牆,卻不會搭橋。」
程式寫的越久,卻發現自己越來越不會寫程式!
herbert2
尊榮會員


發表:58
回覆:640
積分:894
註冊:2004-04-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-01-21 23:35:08 IP:211.72.xxx.xxx 訂閱
您的複合物件是 TComponent 嗎?
ActiveControl 必須是可以有焦點的 TWinControl 元件, TLable 及 TComponent 不會有焦點, 故也就不會是 ActiveControl.
herbert2
尊榮會員


發表:58
回覆:640
積分:894
註冊:2004-04-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-01-21 23:35:34 IP:211.72.xxx.xxx 訂閱
您的複合物件是 TComponent 嗎?
ActiveControl 必須是可以有焦點的 TWinControl 元件, TLable 及 TComponent 不會有焦點, 故也就不會是 ActiveControl.
g9221712
高階會員


發表:145
回覆:344
積分:162
註冊:2006-07-06

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-01-21 23:49:20 IP:220.134.xxx.xxx 訂閱
我的複合物件是繼承TWinControl去實作的,但是我的疑問是
既然是複合物件,表單上也是複合物件,當我使用ActiveControl.ClassName
去取得類別名稱時,當焦點在我複合物件內的Ttntdbedit物件上時,
為何取得的不是我自訂名稱的複合物件名稱,而是原來的Ttntdbedit物件,

因為如果這樣,我不知道要怎麼判斷
procedure TFRM_BASEFORM.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin

// Ctrl F 搜尋
if (Shift = [ssCtrl]) and (Key = 70) then
begin
if Self.ActiveControl.ClassName = '我自訂的名稱' then
begin
showmessage(Tyaoedit(Self.ActiveControl).DB_Field_QueryName); // 我自訂複合物件內的屬性,一直執行不到這一行
Exit;
end;

------
「人們所以覺得寂寞,是因為他們會築牆,卻不會搭橋。」
程式寫的越久,卻發現自己越來越不會寫程式!
g9221712
高階會員


發表:145
回覆:344
積分:162
註冊:2006-07-06

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-01-22 17:06:18 IP:220.134.xxx.xxx 訂閱
後來我改了方法,但是這個問題雖然暫時擱下,但是有點小不甘願!
procedure TFRM_BASEFORM.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var
I: integer;
frm: TForm;
begin

frm := TForm((self)); // move to next control;
// Ctrl F 搜尋
if (Shift = [ssCtrl]) and (Key = 70) then
begin
for I := 0 to frm.ComponentCount - 1 do
begin
if frm.Components[I] is TYaoEdit then
begin
if TYaoEdit(frm.Components[I]).Focused then // 改成這樣才可以
begin
showmessage(Tyaoedit(frm.Components[I]).DB_Field_QueryName);
end;
end;
end;

------
「人們所以覺得寂寞,是因為他們會築牆,卻不會搭橋。」
程式寫的越久,卻發現自己越來越不會寫程式!
系統時間:2024-11-22 4:56:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!