Мир программирования

 


Найти: на:


Меню
Партнеры
Счетчики
Реклама

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 do

FFont.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 of

taRightJustify: 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;
begin

FCaption := strIn;

 

if Assigned(FOnChange) then

FOnChange(Self);

 

Invalidate ;

end ;

procedure TIDSLabel.SetFont;
begin

FFont.Assign(fntNew);

Invalidate ;

end ;

procedure TIDSLabel.SetOffset;
begin

FOffset := bOffNew;

Invalidate ;

end ;

end .

 

[Оглавление]

Опрос

Конкурсы
Реклама

 

Web дизайн: Бурлаков Михаил    

Web программирование: Бурлаков Михаил

Используются технологии uCoz