Форум: "Основная";
Текущий архив: 2003.11.24;
Скачать: [xml.tar.bz2];
Внизразработка оконных компонент Найти похожие ветки
← →
Arm79 (2003-11-14 14:44) [0]Всем привет. Подскажите, пожалуйста, общий подход к созданию собственных оконных компонент наподобие labeledEdit. Конкретнее меня интересует на основе какого типа нужно создавать такой компонент? Ведь label - это TGraphicControl, а Edit - это TWinControl. Как их состыковать? И еще, как сделать так, чтобы некоторые события подкомпонента не отсвечивались, либо были ReadOnly?
Спасибо всем откликнувшимся.
← →
Arm79 (2003-11-14 14:50) [1]В коде самого LabeledEdit я не пока не могу разобраться
← →
Skier (2003-11-14 14:52) [2]
> В коде самого LabeledEdit я не пока не могу разобраться
В чём конкретно не можешь разобраться ?
← →
Arm79 (2003-11-14 14:54) [3]Да что от чего. Так иерархия такая. И непонятно, как менять координаты лейбла
← →
Arm79 (2003-11-14 16:51) [4]и никто больше не подскажет?
← →
dataMaster (2003-11-14 17:07) [5]Когда-то я уже давал это здесь. Пример компонента Panel с многострочным Caption. Это есть помесь Panel и Label. Label и есть тот самый многострочный Caption. Компонент немного кривоват, но для примера подойдет:
unit dmPanel;
interface
uses
Classes,
ExtCtrls,
StdCtrls;
type
TdmPanel = class(TCustomPanel)
private
{ Private declarations }
CapLabel: TLabel;
protected
{ Protected declarations }
function GetCaption: string;
procedure SetCaption(Value: string);
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
{ Published declarations }
property Align;
property Alignment;
property Anchors;
property AutoSize;
property BevelInner;
property BevelOuter;
property BevelWidth;
property BiDiMode;
property BorderWidth;
property BorderStyle;
property Caption: string read GetCaption write SetCaption;
property Color;
property Constraints;
property Ctl3D;
property UseDockManager default True;
property DockSite;
property DragCursor;
property DragKind;
property DragMode;
property Enabled;
property FullRepaint;
property Font;
property Locked;
property ParentBiDiMode;
property ParentBackground;
property ParentColor;
property ParentCtl3D;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property ShowHint;
property TabOrder;
property TabStop;
property Visible;
property OnCanResize;
property OnClick;
property OnConstrainedResize;
property OnContextPopup;
property OnDockDrop;
property OnDockOver;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnEndDock;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnGetSiteInfo;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnResize;
property OnStartDock;
property OnStartDrag;
property OnUnDock;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents("dataMaster""s Components", [TdmPanel]);
end;
function TdmPanel.GetCaption: string;
begin
Result:=CapLabel.Caption;
end;
procedure TdmPanel.SetCaption(Value: string);
begin
with CapLabel do
begin
Caption:=Value;
Left := Self.Width div 2 - Width div 2;
Top := Self.Height div 2 - Height div 2;
end;
end;
constructor TdmPanel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
CapLabel:=TLabel.Create(Self);
with CapLabel do
begin
Parent:=Self;
Transparent:=True;
end;
end;
destructor TdmPanel.Destroy;
begin
inherited Destroy;
end;
end.
← →
Arm79 (2003-11-14 17:17) [6]Это размещение на панели. Т.е. один компонент внутри другого. А нельзя сделать их "соседями"?
← →
dataMaster (2003-11-14 17:31) [7]Можно, но делать надо по-другому. Вот, было взято в кулибах:
unit Editlbl1;
interface
uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, stdctrls;
type
TLabelEdit = class(TWinControl)
private
{ Private declarations }
FEdit: TEdit;
FLabel: TLabel;
function GetLabelCaption: string;
procedure SetLabelCaption(LabelCaption: string);
function GetEditText: string;
procedure SetEditText(EditText: string);
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
published
property LabelCaption: string read GetLabelCaption write SetLabelCaption;
property EditText: string read GetEditText write SetEditText;
property Left;
property Top;
property Width;
property Height;
property Text;
property Font;
{ Можете опубликовать другие, необходимые вам свойства. }
{ Published declarations }
end;
procedure Register;
implementation
constructor TLabelEdit.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FEdit := TEdit.Create(self);
FLabel := TLabel.Create(self);
with FLabel do begin
Width := FEdit.Width;
visible := true;
Parent := self;
Caption := "LabelEdit";
end;
with FEdit do begin
Top := FLabel.Height+2;
Parent := self;
Visible := true;
end;
Top := 0;
Left := 0;
Width := FEdit.Width;
Height := FEdit.Height+FLabel.Height;
Visible := true;
end;
function TLabelEdit.GetLabelCaption: string;
begin
Result := FLabel.Caption;
end;
procedure TLabelEdit.SetLabelCaption(LabelCaption: string);
begin
FLabel.Caption := LabelCaption;
end;
function TLabelEdit.GetEditText: string;
begin
Result := FEdit.Text;
end;
procedure TLabelEdit.SetEditText(EditText: string);
begin
FEdit.Text := EditText;
end;
procedure Register;
begin
RegisterComponents("Test", [TLabelEdit]);
end;
end.
← →
KSergey (2003-11-14 17:40) [8]> [7] dataMaster © (14.11.03 17:31)
> Можно, но делать надо по-другому. Вот, было взято в кулибах:
Ага, тут они значит по простому - еще одно окно, а на него - уже все остальное (еще одно окно - Edit).
[5] dataMaster © (14.11.03 17:07)
Правда фиг знает как проще и грамотнее по дельфийски, но я бы просто в Paint панели рисовал все что надо - и все.. ;)
Хотя, может и не прав
← →
dataMaster (2003-11-14 17:58) [9]>KSergey
Правда фиг знает как проще и грамотнее по дельфийски
Эт точно...
← →
Arm79 (2003-11-14 18:18) [10]Понятно, спасибо за советы. Будем искать пути решения.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.11.24;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c