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

如何創建包含兩個類別的元件呢?

答題得分者是:ccchen
SKYSTAR
中階會員


發表:76
回覆:198
積分:64
註冊:2002-06-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-19 20:28:12 IP:210.66.xxx.xxx 未訂閱
各位大大好.... 可否請教一下,如主題.... 意思是指...假設今天想要將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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-19 20:39:39 IP:210.66.xxx.xxx 未訂閱
補充一點....    我試過在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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-19 21:03:21 IP:218.16.xxx.xxx 未訂閱
不要用 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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-20 00:59:09 IP:210.66.xxx.xxx 未訂閱
引言: 不要用 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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-03-20 08:09:43 IP:218.16.xxx.xxx 未訂閱
新做出來並加進 palette 的,就是老老實實的一個元件哩,在同一個Form使用多次同一個Frame,每個均可獨立設定的啊。 分別就只是你想要的是 TPanel 的後代,而這個是 TFrame 的後代。好處是強大很多的功能與自由度,缺點是每一個用獨立的 file (像 form)。 可能是我看不到其他比傳統自訂元件的壞處罷,可否提出來分享一下呢?
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-03-20 09:12:39 IP:61.219.xxx.xxx 未訂閱
經由此方式所建立的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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-03-20 10:01:14 IP:210.66.xxx.xxx 未訂閱
先謝謝兩位大大.....    我已改變我的做法了....因為上面的做法,一直實做不出來,也許是自己的程度太差...!!    目前己經成功的做法: 新元件: TDBEditX....繼承於TDBEdit 增加一個FocusControl屬性,這是用來選取想要和TDBEditX一同合併的元件,如:TLabel... 其它也新增了如: 合併元件的位置: 上/下/左/右.... 合併元件和TDBEditX的間隔大小....    使用過程: 從FocusControl選取合併元件時,該合併元件會依照其位置及間隔,來和TDBEditX靠在一起.... 當然啦,當移動TDBEditX時,該合併元件也是一同被移動... 簡單說,使用起來就好像是一個元件中有兩個元件!! 最好用的地方,就是 > 不管怎樣,接下來就可以從 >
系統時間:2024-05-17 3:50:35
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!