Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.011 c
3-78749
Dysan
2003-11-06 11:00
2003.11.24
Как через ADOQuery сделать выборку из таблиц из разных директори?


1-79038
Ragazor
2003-11-13 13:13
2003.11.24
Как правильно устанавливать соед. по DDE?


7-79197
Staryker
2003-09-08 21:51
2003.11.24
Как сделать чтобы комп не выключался?


14-79160
Pat
2003-10-31 12:49
2003.11.24
Клиент чата Мастеров by easy


7-79208
Lamerr
2003-09-15 09:19
2003.11.24
Утилиты для просмотра загруженности оперативки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский