AGB  ·  Datenschutz  ·  Impressum  







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

TColorListBox mit eigenen Farben aufwerten

Ein Thema von martinf16 · begonnen am 19. Okt 2008 · letzter Beitrag vom 2. Nov 2008
Antwort Antwort
martinf16

Registriert seit: 26. Aug 2007
99 Beiträge
 
Turbo Delphi für Win32
 
#1

TColorListBox mit eigenen Farben aufwerten

  Alt 19. Okt 2008, 23:03
Hallo!

Ich möchte gerne eigene Farben zur TColorListBox hinzufügen - habs bisher aber weder mit Google noch mit Ausprobieren hinbekommen. Mit items.add lässt sich zum Beispiel zwar ein beliebiger Text hinzufügen, die Farbe bleibt aber immer die gleiche. Desweiteren gibt es Eigenschaften wie colors und colornames, aber diese stehen auf onlyread und lassen sich auch nicht beeinflussen.

Weiß von euch jemand was man da machen kann oder ob es eine elegantere Lösung gibt? Im Programm soll der Benutzer eine Farbpalette zur Verfügung gestellt bekommen, die er selber bestücken und löschen kann.

Vielen Dank!
  Mit Zitat antworten Zitat
Benutzerbild von roga
roga

Registriert seit: 15. Jun 2008
Ort: Sachsen-Anhalt
109 Beiträge
 
Delphi XE8 Professional
 
#2

Re: TColorListBox mit eigenen Farben aufwerten

  Alt 19. Okt 2008, 23:54
Hallo,

nimm doch einfach eine Combobox und stelle Style auf csOwnerDrawVariable.
Dann Farben hinzufügen...
Delphi-Quellcode:
  Items.Add('clBlack');
  Items.Add('clMaroon');
  Items.Add('clGreen');
  ...
... und über DrawItem
  Canvas.Brush.Color := StringToColor(ComboBox.Items[Index]); Gruß RoGa
Ronald
  Mit Zitat antworten Zitat
martinf16

Registriert seit: 26. Aug 2007
99 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: TColorListBox mit eigenen Farben aufwerten

  Alt 27. Okt 2008, 23:33
Ich habs inzwischen mit einer Listview hinbekommen, das ist der Code:

Delphi-Quellcode:

procedure Tprog.tabelleCustomDrawItem(Sender: TCustomListView; Item: TListItem;
  State: TCustomDrawState; var DefaultDraw: Boolean);
var
  r, r2: trect;
  breite: integer;
begin
  breite:=sender.Column[0].Width; //Breite der ersten Spalte
  r:=item.DisplayRect(drbounds); //Rect der Zelle der ersten Spalte
  sender.canvas.Brush.Color:=farbliste[item.Index]; //farbliste ist ein Array mit den Farbwerten
  sender.Canvas.fillrect(r); //Rechteck wird in erste Zelle gezeichnet
  sender.Canvas.Brush.Color:=clwindow; //Farbe wird wieder zurückgestellt
end;
Allerdings funktioniert es noch nicht ganz so, wie ich es mir vorstelle. Die Farbe erscheint erst wenn man mit der Maus längere Zeit darüberfährt, offenbar wird das Rechteck teilweise wieder übermalt - es ist nur noch an einer Ecke sichtbar. Habt ihr ne Idee???

Danke schonmal!
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#4

Re: TColorListBox mit eigenen Farben aufwerten

  Alt 27. Okt 2008, 23:48
Hallo,

so sollte es auch mit der TColorListBox gehen:

Delphi-Quellcode:
// vorne einfügen
ColorListBox.Items.InsertObject(0, 'Meine Farbe', TObject(clRed));

// hinten anhängen
ColorListBox.Items.AddObject('Meine Farbe', TObject(clBlue));
Gruß Hawkeye
  Mit Zitat antworten Zitat
martinf16

Registriert seit: 26. Aug 2007
99 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: TColorListBox mit eigenen Farben aufwerten

  Alt 28. Okt 2008, 22:50
Vielen Dank. So klappts wunderbar.
  Mit Zitat antworten Zitat
martinf16

Registriert seit: 26. Aug 2007
99 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: TColorListBox mit eigenen Farben aufwerten

  Alt 1. Nov 2008, 14:10
Eine kleine Frage hätte ich doch noch: Wie kann man die Farben wieder aus der Liste löschen oder innerhalb der Liste verschieben?!

Zwar kann man Items ganz normal mit delete und dem enstprechenden Index löschen, es existiert aber kein Zugriff auf das selektierte Item, wie es bei normalen Listboxen der Fall ist. Ich möchte also dass der Benutzer des Programms ein Item anklickt und dieses dann mit ENTF oder einem Popup-Fenster löschen kann.

Außerdem wäre es gut wenn die Items vom User verschoben werden können.

Vielen Dank!
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#7

Re: TColorListBox mit eigenen Farben aufwerten

  Alt 1. Nov 2008, 15:24
Hallo,
Zitat von martinf16:
[...]es existiert aber kein Zugriff auf das selektierte Item, wie es bei normalen Listboxen der Fall ist.
Der Zugriff erfolgt über die Eigenschaft ItemIndex - wie bei einer normalen ListBox.

Das Verschieben per Drag&Drop erfordert ein Setzen der Eigenschaft DragMode, und die ist bei der ColorListBox leider nicht öffentlich. Du musst dir also über einen kleinen Trick Zugriff auf diese Eigenschaft verschaffen:

Delphi-Quellcode:
type
  TColorListBoxCracker = class (TColorListBox);

procedure TDemoForm.FormCreate(Sender: TObject);
begin
  TColorListBoxCracker(ColorListBox).DragMode := dmAutomatic;
end;

procedure TDemoForm.ColorListBoxDragDrop(Sender, Source: TObject; X, Y: Integer);
var
  TargetIndex : Integer;
begin
  with (Sender as TColorListBox) do
    begin
      TargetIndex := ItemAtPos(Point(X, Y), False);

      if (TargetIndex >= Items.Count) then
        TargetIndex := Pred(Items.Count);

      Items.Move(ItemIndex, TargetIndex);
    end;
end;

procedure TDemoForm.ColorListBoxDragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Accept := ((Sender is TColorListBox) and (Source = Sender));
end;
Gruß Hawkeye
  Mit Zitat antworten Zitat
martinf16

Registriert seit: 26. Aug 2007
99 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: TColorListBox mit eigenen Farben aufwerten

  Alt 2. Nov 2008, 12:13
Super! Funktioniert perfekt! Danke!
  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 14:47 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