Eigene Listbox ?

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Nils
Beiträge: 130
Registriert: Mo 28. Mai 2007, 12:36
Kontaktdaten:

Eigene Listbox ?

Beitrag von Nils »

Hi,

ich arbeite seit längerem an einer eigenen ListBox. Da man aber die Schriftart selbst wählen soll, kann der Benutzer die Höhe der Einträge auf verscheidene Weisen beeinflussen. Daher müsste ich die ganzen Möglichkeiten mit einbeziehen. Das ist natürlich sehr zeitaufwändig und mein Projekt ist es nicht an einer ListBox zu arbeiten. Daher dachte ich daran, mir eine eigene Klasse, abgeleitet von der LCL-ListBox zu erstellen. Sozusagen:

Code: Alles auswählen

type
  TMeineListBox = class(TListBox)
    procedure Paint; override;
  end;
 
procedure TMeineListBox.Paint;
begin
  inherited;
end;
Dann könnte man das Paint sozusagen manipulieren. Nun aber ganz wichtig: Ist das sinnvoll ? Wie würdet ihr eine skinbare ListBox programmieren ?

Ich muss außerdem noch eien ScrollBar programmieren. Aber die genaue Frage stelle ich erst wenn die ListBox soweit fertig ist, sonst geht das drunter und drüber hier.

Edit: Titel geändert, da Fragestellung vorher anders geplant.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Dein Vorhaben geht nicht auf, da die LCL Listbox auf nativen GUI Controls beruht und nicht irgendwie selbst gemalt ist. Da gibts kein Zeichenereignis das du beeinflussen könntest.
Wenn du also unbedingt eine klickie Buntie istbox willst musst du da selbst durch.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Nils
Beiträge: 130
Registriert: Mo 28. Mai 2007, 12:36
Kontaktdaten:

Beitrag von Nils »

Daran habe ich nicht gedacht. Und wie könnte man das mit der Schriftart lösen ? Bin kein Schriftartenexperte und weiß daher nicht, wie man da meine Listbox austricksen könnte. Denn die Listbox an sich steht schon und funktioniert auch, aber sie basiert momentan auf einer einzigen Schriftart. Den Skineditor programmiere ich selbst, bietet mir das in dieser Hinsicht irgendwelche Vorteile ?
Meine Musik: spiker-music.net

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Hä ?? Die ListBox hat wie fast jedes Control eine Font Eigenschaft über die du die Schriftart auswählen kannst. Oder worauf willst du jetzt hinaus ?

Wenn du mehrere Unterschiedliche Schriftarten nehmen willst hast du in der ListBox ein OnDrawItem Ereignis in dem du komplett bestimmen kannst wie der Eintrag auschauen soll...
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Nils
Beiträge: 130
Registriert: Mo 28. Mai 2007, 12:36
Kontaktdaten:

Beitrag von Nils »

Dann haben wir zu 50% aneinander vorbeigeredet. Die Listbox direkt in Paint zu überschreiben geht nicht, aber OnDrawItem gibt es, also auch OwnerDraw. Wenn ich mich dafür entscheide, eine Listbox selbst zu programmieren, muss ich darauf achten, dass die Höhe eines Eintrages immer der der Schrift entspricht. Wenn ich nun einfach OnDrawItem nehme, klappt es also. Aufgrund davon ließe sich dann die Listbox auf eine meiner Meinung nach hässliche Art skinnen, aber es erfüllt seinen Zweck.
Meine Musik: spiker-music.net

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Die Listbox besitzt ein Event. OnDrawItem. Dort könntest du die Farben und Schrift einstellen.
hier gibt es genügend Beiträge:
http://www.delphipraxis.net/forum_main.html" onclick="window.open(this.href);return false;

Ich würde die Informationen als Objekte in der TStringList speichern.

Nils bei meinen Komponenten mache ich das sogar genau so. Da ist doch eine dabei die zeichnet alle Farben in einer ListBox.

Oder ich habe die Frage falsch verstanden.

Eine ListBox ist aber im Prinzip sehr einfach.
Am einfachsten würde ich das so machen:
meherer Panels in einer Scrollbox tuen.
dort könnte man dann viel leichter die Farben anpassen.

Evlt. würde das ja schon Ausreichen für dein Vorhabe.
Oder du verwendest ein Panel und packst darauf ein Label.

Eine ListBox ist im Prinzip eine einfache Komponenten. nur das Scrollen macht mir Probleme.
MFG
Michael Springwald

Antworten