Чтение онлайн

ЖАНРЫ

Советы по Delphi. Версия 1.4.3 от 1.1.2001

Озеров Валентин

Шрифт:

finally

FreeMem(CrtTableDesc.pFLDDesc, iDestMemSize);

end;

finally

FreeMem(pSrcFldDes, iSrcMemSize);

end;

finally

Session.CloseDatabase(DestDatabase);

end;

 finally

Session.CloseDatabase(SrcDatabase);

 end;

end;

Button 

Цветная

кнопка

VS пишет:

В книгах Калверта, Свана и других авторов можно найти похожий текст. Смысл текста — "Изменить цвет кнопок Button, BitBt нельзя, т.к. их рисует WINDOWS". Если нельзя, но ОЧЕНЬ НУЖНО, то можно.

Небольшой компонент ColorBtn, дает возможность использовать в кнопках цвет. Кроме того, представлено новое свойство — Frame3D, позволяющее получить более реалистичный вид нажатой кнопки. В отличие от API, при изменении значения свойства Frame3D, не требуется переоткрытие компонента.

unit ColorBtn;

interface

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons;

type TColorBtn = class(TButton)

private

 { Private declarations }

 IsFocused: boolean;

 FCanvas: TCanvas;

 F3DFrame: boolean;

 FButtonColor: TColor;

 procedure Set3DFrame(Value: boolean);

 procedure SetButtonColor(Value: TColor);

 procedure CNDrawItem(var Message: TWMDrawItem); message CN_DRAWITEM;

 procedure WMLButtonDblClk(var Message: TWMLButtonDblClk); message WM_LBUTTONDBLCLK;

 procedure DrawButtonText(const Caption: string; TRC: TRect; State: TButtonState; BiDiFlags: Longint);

 procedure CalcuateTextPosition(const Caption: string; var TRC: TRect; BiDiFlags: Longint);

protected

 { Protected declarations }

 procedure CreateParams(var Params: TCreateParams); override;

 procedure SetButtonStyle(ADefault: boolean); override;

public

 { Public declarations }

 constructor Create(AOwner: TComponent); override;

 destructor Destroy; override;

published

 { Published declarations }

 property ButtonColor: TColor read FButtonColor write SetButtonColor default clBtnFace;

 property Frame3D: boolean read F3DFrame write Set3DFrame default False;

end;

procedure Register;

implementation

{ TColorBtn }

constructor TColorBtn.Create(AOwner: TComponent);

begin

 Inherited Create(AOwner);

 FCanvas:= TCanvas.Create;

 FButtonColor:= clBtnFace;

 F3DFrame:= False;

end;

destructor TColorBtn.Destroy;

begin

 FCanvas.Free;

 Inherited Destroy;

end;

procedure TColorBtn.CreateParams(var Params: TCreateParams);

begin

 Inherited CreateParams(Params);

 with Params do Style:= Style or BS_OWNERDRAW;

end;

procedure TColorBtn.Set3DFrame(Value: boolean);

begin

 if F3DFrame <> Value then F3DFrame:= Value;

end;

procedure TColorBtn.SetButtonColor(Value: TColor);

begin

 if FButtonColor <> Value then begin

FButtonColor:= Value;

Invalidate;

 end;

end;

procedure TColorBtn.WMLButtonDblClk(var Message: TWMLButtonDblClk);

begin

 Perform(WM_LBUTTONDOWN, Message.Keys, Longint(Message.Pos));

end;

procedure TColorBtn.SetButtonStyle(ADefault: Boolean);

begin

 if IsFocused <> ADefault then IsFocused:= ADefault;

end;

procedure TColorBtn.CNDrawItem(var Message: TWMDrawItem);

Поделиться с друзьями: