Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Listboxitem zentrieren? (https://www.delphipraxis.net/180998-listboxitem-zentrieren.html)

Mattze 7. Jul 2014 13:31

Listboxitem zentrieren?
 
Hallo,

wie zentriert man einen Listboxeintrag bzgl. clientwidth der Listbox?
Nicht grinsen!!! Das wäre recht einfach, wenn man nur einmal canvas.textout hätte.
Aber:
items[index] sei irgendwie zerlegt in s1, s2 und s3.
Und zwar erst in DrawItem!
(items[index]:=s1+s2+s3;)
Alle diese Teile werden zwar auf der gleichen Zeile, aber eben unterschiedlich formatiert ausgegeben.
(Anderer canvas.font, anderer canvas.brush, Leerzeichen dazwischen usw.)
Also hat man nicht einen kompakten String und deshalb die Ausgabelänge, sondern 3 mal canvas.textout.
Man kennt die Ausgabelänge nicht, bevor man das alles ausgegeben hat.
Wie das dann zentrieren?
Mir fehlt da die Idee.
Evtl. erst auf eine Bitmap zeichnen, dann hat man die Gesamtlänge. Die richtige Position auf der Listbox setzen und zuletzt die Bitmap auf die Listbox schieben
oder alles dort neu hinzeichnen? Was wäre besser?

Gruß
Mattze

mkinzler 7. Jul 2014 13:34

AW: Listboxitem zentrieren?
 
Eine anderes Control verwenden?

Mattze 7. Jul 2014 14:34

AW: Listboxitem zentrieren?
 
Hallo,

diese Variante steht leider nicht zur Diskussion!

Sonst noch irgendwelche Vorschläge?

Gruß
Mattze

baumina 7. Jul 2014 14:46

AW: Listboxitem zentrieren?
 
Meiner Meinung nach weißt du vor den einzelnen Textouts sehr wohl wie breit der einzelne Textout wird, denn du musst ja auch die anderen beiden Textouts richtig links anfangen lassen. Also kannst doch dann von der Summe der Breiten die Mitte finden, oder nicht?

p80286 7. Jul 2014 15:00

AW: Listboxitem zentrieren?
 
Das richtige Stchwort ist wohl
Delphi-Quellcode:
Textwidth
und/oder
Delphi-Quellcode:
Textrect
Gruß
K-H

Mattze 7. Jul 2014 15:23

AW: Listboxitem zentrieren?
 
Hallo,

vielen Dank für die Antworten.
Das ist alles richtig! Im Prinzip!
Da kann bloß zwischen s1, s2 und s3 noch eine verschiedene Anzahl von "leeren Pixeln" stehen. Im Grunde ein Tabulator, der eben durchaus auch verschieden sein kann.
Aber Ihr gebt mir da einen Gedanken ein. Vielleicht geht es doch mit den "normalen" Sachen (Textwidth usw.).
Wird nur eine elende Rechnerei und ob das nicht zuviel Zeit kostet.
Nun, schaun mer mal...

Gruß
Mattze

PS: Ich bin immer noch bei der Idee, das vorher auf eine Bitmap zu zeichnen und dann nur entsprechen zu kopieren.
Mal sehen...

himitsu 7. Jul 2014 15:31

AW: Listboxitem zentrieren?
 
Nein, das ist kein Tabulator.
In der List-Ansicht ist das ein Grid, nur daß man die Spaltentrennung nicht immer sieht.

Das sind halt mehrere "getrennte" Spalten, weswegen der Vorschlag mit einer "passenden" Komponente schon der Richtigere war.

Mattze 7. Jul 2014 17:02

AW: Listboxitem zentrieren?
 
Hallo himitsu,

bitte nicht mehr hineininterpretieren als ist.
Es geht wirklich um eine Listbox mit Columnen:=0!
Und EINEN String, der eben zur Laufzeit so aufgeteilt wird, dass irgendwo dazwischen einige Leerzeichen (oder eben mehrere verschiedene Tabulatoren - siehe bei den Schweizern) eingebaut werden.
Das kann bei jedem Listbox.item ganz woanders sein.

Gruß
Mattze

himitsu 7. Jul 2014 17:21

AW: Listboxitem zentrieren?
 
Ups, hast Recht.

Ich war irgendwie auf 'nem ListView gekommen, da eine ListBox ja eigentlich nur eine Spalte hat und ich garnicht erst auf die Idee gekommen bin da würde jemand mehrere Spalten reinmachen. :stupid:


Nja, wenn mehrere Formate, dann mußt du eben jedes Textstück einzeln berechnen müssen (je Font-Style).
Die Text-Widths werden dann zusammengerechnet, der Anfang für die Zentrierung berechnet und dann jedes Stück ab da einzeln gezeichnet, was doch eh nicht anders zu machen ist. :gruebel:

Mattze 8. Jul 2014 06:54

AW: Listboxitem zentrieren?
 
Hallo himitsu,

eben! Eklige Rechnung!
Dazu kommt noch, dass einige Zeichen vor dem Ausschreiben entfernt oder dazugefügt werden und noch mehr.
Eine irre Sache, da die tatsächlich "Ausgabelänge" zu ermitteln!
Ob das vom Zeitbedarf noch sinnvoll wird oder die Listbox da zu langsam wird?!

Gruß
Mattze


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:55 Uhr.
Seite 1 von 2  1 2      

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