是一個新的組件的多個 使用這樣的滑動塊輸入的最佳策略的創造?
不一定總是如此。 (至少按我的標準)。
創建這種新組件的最佳方法是什麼?
我知道三種方法來解決你的問題。
路號1:
創建通過使用自己動態創建Tedit
和Ttrackbar
子在Tgroupbox
後續組件的新組件嚮導中的組件。
以下是我將如何做到這一點。
unit Combindedittrack;
interface
uses
System.SysUtils, System.Classes, Vcl.Controls, Vcl.comctrls ,Vcl.StdCtrls;
type
TCombindedittrack = class(Tgroupbox)
private
{ Private declarations }
Fedit:tedit;
Ftrackbar: TTrackBar;
procedure editonchangeproc(Sender: TObject);
procedure trackbaroOnchange(Sender: TObject);
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(owner:tcomponent); override;
destructor Destroy; override;
published
{ Published declarations }
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Samples', [TCombindedittrack]);
end;
constructor TCombindedittrack.Create(owner:tcomponent);
begin
inherited Create(owner);
SetBounds(0, 0, 250, 50);
Fedit:=tedit.Create(self);
with Fedit do
begin
text := ''; //<-- you control the appearence here
top := 10;
left := 10;
height := 27;
width := 50;
parent:=self;
Onchange:=editonchangeproc; // your Onchange event handler for the Tedit
end;
Ftrackbar:=ttrackbar.Create(self);
with Ftrackbar do
begin
top := 10; //<-- you control the appearence here
left := 60;
height := 30;
width := 50;
parent:=self;
Onchange:=trackbaronchangeproc; // your Onchange event handler for the Ttrackbar
end;
end;
destructor TCombindedittrack.Destroy;
begin
Ftrackbar.Free;
Fedit.Free;
inherited;
end;
procedure TCombindedittrack.trackbaroOnchange(Sender: TObject);
begin
// <-- track bar onchange handling here.
end;
procedure TCombindedittrack.editonchangeproc(Sender: TObject);
begin
// <-- edit onchange handling here.
end;
end.
路號2:
使用框架是這樣的(我在德爾福西雅圖10)。
1)文件 - >新建 - >其他 - >(在delphi文件上搜索框架)。
2)現在添加編輯和跟蹤欄並設置他們的Onchange事件。
3)保存設備。
4)在工具面板(標準組件部分)上單擊框架組件。
5)選擇您剛創建的框架。
每次使用時都會有一個框架副本。
路號3:
使用組件模板像這樣(再次聲明,我對德爾福西雅圖10)
1)選擇您已經創建並修改tedit
和ttrackbar
。
2)在工具欄的「組件」上單擊「創建組件模板」。
3)命名您的模板,然後按確定。
4)選擇模板調色板,然後選擇您的模板。
現在請注意,即使您的代碼(事件)也添加到您的項目中。
最後
隨着我對德爾福的水平,我真的無法給你一個明確的答案,這是最好的方式,但無論如何,我已經共享的所有我所知道的,可以幫助IDE您。
編輯:由於很多評論都堅持認爲答案應該說明這是做到這一點的最好辦法。這是基於以下的最佳方式。
,讓我們把一些關鍵點應考慮選擇
易於修改的綜合控制(S)的,如果你願意的話(我的經驗,你會)時。
2.完成此任務所需的時間(這意味着您需要花費很長時間才能完成完成任務且調試和編碼最少)。
3.通用源代碼可讀性。
4.對您項目的未來有用。
現在讓我們開始批評基於這些標準的三種方法。
路號1:
C1(標準編號1):只需修改組件和每個複製品/使用的源實現將具有相同的效果和性能。然而,這不是路號3
C2的情況:這取決於你的組件的寫作知識,但此組件,我花了5分鐘來創建它,我只是在Delphi初學者。對於調試,如果出了問題,問題是在組件實現比你只需要固定一次(見C1)
C3:他們是在你的形式(S)爲您的組件的源代碼的實現只是將其添加到您的表單中,並且隱藏每件事物(例如,添加一個tedit
,並在您的表單源中查看實現)。
C4:您正在創建一個組件,畢竟這將爲您創建自己的一套組件(如Flatstyle或Indy開源組件)打開大門。所以下一次你需要這樣的東西時,你只需將它放在你的表單設計器中,就完成了。
路號2:幀
C1:它像路號1,因爲你正在創建一個組成部分,但在視覺上這一次。修改源框架將會改變副本的效果和屬性,您也可以向副本添加額外的處理。
副本的onChange事件的事件處理程序是這樣的
procedure TForm1.Frame2Edit1Change(Sender: TObject);
begin
Frame2.Edit1Change(Sender); //<-- this is the original onchange event you setup at the beginning
//<-- you can extra handling here if you want one of the replicas to behave differently than the original
end;
C2:同時,也許比路數快1
C3:在所有,它具有同樣出來的方式編號1.
C4:不像方法1號,你不能使用項目A中創建的框架項目B.因此,您的編碼和調試將保留在項目A中。
方式3:組件模板。
C1:您並未創建一個組件,您正在創建您在上一個項目中完成的確切步驟的repleca /宏。改變一個人不會改變他們分開的其他人。
C2:同時,也許比路號1
C3更快:每次模板添加到您的表格時,該事件的代碼將被添加(如果沒有一個很好的觀點是一個長的Onchange代碼)。
C4:您可以在項目中的項目B.創建的模板但是你在項目中寫道:將在項目B(見C1)甚至沒有B工程存在的變量(引用考慮到每次使用模板之間的時間段,這可能很難調試和誤導。
結論:每個呈現方式會消耗時間編寫和調試,所有的人都會做任務,如何過爲簡單起見,用最小的風險之路號碼1的複用在這裏是安全的選擇因爲它會讓你有機會更新和安全升級。也調試更快。
關於方式1的好處是,過了一段時間後,您將忘記實施以及內部工作情況。唯一應該記住的是組件的用途,因爲它將成爲你使用的各種組件之一(你不知道如何實現Tedit
,你不需要,但是你可以在每一個單獨的組件中使用它你創建的項目)。
根據給定的標準方式編號1是最好的。
我會從'TCustomControl'派生和'SetSubComponent'這些子控件。剩下的就是將這些子控件作爲屬性發布,或者發佈一些基本的屬性集(例如這些子控件的值和位置)。另一種方法是使用框架,但是有人將內部控件移動的風險。 – Victoria
@維多利亞你能解釋一下你的意思嗎?「但是有人冒着內部控制的風險」?用戶如何移動控件? – user3384674
當然:)如果你將使用幀('TFrame'),你或其他人將能夠分別在每一幀中移動容器內的控件(據我所知)。因此,他們可以打破原有的控制佈局(最終可能需要 - 取決於您的需求)。如果你創建一個複合控件,這是不可能發生的。 – Victoria