![]() |
Listbox-Scrollbalken einfärben?
Irgendwie passt das Erscheinungsbild der Standardlistbox nicht zu meinem Design. Daher färbte ich kurzer Hand das Teil wie folgt ein:
Delphi-Quellcode:
Alles gut und schön, nur wie bekomme ich den hässlichen Balken mit Arrow etc. eingefärbt?
procedure TTracklist.ListBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState); begin with (Control as TListbox) do begin Canvas.Font.Color := clWhite; //Schriftfarbe if (odSelected in State) then //Focus begin Canvas.Brush.Color := clRed; end; Canvas.FillRect(rect); DrawText(Canvas.Handle, Pchar(Items[Index]), Length(Items[Index]), Rect, DT_SINGLELINE or DT_VCENTER); end; end; |
Re: Listbox-Scrollbalken einfärben?
Hallo,
leider habe ich für dein Problem keinen Code zur Hand, jedoch einen Tipp / Hinweis: Ich benutze Skinkomponenten (von AlmDev) Da gibt es welche, die die Standard-Komponenten überzeichnen, also auch die Scrollbars. Zunächst dachte ich, dass wäre eine ziemlich simple Sache, der Quellecode hat jedoch über 7000 Zeilen Code! Und er sieht -- zumindest für mich -- gar nicht simple aus... Vielleicht lohnt es sich für dich ja, auf so was umzusteigen, wenn du in Zukunft noch mehr Standard-Komponenten überzeichnen willst. Gruß Pfoto |
Re: Listbox-Scrollbalken einfärben?
Liste der Anhänge anzeigen (Anzahl: 2)
Überzeichnen wird sehr schwer. Du kannst allerdings versuchen die Scrollbars auszublenden (kurz im Forum suchen) und diese durch eine selbstgezeichnete ersetzen.
*** EDIT *** Bei meinem Player habe ich die Listbox zu verkleinert (Breite) und rechts daneben eine skinbare TrackBar gesetzt. Der Border besteht aus Shapes. Das könnte man gut in eine Klasse setzen und diese dann zur Laufzeit erstellen (Create). Hier zwei Beispiele: |
Re: Listbox-Scrollbalken einfärben?
Die oben genannten Skinkompos sind mir bekannt. Leider besitzt die spSkinListbox kein DrawItem Ereignis. Zumal diese Kompos meines Wissens sehr teuer sind und äußerst unflexibel in der Handhabung.
@Nils. Dein Beispiel macht was her. Allerdings habe ich keine Ahnung, wie die Listbox daran gebunden wird. |
Re: Listbox-Scrollbalken einfärben?
Es gibt auf dem Skingebiet leider nur sehr wenige Komponenten, also kann ich dir für so etwas nur die oben genannte Möglichkeit und empfehlen (naja vlt. das falsche Wort, aber wenn man es machen will) mit BitBlt alles zusammenzusetzen. Es ist halt auch die Frage, was du genau machen möchtest.
Mach erstmal folgendes: 1. ListBox setzen 2. Daneben eine Scrollbar (empfehlenswert sind die ![]() 3. Wenn alles von der Größe her stimmt, setzt du nun Shapes drumrum und verbindest diese mit Anchors (einfach rumprobieren) 4. Das war es eigentlich schon, aber es gibt noch diese Variante (mach aber bitte erst diese Methode, damit du soweit alles begriffen hast). 1. Eine Klasse schreiben, die eine TListBox, TTrackBar (oder auch eine andere TrackBar) enthält. 2. Einen constructor Create(AOwner : TComponent) in diese Klasse schreiben. 3. Dort am besten die Positionen und Größen festlegen (du kannst natürlich auch Parameter hinter AOwner... setzen, um es komfortabel zu machen, solltest du sowieso). Show in die letzte Zeile des Constructors schreiben 4. Wenn die Klasse TSkinListBox heißt, musst du dann nur noch das schreiben (an der Stelle, an welcher es erstellt werden soll):
Delphi-Quellcode:
var SkinListBox : TSkinListBox;
begin SkinListBox := TSkinListBox.Create(Self); // Evtl. noch weitere Parameter end; |
Re: Listbox-Scrollbalken einfärben?
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe mal zur Veranschaulichung ein Screen gemacht. Diee Scrollbar sieht grotten schlecht aus.
|
Re: Listbox-Scrollbalken einfärben?
Hm...
Du könntest es ja mit einer eigenen Klasse versuchen. Ich kenn mich da aber leider nicht mehr weiter aus, weil man hier wahrscheinlich nivht class(TScrollBar) benutzen sollte. Da werden die andere Programmierer aus diesem Forum wahrscheinlcih besser helfen können. Ich kann nur diesen Kleinkram sagen: Einbauen: OnClick, OnMouseDown, OnMouseUp (nicht der Scrollbutton) und OnThumbClick, OnThumbMouseDown, OnThumbMouseUp für den Scrollbutton. Dann kommt man der Sache schon etwas näher. Das Design sieht aber schonmal ganz gut aus! Sry, dass es jetzt so lang wird, aber ich will es auch nicht kürzen. Ein Ausschnitt aus der XiScrollBar, hoffentlich hilft dir das weiter:
Delphi-Quellcode:
TXiTrackBar = class(TCustomControl)
private FBackColor: TColor; FTickColor: TColor; FDisabledTickColor: TColor; FSlideBorderColor: TColor; FSlideFaceColor: TColor; FSlideGradColor: TColor; FDisabledSlideBorderColor: TColor; FDisabledSlideFaceColor: TColor; FDisabledSlideGradColor: TColor; FThumbBorderColor: TColor; FThumbFaceColor: TColor; FThumbGradColor: TColor; FOverThumbBorderColor: TColor; FOverThumbFaceColor: TColor; FOverThumbGradColor: TColor; FDownThumbBorderColor: TColor; FDownThumbFaceColor: TColor; FDownThumbGradColor: TColor; FDisabledThumbBorderColor: TColor; FDisabledThumbFaceColor: TColor; FDisabledThumbGradColor: TColor; FColorScheme: TColorScheme; FPosition: Integer; FMin: Integer; FMax: Integer; FFrequency: Integer; FOrientation: TTrackBarOrientation; FTickMarks: TTickMark; FTickStyle: TTickStyle; FSmoothCorners: Boolean; FOnChange: TNotifyEvent; FThumbState: TBtnState; FSlideRect: TRect; FThumbRect: TRect; FAbsLength: Integer; FAbsPos: Integer; FThumbWidth: Integer; FThumbLength: Integer; procedure SetColors(Index: Integer; Value: TColor); procedure SetPosition(Value: Integer); procedure SetMin(Value: Integer); procedure SetMax(Value: Integer); procedure SetFrequency(Value: Integer); // procedure SetThumbLength(Value: Integer); // - // procedure SetThumbWidth(Value: Integer); // - procedure SetTickStyle(Value: TTickStyle); procedure SetTickMarks(Value: TTickMark); procedure SetOrientation(Value: TTrackBarOrientation); procedure SetSmoothCorners(Value: Boolean); procedure SetColorScheme(Value: TColorScheme); function PointInRect(X, Y: Integer; R: TRect): Boolean; protected procedure Paint; override; procedure MouseEnter(var msg: TMessage); message CM_MOUSEENTER; procedure MouseLeave(var msg: TMessage); message CM_MOUSELEAVE; procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure MouseMove (Shift: TShiftState; X, Y: Integer); override; procedure Resize; override; procedure CMEnabledChanged (var msg: TMessage); message CM_ENABLEDCHANGED; public constructor Create(AOwner: TComponent); override; // + destructor Destroy; override; // + procedure GradientFillRect(Canvas: TCanvas; Rect: TRect; StartColor, EndColor: TColor; Direction: TFillDirection); function GetColorScheme: TStringList; published property BackColor: TColor index 0 read FBackColor write SetColors; property TickColor: TColor index 1 read FTickColor write SetColors; property DisabledTickColor: TColor index 2 read FDisabledTickColor write SetColors; property SlideBorderColor: TColor index 10 read FSlideBorderColor write SetColors; property SlideFaceColor: TColor index 11 read FSlideFaceColor write SetColors; property SlideGradColor: TColor index 12 read FSlideGradColor write SetColors; property DisabledSlideBorderColor: TColor index 13 read FDisabledSlideBorderColor write SetColors; property DisabledSlideFaceColor: TColor index 14 read FDisabledSlideFaceColor write SetColors; property DisabledSlideGradColor: TColor index 15 read FDisabledSlideGradColor write SetColors; property DisabledThumbBorderColor: TColor index 16 read FDisabledThumbBorderColor write SetColors; property DisabledThumbFaceColor: TColor index 17 read FDisabledThumbFaceColor write SetColors; property DisabledThumbGradColor: TColor index 18 read FDisabledThumbGradColor write SetColors; property ThumbBorderColor: TColor index 20 read FThumbBorderColor write SetColors; property ThumbFaceColor: TColor index 21 read FThumbFaceColor write SetColors; property ThumbGradColor: TColor index 22 read FThumbGradColor write SetColors; property OverThumbBorderColor: TColor index 30 read FOverThumbBorderColor write SetColors; property OverThumbFaceColor: TColor index 31 read FOverThumbFaceColor write SetColors; property OverThumbGradColor: TColor index 32 read FOverThumbGradColor write SetColors; property DownThumbBorderColor: TColor index 40 read FDownThumbBorderColor write SetColors; property DownThumbFaceColor: TColor index 41 read FDownThumbFaceColor write SetColors; property DownThumbGradColor: TColor index 42 read FDownThumbGradColor write SetColors; property SmoothCorners: Boolean read FSmoothCorners write SeTSmoothCorners; property ColorScheme: TColorScheme read FColorScheme write SetColorScheme; property Position: Integer read FPosition write SetPosition; property Min: Integer read FMin write SetMin; property Max: Integer read FMax write SetMax; property Frequency: Integer read FFrequency write SetFrequency; property TickStyle: TTickStyle read FTickStyle write SetTickStyle; property TickMarks: TTickMark read FTickMarks write SetTickMarks; property Orientation: TTrackBarOrientation read FOrientation write SetOrientation; // Eigenschaften: property Align; property Anchors; property BorderWidth; property Constraints; property Ctl3D; property Cursor; property DragCursor; property DragKind; property DragMode; property Enabled; property HelpContext; // property HelpKeyword; // property HelpType; property Hint; property ParentShowHint; property PopupMenu; property ShowHint; // property TabOrder; // property TabStop; property Tag; property Visible; // Ereignisse: property OnChange: TNotifyEvent read FOnChange write FOnChange; property OnClick; property OnDblClick; property OnMouseUp; property OnMouseDown; property OnMouseMove; // property OnMouseEnter; // property OnMouseLeave; end; |
Re: Listbox-Scrollbalken einfärben?
OK, danke erst mal. Ich werde jetzt mal meine schlaue Fibel nach Rat fragen. Vielleicht komme ich von selbst auf das Rätsels Lösung.
Edit: @nils, das hilt doch schon ungemein. Danke. |
Re: Listbox-Scrollbalken einfärben?
So, habe das Screen am geplanten Desktop angepasst.(Siehe Screen-Link oben) Hier sieht man nun wirklich, wie unschön Standard-Kompos sein können.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:53 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