AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Listbox-Scrollbalken einfärben?

Ein Thema von mlspider · begonnen am 30. Dez 2006 · letzter Beitrag vom 30. Dez 2006
Antwort Antwort
mlspider

Registriert seit: 22. Okt 2003
Ort: Berlin
661 Beiträge
 
Delphi 7 Enterprise
 
#1

Listbox-Scrollbalken einfärben?

  Alt 30. Dez 2006, 10:38
Irgendwie passt das Erscheinungsbild der Standardlistbox nicht zu meinem Design. Daher färbte ich kurzer Hand das Teil wie folgt ein:

Delphi-Quellcode:
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;
Alles gut und schön, nur wie bekomme ich den hässlichen Balken mit Arrow etc. eingefärbt?
Mario
Handbücher haben einen hohen Heizwert!!!

http://geprellte-ebay-kaeufer.de
  Mit Zitat antworten Zitat
Pfoto

Registriert seit: 26. Aug 2005
Ort: Daun
541 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Listbox-Scrollbalken einfärben?

  Alt 30. Dez 2006, 11:39
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
Jürgen Höfs
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#3

Re: Listbox-Scrollbalken einfärben?

  Alt 30. Dez 2006, 11:42
Ü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:
Miniaturansicht angehängter Grafiken
listbox_beispiel_181.png   dp2_764.png  
  Mit Zitat antworten Zitat
mlspider

Registriert seit: 22. Okt 2003
Ort: Berlin
661 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Listbox-Scrollbalken einfärben?

  Alt 30. Dez 2006, 11:50
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.
Mario
Handbücher haben einen hohen Heizwert!!!

http://geprellte-ebay-kaeufer.de
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#5

Re: Listbox-Scrollbalken einfärben?

  Alt 30. Dez 2006, 12:00
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 XiControls)
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;
  Mit Zitat antworten Zitat
mlspider

Registriert seit: 22. Okt 2003
Ort: Berlin
661 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Listbox-Scrollbalken einfärben?

  Alt 30. Dez 2006, 12:13
Ich habe mal zur Veranschaulichung ein Screen gemacht. Diee Scrollbar sieht grotten schlecht aus.
Miniaturansicht angehängter Grafiken
listbox_195.gif  
Mario
Handbücher haben einen hohen Heizwert!!!

http://geprellte-ebay-kaeufer.de
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#7

Re: Listbox-Scrollbalken einfärben?

  Alt 30. Dez 2006, 12:22
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;
  Mit Zitat antworten Zitat
mlspider

Registriert seit: 22. Okt 2003
Ort: Berlin
661 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Listbox-Scrollbalken einfärben?

  Alt 30. Dez 2006, 12:26
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.
Mario
Handbücher haben einen hohen Heizwert!!!

http://geprellte-ebay-kaeufer.de
  Mit Zitat antworten Zitat
mlspider

Registriert seit: 22. Okt 2003
Ort: Berlin
661 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Listbox-Scrollbalken einfärben?

  Alt 30. Dez 2006, 14:19
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.
Mario
Handbücher haben einen hohen Heizwert!!!

http://geprellte-ebay-kaeufer.de
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz