Советы по Delphi



         

Label1


3D-рамка для текстовых компонентовОдин из примеров создания текстового компонента с трехмерной декоративной контурной рамкой (для создания компонента потребовалось около получаса. Он демонстрирует только принцип получения рамки. Я не стал колдовать над свойствами типа ParentFont..., т.к. это заняло бы еще немало времени и места).
unit IDSLabel;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,Dialogs,
ExtCtrls;
type
TIDSLabel = class(TBevel)private{ Private declarations }FAlignment : TAlignment;FCaption : String;FFont : TFont;FOffset : Byte;
FOnChange : TNotifyEvent;
procedure SetAlignment( taIn : TAlignment );procedure SetCaption( const strIn : String);procedure SetFont( fntNew : TFont );procedure SetOffset( bOffNew : Byte );protected{ Protected declarations }constructor Create( compOwn : TComponent ); override;destructor Destroy; override;procedure Paint; override;public{ Public declarations }published{ Published declarations }property Alignment : TAlignment read FAlignment write SetAlignment default taLeftJustify;property Caption : String read FCaption write SetCaption;property Font : TFont read FFont write SetFont;property Offset : Byte read FOffset write SetOffset;
property OnChange : TNotifyEvent read FOnChange write FOnChange;end;
implementation

constructor
TIDSLabel.Create;
begin
inherited
Create(compOwn);
FFont := TFont.Create;with compOwn as TForm doFFont.Assign(Font);
Offset := 4;Height := 15;end;

destructor TIDSLabel.Destroy;
begin
FFont.Free;
inherited Destroy;end;

procedure TIDSLabel.Paint;
var
wXPos, wYPos : Word;begin

{Рисуем рамку}inherited Paint;
{Назначаем шрифт}Canvas.Font.Assign(Font);
{Вычисляем вертикальную позицию}wYPos := (Height - Canvas.TextHeight(Caption)) div 2;
{Вычисляем горизонтальную позицию}wXPos := Offset;case Alignment oftaRightJustify: wXPos := Width - Canvas.TextWidth(Caption) - Offset;taCenter: wXPos := (Width - Canvas.TextWidth(Caption)) div 2;end;Canvas.Brush := Parent.Brush;Canvas.TextOut(wXPos,wYPos,Caption);
end;

procedure TIDSLabel.SetAlignment;
begin
FAlignment := taIn;Invalidate;end;

procedure TIDSLabel.SetCaption;
beginFCaption := strIn;
if Assigned(FOnChange) thenFOnChange(Self);
Invalidate;end;

procedure TIDSLabel.SetFont;
begin
FFont.Assign(fntNew);Invalidate;end;

procedure TIDSLabel.SetOffset;
begin
FOffset := bOffNew;Invalidate;end;

end.
[000044]


Содержание    Вперед