Другие языки программирования и технологии
c++ builder как сделать края label видимыми
как сделать края label видимыми, то есть чтобы была хоть какая то обводка, label используется как альтернатива кнопке, поэтому нужно чтобы у него были видны края
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.
--------------------------------------------------------------------------------
Вспоминаю что надо сходить в магазин за продуктаим - беру деньги смотрю нехватает, а сам уже автоматически думаю надо взять отгрузочный файл - найти байты денег и сделать себе побольше.. .
Один из примеров создания текстового компонента с трехмерной декоративной контурной рамкой (для создания компонента потребовалось около получаса. Он демонстрирует только принцип получения рамки. Я не стал колдовать над свойствами типа 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.
Аттрибут BorderStyle или просто Border. Точно не знаю.
Похожие вопросы
- Какую выбрать среду программирования для C++/Visual C++ для учебных целей кроме CodeGear Delphi+C++ Builder?
- heloword не запускается!? вопрос внутри!и код C+ builder! программа на С!
- C++ Builder. Вопрос внутри.
- Слышал такое мнение что C++Builder не круто а настоящие программеры пользуют visual c++, правда ли это ?
- Щас думаю какой качать учебник по С++ но тут Визуал и Бьюлдер что лучше учить Visual C++ или C++ Builder
- Как научиться программировать на C++ с нуля, имея под рукой среду разработки Borland C++ Builder 6.0
- Стоит ли учить Borland C++ Builder 6
- Как в C++ Builder 6 произвести ипорт процедуры Dll?
- У кого нибудь есть таблица описания кода ошибкок в Delphi (C++ Builder)?
- Проблемы с кодировкой в компиляторе Borland C++ Builder