Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.24;
Скачать: CL | DM;

Вниз

разработка оконных компонент   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.043 c
3-78812
Vi0let
2003-11-05 08:29
2003.11.24
Нужно: DBComboBox отображает наименования, а возвращает код


3-78790
Alibaba
2003-11-04 13:17
2003.11.24
Результат


1-78903
Катерина
2003-11-12 15:30
2003.11.24
Создание метода RUN-TIME


3-78834
i
2003-11-03 17:56
2003.11.24
CGI модуль для работы с БД MS Access


6-79089
explorer
2003-09-18 06:36
2003.11.24
Удаленный запуск программ