Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Комбинация TLabel и TEdit

01.01.2007
Автор: Mike Scott

При размещении на форме, создается TLabel, расположенный выше поля редактирования. При перемещении поля редактирования, TLabel "следует" за ним. При удалении поля редактирования, TLabel также удаляется. Имеется свойство LabelCaption, так что вы можете редактировать заголовок Tlabel. Вероятно вам потребуются и другие свойства TLabel, типа Font, но этот код только демонстрирует технологию, так что развивайте его по своему усмотрению.

unit LblEdit;
 
interface
 
uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls;
 
type
  TLabelEdit = class(TEdit)
  private
    FLabel: TLabel;
    procedure WMMove(var Msg: TWMMove); message WM_MOVE;
  protected
    procedure SetParent(Value: TWinControl); override;
    function GetLabelCaption: string; virtual;
    procedure SetLabelCaption(const Value: string); virtual;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property LabelCaption: string read GetLabelCaption write
      SetLabelCaption;
 
  end;
 
procedure Register;
 
implementation
 
constructor TLabelEdit.Create(AOwner: TComponent);
 
begin
  inherited Create(AOwner);
 
  { создаем TLabel }
  FLabel := TLabel.Create(nil);
  FLabel.Caption := 'Edit label';
end;
 
procedure TLabelEdit.SetParent(Value: TWinControl);
 
begin
  { убеждаемся, что TLabel имеет того же родителя что и TEdit }
  if (Owner = nil) or not (csDestroying in Owner.ComponentState) then
    FLabel.Parent := Value;
  inherited SetParent(Value);
end;
 
destructor TLabelEdit.Destroy;
 
begin
  if (FLabel <> nil) and (FLabel.Parent = nil) then
    FLabel.Free;
  inherited Destroy;
end;
 
function TLabelEdit.GetLabelCaption: string;
 
begin
  Result := FLabel.Caption;
end;
 
procedure TLabelEdit.SetLabelCaption(const Value: string);
 
begin
  FLabel.Caption := Value;
end;
 
procedure TLabelEdit.WMMove(var Msg: TWMMove);
 
begin
  inherited;
 
  { заставляем TLabel 'прилипнуть' к верху TEdit }
  if FLabel <> nil then
    with FLabel do
      SetBounds(Msg.XPos, Msg.YPos - Height, Width, Height);
end;
 
procedure Register;
begin
  RegisterComponents('Samples', [TLabelEdit]);
end;
 
initialization
  { Мы используем TLabel, поэтому для обеспечения
  "поточности" необходима регистрация }
  RegisterClass(TLabel);
end.
 
 

https://delphiworld.narod.ru/

DelphiWorld 6.0

 


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.
 

https://delphiworld.narod.ru/

DelphiWorld 6.0