![]() |
Wie Farben von Buttons ändern?
Tachchen,
in meinem kleinen Manifest-Creator (in der ![]()
Delphi-Quellcode:
Aber irgendwie hab ich bei ganzen Button-Controls, wie z.B. TButton und TCheckBox, einfach nix gefunden, wie sowas einfach möglich ist.
THilfstyp(C).Color := Rosa;
Es färbt sich nie was, solange der XP-Style aktiv ist. Auch über den Font is nix zu machen.
Delphi-Quellcode:
(beim Panel müß man ja "nur" das ParentColor umstellen, aber sowas gibt's hier nicht)
THilfstyp(C).Font.Color := Rosa;
Hat irgendwe 'nen Tipp, wie man da was "Einfaches" machen, (soll ja nix Aufwändiges sein, also selber die Controls zu zeichnen fällt weg) oder was man sonst als "hübsche" Markierung nutzen könnte? |
Re: Wie Farben von Buttons ändern?
Du könntest vielleicht selbst die Zeichenroutine übernehmen, darin die alte vom Button aufrufen, und dann vielleicht transparent drübermalen :gruebel:
|
Re: Wie Farben von Buttons ändern?
Hallo,
der TButton kann in seiner Farbe nicht verändert werden, ein TBitBtn schon ... Heiko |
Re: Wie Farben von Buttons ändern?
Zitat:
Nja, im Grunde suche ich nur eine schöne und einfache Möglichkeit, um die Komponenten hervorzuheben, damit man schnell erkennt, welche Komponente mit dem Eintrag im TreeView verbunden ist. Für den TButton hab ich jetzt erstmal .Default mißbraucht (sind ja aktuell nur 2 Buttons), das fällt schonmal ein bissl auf, aber für die CheckBoxen fehlt noch was. Und eigentlich wäre es mit lieber, wenn alles nach dem selben Muster markiert/hervorgehoben würde. |
Re: Wie Farben von Buttons ändern?
Dann tausche doch einfach alle TButton gegen TBitBtn aus. Die sehen genauso aus und fühlen sich genauso an.
Bernhard |
Re: Wie Farben von Buttons ändern?
Zitat:
![]() (oder hier: ![]() ) Warum???
Delphi-Quellcode:
unit ColorButton;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls; type TDrawButtonEvent = procedure(Control: TWinControl; Rect: TRect; State: TOwnerDrawState) of object; TColorButton = class(TButton) private FCanvas: TCanvas; IsFocused: Boolean; FOnDrawButton: TDrawButtonEvent; protected procedure CreateParams(var Params: TCreateParams); override; procedure SetButtonStyle(ADefault: Boolean); override; procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED; procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED; procedure CNMeasureItem(var Message: TWMMeasureItem); message CN_MEASUREITEM; procedure CNDrawItem(var Message: TWMDrawItem); message CN_DRAWITEM; procedure WMLButtonDblClk(var Message: TWMLButtonDblClk); message WM_LBUTTONDBLCLK; procedure DrawButton(Rect: TRect; State: UINT); public constructor Create(AOwner: TComponent); override; destructor Destroy; override; property Canvas: TCanvas read FCanvas; published property OnDrawButton: TDrawButtonEvent read FOnDrawButton write FOnDrawButton; property Color; end; procedure Register; implementation procedure Register; begin RegisterComponents('Samples', [TColorButton]); end; constructor TColorButton.Create(AOwner: TComponent); begin inherited Create(AOwner); FCanvas := TCanvas.Create; end; destructor TColorButton.Destroy; begin inherited Destroy; FCanvas.Free; end; procedure TColorButton.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); with Params do Style := Style or BS_OWNERDRAW; end; procedure TColorButton.SetButtonStyle(ADefault: Boolean); begin if ADefault <> IsFocused then begin IsFocused := ADefault; Refresh; end; end; procedure TColorButton.CNMeasureItem(var Message: TWMMeasureItem); begin with Message.MeasureItemStruct^ do begin itemWidth := Width; itemHeight := Height; end; end; procedure TColorButton.CNDrawItem(var Message: TWMDrawItem); var SaveIndex: Integer; begin with Message.DrawItemStruct^ do begin SaveIndex := SaveDC(hDC); FCanvas.Lock; try FCanvas.Handle := hDC; FCanvas.Font := Font; FCanvas.Brush := Brush; DrawButton(rcItem, itemState); finally FCanvas.Handle := 0; FCanvas.Unlock; RestoreDC(hDC, SaveIndex); end; end; Message.Result := 1; end; procedure TColorButton.CMEnabledChanged(var Message: TMessage); begin inherited; Invalidate; end; procedure TColorButton.CMFontChanged(var Message: TMessage); begin inherited; Invalidate; end; procedure TColorButton.WMLButtonDblClk(var Message: TWMLButtonDblClk); begin Perform(WM_LBUTTONDOWN, Message.Keys, Longint(Message.Pos)); end; procedure TColorButton.DrawButton(Rect: TRect; State: UINT); var Flags, OldMode: Longint; IsDown, IsDefault, IsDisabled: Boolean; OldColor: TColor; OrgRect: TRect; begin OrgRect := Rect; Flags := DFCS_BUTTONPUSH or DFCS_ADJUSTRECT; IsDown := State and ODS_SELECTED <> 0; IsDefault := State and ODS_FOCUS <> 0; IsDisabled := State and ODS_DISABLED <> 0; if IsDown then Flags := Flags or DFCS_PUSHED; if IsDisabled then Flags := Flags or DFCS_INACTIVE; if IsFocused or IsDefault then begin FCanvas.Pen.Color := clWindowFrame; FCanvas.Pen.Width := 1; FCanvas.Brush.Style := bsClear; FCanvas.Rectangle(Rect.Left, Rect.Top, Rect.Right, Rect.Bottom); InflateRect(Rect, - 1, - 1); end; if IsDown then begin FCanvas.Pen.Color := clBtnShadow; FCanvas.Pen.Width := 1; FCanvas.Brush.Color := clBtnFace; FCanvas.Rectangle(Rect.Left, Rect.Top, Rect.Right, Rect.Bottom); InflateRect(Rect, - 1, - 1); end else DrawFrameControl(FCanvas.Handle, Rect, DFC_BUTTON, Flags); if IsDown then OffsetRect(Rect, 1, 1); OldColor := FCanvas.Brush.Color; FCanvas.Brush.Color := Color; FCanvas.FillRect(Rect); FCanvas.Brush.Color := OldColor; OldMode := SetBkMode(FCanvas.Handle, TRANSPARENT); FCanvas.Font.Color := clBtnText; if IsDisabled then DrawState(FCanvas.Handle, FCanvas.Brush.Handle, nil, Integer(Caption), 0, ((Rect.Right - Rect.Left) - FCanvas.TextWidth(Caption)) div 2, ((Rect.Bottom - Rect.Top) - FCanvas.TextHeight(Caption)) div 2, 0, 0, DST_TEXT or DSS_DISABLED) else DrawText(FCanvas.Handle, PChar(Caption), - 1, Rect, DT_SINGLELINE or DT_CENTER or DT_VCENTER); SetBkMode(FCanvas.Handle, OldMode); if Assigned(FOnDrawButton) then FOnDrawButton(Self, Rect, TOwnerDrawState(LongRec(State).Lo)); if IsFocused and IsDefault then begin Rect := OrgRect; InflateRect(Rect, - 4, - 4); FCanvas.Pen.Color := clWindowFrame; FCanvas.Brush.Color := clBtnFace; DrawFocusRect(FCanvas.Handle, Rect); end; end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz