Форум: "Основная";
Текущий архив: 2004.03.09;
Скачать: [xml.tar.bz2];
ВнизКак изменить цвет фонта на кнопке Найти похожие ветки
← →
Demon_mhm (2004-02-26 11:55) [0]Необходимо менять цвет надписи на кнопке (обычный
TButton
) после нажатия. Обычное изменениеfont.color
не работает, все parent-ы стоят вfalse
. Подскажите пожалуйста.
← →
Lena19 (2004-02-26 11:56) [1]попробуй refresh
← →
Demon_mhm (2004-02-26 11:58) [2]Пробовал - не работает. Не могу даже руками изменить. Надпись все время остается черной. Мне говорили что надо перекрывать родительские свойства. но я слабо представляю как это делается...
← →
Алхимик (2004-02-26 12:06) [3]Используйте TSpeedButton или TBitBtn.
У обычного TButton поменять цвет надписи нельзя.
← →
serge (2004-02-26 12:10) [4]Вот тебе цветная кнопка, уж сам рисуй текст своим цветом
Unit colorbtn;
Interface
Uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons;
Const
BS_LEFT = $100;
{$EXTERNALSYM BS_RIGHT}
BS_RIGHT = $200;
{$EXTERNALSYM BS_CENTER}
BS_CENTER = 768;
Type
TColorBtn = Class(TButton)
private
FCanvas: TCanvas;
IsFocused: Boolean;
F3DFrame: boolean;
FButtonColor: TColor;
FStrAliniere: String;
FIntAliniere: longint;
Procedure SetAliniere(Value: String);
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
Procedure CreateParams(Var Params: TCreateParams); override;
Procedure SetButtonStyle(ADefault: Boolean); override;
public
Constructor Create(AOwner: TComponent); override;
Destructor Destroy; override;
published
Property TextAlign: String read FStrAliniere write SetAliniere;
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);
Height := 21;
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);
FStrAliniere := "Center";
Params.Style := (BS_PUSHBUTTON + FIntAliniere + WS_CHILD + WS_VISIBLE + WS_TABSTOP + BS_OWNERDRAW);
Params.ExStyle := Params.ExStyle Or WS_EX_STATICEDGE;
// With Params Do Style := Style Or BS_OWNERDRAW;
End;
Procedure TColorBtn.SetAliniere(Value: String);
Begin
If Value <> FStrAliniere Then
Begin
FStrAliniere := Value;
If Value = "Right" Then FIntAliniere := BS_RIGHT;
If Value = "Left" Then FIntAliniere := BS_LEFT;
If Value = "Center" Then FIntAliniere := BS_CENTER;
Invalidate;
End;
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);
Var
RC: TRect;
Flags: Longint;
State: TButtonState;
IsDown, IsDefault: Boolean;
DrawItemStruct: TDrawItemStruct;
Begin
DrawItemStruct := Message.DrawItemStruct^;
FCanvas.Handle := DrawItemStruct.HDC;
RC := ClientRect;
With DrawItemStruct Do Begin
IsDown := ItemState And ODS_SELECTED <> 0;
IsDefault := ItemState And ODS_FOCUS <> 0;
If Not Enabled Then State := bsDisabled
Else If IsDown Then State := bsDown
Else State := bsUp;
End;
Flags := DFCS_BUTTONPUSH Or DFCS_ADJUSTRECT;
If IsDown Then Flags := Flags Or DFCS_PUSHED;
If DrawItemStruct.ItemState And ODS_DISABLED <> 0 Then Flags := Flags Or DFCS_INACTIVE;
If IsFocused Or IsDefault Then
Begin
FCanvas.Pen.Color := clNavy;
FCanvas.Pen.Width := 1;
FCanvas.Brush.Style := bsClear;
FCanvas.Rectangle(RC.Left, RC.Top, RC.Right, RC.Bottom);
InflateRect(RC, -1, -1);
End;
If IsDown Then Begin
FCanvas.Pen.Color := clBtnShadow;
FCanvas.Pen.Width := 1;
FCanvas.Rectangle(RC.Left, RC.Top, RC.Right, RC.Bottom);
InflateRect(RC, -1, -1);
If F3DFrame Then Begin
FCanvas.Pen.Color := FButtonColor;
FCanvas.Pen.Width := 1;
DrawFrameControl(DrawItemStruct.HDC, RC, DFC_BUTTON, Flags);
End;
End Else
DrawFrameControl(DrawItemStruct.HDC, RC, DFC_BUTTON, Flags);
FCanvas.Brush.Color := FButtonColor;
FCanvas.FillRect(RC);
InflateRect(RC, 1, 1);
If IsFocused Then
Begin
RC := ClientRect;
InflateRect(RC, -1, -1);
End;
FCanvas.Font := Self.Font;
If IsDown Then OffsetRect(RC, 1, 1);
DrawButtonText(Caption, RC, State, 0);
If IsFocused {And IsDefault} Then
Begin
RC := ClientRect;
InflateRect(RC, -4, -4);
FCanvas.Pen.Color := clBlack;
Windows.DrawFocusRect(FCanvas.Handle, RC);
End;
FCanvas.Handle := 0;
End;
Procedure TColorBtn.CalcuateTextPosition(Const Caption: String; Var TRC: TRect; BiDiFlags: Integer);
Var
TB: TRect;
TS, TP: TPoint;
Begin
With FCanvas Do Begin
TB := Rect(0, 0, TRC.Right + TRC.Left, TRC.Top + TRC.Bottom);
DrawText(Handle, PChar(Caption), Length(Caption), TB, DT_CALCRECT Or BiDiFlags);
TS := Point(TB.Right - TB.Left, TB.Bottom - TB.Top);
TP.X := ((TRC.Right - TRC.Left) - TS.X + 1) Div 2;
TP.Y := ((TRC.Bottom - TRC.Top) - TS.Y + 1) Div 2;
OffsetRect(TB, TP.X + TRC.Left, TP.Y + TRC.Top);
TRC := TB;
End;
End;
Procedure TColorBtn.DrawButtonText(Const Caption: String; TRC: TRect; State: TButtonState; BiDiFlags:
Integer);
Begin
With FCanvas Do Begin
CalcuateTextPosition(Caption, TRC, BiDiFlags);
Brush.Style := bsClear;
If State = bsDisabled Then Begin
OffsetRect(TRC, 1, 1);
Font.Color := clBtnHighlight;
DrawText(Handle, PChar(Caption), Length(Caption), TRC,
DT_CENTER Or DT_VCENTER Or BiDiFlags);
OffsetRect(TRC, -1, -1);
Font.Color := clBtnShadow;
DrawText(Handle, PChar(Caption), Length(Caption), TRC,
DT_CENTER Or DT_VCENTER Or BiDiFlags);
End Else
DrawText(Handle, PChar(Caption), Length(Caption), TRC,
DT_CENTER Or DT_VCENTER Or BiDiFlags);
End;
End;
Procedure Register;
Begin
RegisterComponents("Standard", [TColorBtn]);
End;
End.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.03.09;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.008 c