Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.09;
Скачать: CL | DM;

Вниз

Как изменить цвет фонта на кнопке   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
14-25907
Grugan
2004-02-10 19:32
2004.03.09
WinInet функции


6-25837
Typoi_Beginer
2003-12-28 18:29
2004.03.09
Передача данных на удалённый комп.


1-25778
siriusP
2004-02-26 11:58
2004.03.09
Массив компонент в Run-Time


7-25957
Japan
2003-12-13 16:03
2004.03.09
При сохранении файла притормаживает


1-25812
Grinder
2004-02-25 20:26
2004.03.09
StringList умная сортировка