AGB  ·  Datenschutz  ·  Impressum  







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

Listbox mit Farbflächendarstellung

Ein Thema von to-wer · begonnen am 28. Dez 2017 · letzter Beitrag vom 29. Dez 2017
Antwort Antwort
Delphi.Narium

Registriert seit: 27. Nov 2017
2.594 Beiträge
 
Delphi 7 Professional
 
#1

AW: Listbox mit Farbflächendarstellung

  Alt 28. Dez 2017, 12:46
Nutze die Jedis seit Jahr und Tag und das mit einer so großen Selbstverständlichkeit, dass es mit nichtmal mehr auffällt.

Probleme: Keine mir bekannten.

Vielleicht liegts ja dadran, das mein Delphi 7 total veraltet ist, ich die Jedis aber eigentlich immer recht aktuell halte.
  Mit Zitat antworten Zitat
to-wer

Registriert seit: 25. Mär 2007
29 Beiträge
 
#2

AW: Listbox mit Farbflächendarstellung

  Alt 28. Dez 2017, 14:45
Hallo Aviator,
ich denke, dass ich es tatsächlich mit der Combobox machen möchte.
Nach einigen Versuchen hatte ich die Jedi Komponenten zwar installiert bekommen, kann aufgrund fehlender Erfahrung damit aber nicht so viel anfangen.

Meine OnDraw Komponenten sieht jetzt so aus, wobei ich z.B. noch die Schriftfarbe abhängig von der Hintergrundfarbe einstellen werde.
Eine Kleinigkeit funktioniert aber noch nicht... die Farbwerte für die Farbnamen habe ich in einem anderen Array "Polyneon". Dort möchte ich parallel den gleichen Wert abfragen wie gerade das Item in der Combobox bearbeitet wird. Das funktioniert aber nicht (Programmfehler). Ist Combobox1.ItemIndex nicht der richtige Zeiger auf die aktuelle Zeile?

Code:
procedure TForm2.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  with (Control as TComboBox).Canvas do begin // in ListBox zeichnen
    Brush.Color := StringToColor(Polyneon[ComboBox1.ItemIndex]);
    Brush.Style := bsSolid;
    FillRect(Rect);
    Brush.Style := bsClear;
    TextOut(Rect.Left, Rect.Top, (Control as TComboBox).Items[Index]); // Text schreiben
  end;
end;
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.594 Beiträge
 
Delphi 7 Professional
 
#3

AW: Listbox mit Farbflächendarstellung

  Alt 28. Dez 2017, 15:13
ItemIndex ist das gerade ausgewählte Element in Items. Ist nichts ausgewählt, ist ItemIndex -1 und damit ungültig.

Beim TextOut nutzt Du Index, warum nicht auch beim Zugriff auf das Array Polyneon? Beginnt das Array bei 0? Dann sollte das gehen, ansonsten zeig' und bitte mal die Definition von Polyneon.
  Mit Zitat antworten Zitat
to-wer

Registriert seit: 25. Mär 2007
29 Beiträge
 
#4

AW: Listbox mit Farbflächendarstellung

  Alt 28. Dez 2017, 15:37
genau das war es. Habe im Objektinspektor ItemIndex auf 0 gesetzt und es stürzt nicht mehr ab.
Nur sind alle Einträge in der gleichen Hintergrundfarbe geschrieben.
Ist auch logisch, da er auf 0 steht und die Farbe von Polyneon[0] verwendet.
Wie bringe ich es dazu, den Index parallel zu ondraw hochzuzählen?

Hatte es zwischenzeitlich schon mit Combobox1.OnDrawItem versucht. Da kommt die Meldung "nicht genügend wirkliche Parameter".
Notfalls packe ich die Farbnamen und die Farben selbst zusammen in die Combobox und ziehe mir mit Left und Right$ die entsprechenden Parameter heraus. Das wäre aber der letzte Plan, wenn alles andere nichts wird.
  Mit Zitat antworten Zitat
to-wer

Registriert seit: 25. Mär 2007
29 Beiträge
 
#5

AW: Listbox mit Farbflächendarstellung

  Alt 28. Dez 2017, 15:49
ich korrigiere mich...
Die Zeilen werden schon unterschiedlich eingefärbt. Aber erst, wenn man mit dem Mauszeiger darüber fährt.
Es soll aber so sein, dass die Liste gleich richtig farbig gezeichnet wird.
Würde das gehen?
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.594 Beiträge
 
Delphi 7 Professional
 
#6

AW: Listbox mit Farbflächendarstellung

  Alt 28. Dez 2017, 16:05
Warum nicht 'ne TJvColorCombobox auf's Formular pappen?

Und dann sinngemäß:
Delphi-Quellcode:
// Im FormCreate
Var
  i : Integer;
begin
  JvColorComboBox1.Clear;
  for i := Low(Polyneon) to High(Polyneon) do begin
    JvColorComboBox1.AddColor(StringToColor(Polyneon[i]),Polyneon[i]));
  end;
end;
Wie ist denn Polyneon definiert?
Delphi-Quellcode:
type
// Dann muss man nicht irgendwie zwei Listen nebeneinander pflegen
// und versuchen, die synchron zu halten.
  tColorRec = record
    Color : TColor;
    Name : String;
  end;

var
  Polyneon array [0..AnzahlFarben] of tColorRec;

// Im FormCreate o. ä. sinnvoller Stelle
Var
  i : Integer;
begin
  JvColorComboBox1.Clear;
  for i := Low(Polyneon) to High(Polyneon) do begin
    JvColorComboBox1.AddColor(Polyneon[i].Color,Polyneon[i].Name);
  end;
end;
  Mit Zitat antworten Zitat
to-wer

Registriert seit: 25. Mär 2007
29 Beiträge
 
#7

AW: Listbox mit Farbflächendarstellung

  Alt 28. Dez 2017, 16:11
Wo find ich denn diese Komponente in Delphi, wenn ich alles installiert habe?
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.594 Beiträge
 
Delphi 7 Professional
 
#8

AW: Listbox mit Farbflächendarstellung

  Alt 28. Dez 2017, 16:23
In meinem Delphi 7 in der Palette auf dem Reiter Jv Lists, Combos, Trees, das 9. Symbol von rechts.

Oder Menü:

-> Ansicht
--> Komponentenliste
---> TJvColorComboBox
eingeben.
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Listbox mit Farbflächendarstellung

  Alt 28. Dez 2017, 18:21
Wo find ich denn diese Komponente in Delphi, wenn ich alles installiert habe?
Die Komponente die Delphi.Narium meint ist von den Jedis.

Ich habe dein Problem aber noch nicht so ganz verstanden. Was genau funktioniert jetzt nicht? Dein SourceCode auf Seite 1 sieht soweit richtig aus bis evtl. auf die Textfarbe. Das With stört mich zwar etwas, aber das musst du wissen ob du das verwenden willst.

Beherzige den Tipp von MyRealName. Dann kannst du den Text wenigstens richtig lesen.
Du könntest die Komplementärfarbe nutzen, um die Schrift innerhalb eines farbgefüllten Bereiches immer lesbar zu haben.
Die Farbe kannst du mit clBlack xor $DeineFarbe bilden (wenn ich das noch richtig im Kopf habe).
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
698 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Listbox mit Farbflächendarstellung

  Alt 28. Dez 2017, 17:20
Du könntest die Komplementärfarbe nutzen, um die Schrift innerhalb eines farbgefüllten Bereiches immer lesbar zu haben.
  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 12:06 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