Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-25894
ИМХО
2004-02-16 03:23
2004.03.09
В чем причина феноменального успеха Microsoft Corp.?


14-25875
sHinE
2004-02-16 21:59
2004.03.09
WinAPI в TurboPascal


11-25725
avakss
2003-06-19 18:42
2004.03.09
KOLFTP


14-25941
Khabibulin
2004-02-13 21:50
2004.03.09
EXE


8-25830
Kein
2003-10-27 18:55
2004.03.09
Вопрос к тем кто работал с DelphiX





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский