如何創建包含兩個類別的元件呢? |
答題得分者是:ccchen
|
SKYSTAR
中階會員 發表:76 回覆:198 積分:64 註冊:2002-06-10 發送簡訊給我 |
各位大大好.... 可否請教一下,如主題....
意思是指...假設今天想要將TLabel及TDBEdit兩個元件,利用TPanel來合併在一起,即:新元件是一個TPanel類別,且包含了TLabel及TDBEdit兩元件!
請問,該如何實作呢? 註:假設新建的元件叫: TPanelX, 想要加入的元件: TLabelX , TDBEditX 我有參考過其它類似的程式,雖然有將TLabelX及TDBEditX加入到TPanelX了,可是卻無法單獨針對TLabelX或TDBEditX來調整其屬性,事件..等等(這裡
指的調整,是指經由Object Inspector來手動調整)...
其它類似的程式之做法,簡單說明如下:
(1)在private部份,宣告FLabelX: TLabel; FDBEditX: TDBEdit;
(2)在Create部份,將這兩個元件給建立起來,並設定相關屬性
(3)完成後,在設計新專案時,將此TPanelX拉入Form,是可以看到TLabelX及TDBEditX,但是卻無法點選TLabelX及TDBEditX來設定其屬性...?? 我是認為,以上的做法之結果應該是正常的,因為今天是以TPanelX為主體,自然無法對其它動態納入的元件來做處理... 因此,如果我想要的功能是同樣和上面一樣,但是要多一個功能,就是可以去對TPanelX或TDBEditX來點選去設定屬性或事件時,該如何將TLabelX及TDBEditX加入到TPanelX呢? Thanks!!
|
SKYSTAR
中階會員 發表:76 回覆:198 積分:64 註冊:2002-06-10 發送簡訊給我 |
補充一點.... 我試過在TPanelX單元中,先宣告兩個元件,即:
type TLabelX = class(TLabel) ........ ........ end; TDBEditX = class(TDBEdit) ........ ........ end; TPanelX = class(TPanel) ........ ........ end; ......... .........然後在TPanelX.Create中,去建立TLabelX及TDBEditX..... 好像就可以達到我要的功能了....但是也衍生了三個問題.... (1)經由此方式所建立的TLabelX及TDBEditX,其屬性Name...怎麼都是空白的呢? (2)如果在Create中,將一文字設給Name....那如果我放了第二個TPanelX時,就 會發生...元件名稱重覆...的問題了?? (3)使用拷貝方式來將第一個TPanelX複製一份到Form中,卻發現TLabelX及 TDBEditX變成了兩份...(指在第二個TPanelX中的元件)??? 如果這時再將第二 個TPanelX拷貝成第三個時,天呀...TLabelX及TDBEditX又變成了三份?? 以上兩篇...還望大大們多多幫忙..... 先謝啦!! |
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
不要用 TPanel, 用 Frame 罷
1. File->New->Frame
2. 放入 TLabel 及 TDBEdit 並設好預設值
3. 調好 Frame 的大小及預值 (用時標題是隱藏的,別擔心)
4. 全部弄好後,右擊 Frame, 選 Add to Palette
5. 儲存檔案
6. 選好元件名字,頁名字,及 icon, 按 OK
7. 在你選好的頁取出該新元件到你的 Form 中
8. Frame, Label 及 DBEdit 都可設定
9. 你亦隨時可開剛 save 那個 file 改預設。
|
SKYSTAR
中階會員 發表:76 回覆:198 積分:64 註冊:2002-06-10 發送簡訊給我 |
引言: 不要用 TPanel, 用 Frame 罷 1. File->New->Frame 2. 放入 TLabel 及 TDBEdit 並設好預設值 3. 調好 Frame 的大小及預值 (用時標題是隱藏的,別擔心) 4. 全部弄好後,右擊 Frame, 選 Add to Palette 5. 儲存檔案 6. 選好元件名字,頁名字,及 icon, 按 OK 7. 在你選好的頁取出該新元件到你的 Form 中 8. Frame, Label 及 DBEdit 都可設定 9. 你亦隨時可開剛 save 那個 file 改預設。您好: 雖然說...使用Frame是可以達到這樣子的功能.... 對於只使用一個或幾個的情形下還好,但是一旦要使用多個時,還是有點不方便, 總是以為用元件來達成功能,似乎是比較可以接受的情形!! 不管怎樣....還是謝謝您的答案...!! Thanks! |
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
經由此方式所建立的TLabelX及TDBEditX,其屬性Name...怎麼都是空白的呢?
(2)如果在Create中,將一文字設給Name....那如果我放了第二個TPanelX時,就
會發生...元件名稱重覆...的問題了??
(3)使用拷貝方式來將第一個TPanelX複製一份到Form中,卻發現TLabelX及
TDBEditX變成了兩份...(指在第二個TPanelX中的元件)??? 如果這時再將第二
個TPanelX拷貝成第三個時,天呀...TLabelX及TDBEditX又變成了三份??
1. 你沒有給name當然是空白,如果固定給一個名字當然不行
最簡單的解決方法是, 再此元件取得名字時, 設定內部Label,及Edit之名字
在 TPanelX的procedure SetName做即可 2. 其實既已包成一個元件, 內部名字實在沒意義
3. 還有一些問題, 例如三個元件都有的Event, 你必須決定published用那一個,內部元件的Event必須published才可看到
例如Edit的onChange, onKeyPress原TEdit之Event若須使用都必須再TPanelX上宣告後hook上 4. 用Frame其實容易的多 5. 如果單以這個例子來說TPanel TEdit TLabel不如繼承TEdit, 內部放TLabel,如此TEdit之Event均保留不需一個個重hook 6. 單以此元件來說, Delphi6已有現成TLabeledEdit在"Additional" page
且有Source Code可參考
|
SKYSTAR
中階會員 發表:76 回覆:198 積分:64 註冊:2002-06-10 發送簡訊給我 |
先謝謝兩位大大..... 我已改變我的做法了....因為上面的做法,一直實做不出來,也許是自己的程度太差...!! 目前己經成功的做法:
新元件: TDBEditX....繼承於TDBEdit
增加一個FocusControl屬性,這是用來選取想要和TDBEditX一同合併的元件,如:TLabel...
其它也新增了如:
合併元件的位置: 上/下/左/右....
合併元件和TDBEditX的間隔大小.... 使用過程:
從FocusControl選取合併元件時,該合併元件會依照其位置及間隔,來和TDBEditX靠在一起....
當然啦,當移動TDBEditX時,該合併元件也是一同被移動...
簡單說,使用起來就好像是一個元件中有兩個元件!! 最好用的地方,就是 > 不管怎樣,接下來就可以從 >
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |