![]() |
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 |
AW: Listboxitem zentrieren?
Eine anderes Control verwenden?
|
AW: Listboxitem zentrieren?
Hallo,
diese Variante steht leider nicht zur Diskussion! Sonst noch irgendwelche Vorschläge? Gruß Mattze |
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?
|
AW: Listboxitem zentrieren?
Das richtige Stchwort ist wohl
Delphi-Quellcode:
und/oder
Textwidth
Delphi-Quellcode:
Gruß
Textrect
K-H |
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... |
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. |
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 |
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: |
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 10:40 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 by Thomas Breitkreuz