In TListView jede zweite Zeile farbig setzen.

Rund um die LCL und andere Komponenten

In TListView jede zweite Zeile farbig setzen.

Beitragvon Ally » 9. Jul 2019, 10:24 In TListView jede zweite Zeile farbig setzen.

Hallo zusammen,

In einer TListView setze ich jede zweite Zeile, mit folgendem Code, farbig.

Code: Alles auswählen
procedure TfrmMain.lvListeCustomDrawItem(Sender: TCustomListView;
  Item: TListItem; State: TCustomDrawState; var DefaultDraw: boolean);
begin
  // jede zweite Zeile farbig setzen.
  if not Odd(Item.Index) then
    lvListe.Canvas.Brush.Color := $00E3F9FF;
end;


Das funktioniert unter Windows einwandfrei.
Unter Linux Mint wird das Ganze zwar auch ausgeführt, die entsprechenden Zeilen aber nicht farbig gezeichnet. :( :?:

Gruß Roland

PS: Lazarus 2.0.2 - fpc-3.0.4
Ally
 
Beiträge: 126
Registriert: 11. Jun 2009, 09:25

Beitragvon fliegermichl » 9. Jul 2019, 11:37 Re: In TListView jede zweite Zeile farbig setzen.

Ist evtl. die Property OwnerDraw false?
fliegermichl
Lazarusforum e. V.
 
Beiträge: 350
Registriert: 9. Jun 2011, 09:42

Beitragvon six1 » 9. Jul 2019, 12:01 Re: In TListView jede zweite Zeile farbig setzen.

Bei Option OwnerDraw muss aber auch der Text gezeichnet werden...
Gruß, Michael
six1
 
Beiträge: 103
Registriert: 1. Jul 2010, 19:01

Beitragvon BeniBela » 9. Jul 2019, 12:03 Re: In TListView jede zweite Zeile farbig setzen.

Mit meinem TreeListView ginge das, das ist vollständig "ownerdrawn"
BeniBela
 
Beiträge: 263
Registriert: 21. Mär 2009, 18:31
OS, Lazarus, FPC: Linux (Lazarus SVN, FPC 2.4) | 
CPU-Target: 64 Bit
Nach oben

Beitragvon six1 » 9. Jul 2019, 12:06 Re: In TListView jede zweite Zeile farbig setzen.

...ja eben, meinte ich ja.
Bei Ownerdraw muss man dann alles selbst zeichnen:
-Clientrect in Hintergrundfarbe neu zeichnen
-Text ausgeben
Gruß, Michael
six1
 
Beiträge: 103
Registriert: 1. Jul 2010, 19:01

Beitragvon Ally » 9. Jul 2019, 16:07 Re: In TListView jede zweite Zeile farbig setzen.

Hallo fliegermichl, Hallo six1,

ja OwnerDraw ist false.
Wenn ich es auf true setze, passiert das was six1 sagt: es wird nichts mehr gezeichnet, auch nicht der Hintergrund.

Gruß Roland
Ally
 
Beiträge: 126
Registriert: 11. Jun 2009, 09:25

Beitragvon wp_xyz » 9. Jul 2019, 20:56 Re: In TListView jede zweite Zeile farbig setzen.

Leider hat jedes Widgetset sein Eigenleben... Bei Windows wird die Vorbereitung des Canvas, die man in OnCustomDrawitem mit gesetztem Parameter Defaultdraw = true gemacht hat, beibehalten und für die Ausgabe verwendet - ähnlich wie beim Grid im OnPrepareCanvas-Ereignis. Bei gtk2/qt wird das verworfen, hier wird offenbar zwingend DefaultDraw=true vorausgesetzt, und der User darf alles selber zeichnen, nach dem Motto: "Wenn es dir nicht passt, wie wir es wir tun, dann mach es gefälligst selbst (aber dann bitte auch alles)". Auch eine (verständliche) Ansicht.
wp_xyz
 
Beiträge: 2931
Registriert: 8. Apr 2011, 09:01

Beitragvon Ally » 10. Jul 2019, 09:23 Re: In TListView jede zweite Zeile farbig setzen.

Hallo wp_xyz,

ja die Widgetsets verhalten sich recht unterschiedlich.
Ich habe nochmal einige Kombinationen durchprobiert:

Windows: Defaultdraw = true, alles wird gezeichnet, auch jede zweite Zeile farbig.
Windows: Defaultdraw = false, die Liste bleibt leer, nichts wird gezeichnet.
Windows: Ownerdraw = false, alles wird gezeichnet, auch jede zweite Zeile farbig.
Windows: Ownerdraw = true, die Liste bleibt leer, nichts wird gezeichnet.

Linux: Defaultdraw = true, alles wird gezeichnet, aber jede zweite Zeile farbig zu setzen funktioniert nicht.
Linux: Defaultdraw = false, alles wird gezeichnet, aber jede zweite Zeile farbig zu setzen funktioniert nicht.
Linux: Ownerdraw = false, alles wird gezeichnet, aber jede zweite Zeile farbig zu setzen funktioniert nicht.
Linux: Ownerdraw = true, der Text wird nicht gezeichnet, die aktive Zeile aber farblich hinterlegt, jede zweite Zeile farbig zu setzen funktioniert auch hier nicht.

Das heißt dann wohl, wenn ich das Ganze unter Linux realisieren möchte, muss ich alles selbst zeichnen.

Danke für eure Tipps, Gruß Roland
Ally
 
Beiträge: 126
Registriert: 11. Jun 2009, 09:25

Beitragvon fliegermichl » 10. Jul 2019, 12:19 Re: In TListView jede zweite Zeile farbig setzen.

Unter anderem das war ein Grund, daß ich es mit MSEGUI probiert hatte. Da sieht das Programm auf jedem System exakt gleich aus und verhält sich auch gleich. Durch die fehlende Dokumentation und den Tod von Martin bin ich aber auch wieder zu Lazarus zurück.
fliegermichl
Lazarusforum e. V.
 
Beiträge: 350
Registriert: 9. Jun 2011, 09:42

Beitragvon mschnell » 10. Jul 2019, 14:27 Re: In TListView jede zweite Zeile farbig setzen.

fliegermichl hat geschrieben: Da sieht das Programm auf jedem System exakt gleich aus und verhält sich auch gleich.

Genau das sollten bei Lazarus die Widget Types "CustomDrawn" und "FPGUI" machen.
-Michael
mschnell
 
Beiträge: 3355
Registriert: 11. Sep 2006, 10:24
Wohnort: Krefeld
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ) | 
CPU-Target: X32 / X64 / ARMv5
Nach oben

Beitragvon wp_xyz » 11. Jul 2019, 00:07 Re: In TListView jede zweite Zeile farbig setzen.

fliegermichl hat geschrieben:Da sieht das Programm auf jedem System exakt gleich aus und verhält sich auch gleich.

Klar, da hat man mühsam ein Programm geschrieben, und die Eigenwilligkeiten der Betriebssystem-Themes machen das schönste Layout zunichte!

Der Wunsch, das Programm überall gleich aussehen zu lassen, ist in Ordnung für ein Programm, das nur man selbst verwendet. Aber allgemein vom Standpunkt des Benutzers aus empfinde ich das als Bevormundung. Woher weiß der Programmierer, dass ich seine Vorliebe für rote Schrift auf grünem Untergrund teile? Weniger sarkastisch: Ich hatte einen Virenscanner, bei dem sich die Benutzeroberfläche in der heute üblich großen Schrift präsentiert hat - so schlecht sehe ich doch noch nicht, und noch dazu ließ sich das Fenster in der Größe nicht verändern, so dass längere Texte ständig mit '...' abgekürzt werden mussten.

Wenn der Benutzer nicht mit dem Aussehen der Programme zufrieden ist, kann er heutzutage zwischen einer Vielzahl von Themes auswählen - gerade unter Linux kann man sich da in der Einstellungsvielfalt verlieren. Das betrifft dann aber alle Programme (die sich daran halten), und das eigene Programm reiht sich vom Aussehen her nahtlos in die Reihe der anderen Programme ein. So wie es der User wünscht und vielleicht selbst konfiguriert hat. Lazarus folgt diesem Ansatz, indem es durch die Widgetsets das Betriebssystem die Detailarbeit machen lässt, so dass sich die Lazarus-Programme in ihre Umgebung integrieren. Als Folge sehen sie natürlich je nach Betriebssystem unterschiedlich aus.

Wie von mschnell schon erwähnt, gibt es das CustomDrawn bzw.fpgui Widgetset, mit denen man plattformunabhängig dasselbe Aussehen erreichen kann. Leider werden diese z.Zt von niemandem weiterentwickelt.
wp_xyz
 
Beiträge: 2931
Registriert: 8. Apr 2011, 09:01

Beitragvon relocate » 11. Jul 2019, 09:05 Re: In TListView jede zweite Zeile farbig setzen.

wp_xyz hat geschrieben:
fliegermichl hat geschrieben:Da sieht das Programm auf jedem System exakt gleich aus und verhält sich auch gleich.

Klar, da hat man mühsam ein Programm geschrieben, und die Eigenwilligkeiten der Betriebssystem-Themes machen das schönste Layout zunichte!

Der Wunsch, das Programm überall gleich aussehen zu lassen, ist in Ordnung für ein Programm, das nur man selbst verwendet. Aber allgemein vom Standpunkt des Benutzers aus empfinde ich das als Bevormundung. Woher weiß der Programmierer, dass ich seine Vorliebe für rote Schrift auf grünem Untergrund teile? Weniger sarkastisch: Ich hatte einen Virenscanner, bei dem sich die Benutzeroberfläche in der heute üblich großen Schrift präsentiert hat - so schlecht sehe ich doch noch nicht, und noch dazu ließ sich das Fenster in der Größe nicht verändern, so dass längere Texte ständig mit '...' abgekürzt werden mussten.


Da muss man ein wenig differenzieren. Wenn ein Button gezeichnet wird, dann würde ich sagen, ja, der soll erst einmal entsprechend des Systems aussehen (und wenn nicht, mach' es selbst). Was hier aber erreicht werden soll ist das einfärben von Zeilen in Tabellen, was allgemein gemacht wird, damit man die Werte einer Zeile in der Tabelle besser überblicken kann. Da sollte ein gleichartiges Verhalten vorausgesetzt werden können. In gewisserweise könnte man auch den Programmanwender das einstellen lassen, aber dann hätte der Programmierer dasselbe Problem, unter Windows geht es unter Linux nicht.

wp_xyz hat geschrieben:Wenn der Benutzer nicht mit dem Aussehen der Programme zufrieden ist, kann er heutzutage zwischen einer Vielzahl von Themes auswählen - gerade unter Linux kann man sich da in der Einstellungsvielfalt verlieren. Das betrifft dann aber alle Programme (die sich daran halten), und das eigene Programm reiht sich vom Aussehen her nahtlos in die Reihe der anderen Programme ein. So wie es der User wünscht und vielleicht selbst konfiguriert hat. Lazarus folgt diesem Ansatz, indem es durch die Widgetsets das Betriebssystem die Detailarbeit machen lässt, so dass sich die Lazarus-Programme in ihre Umgebung integrieren. Als Folge sehen sie natürlich je nach Betriebssystem unterschiedlich aus.


Wie gesagt, für das allgemeine Erscheinungsbild ist das auch gut so.

wp_xyz hat geschrieben:Wie von mschnell schon erwähnt, gibt es das CustomDrawn bzw.fpgui Widgetset, mit denen man plattformunabhängig dasselbe Aussehen erreichen kann. Leider werden diese z.Zt von niemandem weiterentwickelt.


Das ist bei FPGui nicht ganz richtig (bislang) der letzte Commit war am 6. Juli 2019, aber intensiv wird dort glaube ich wirklich nicht gearbeitet. Die letzte Stable Version ist in der Tat schon länger her. Da ich auf FPGui setzen möchte (nicht damit alles überall gleich aussieht, sondern weil mir Lazarus zu überfrachtet ist) wäre es schön, wenn sich da mehr täte. Wenn ich mehr Zeit und auch Wissen darüber hätte, würde ich mich schon beteiligen.
relocate
 
Beiträge: 47
Registriert: 24. Jan 2012, 12:47
OS, Lazarus, FPC: Win (L- FPC 2.4.4) | 
CPU-Target: 32Bit
Nach oben

• Themenende •

Zurück zu Komponenten und Packages



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste

porpoises-institution
accuracy-worried