*aufgeb*
das arect ist das "Rechteck" des Balkens
arect.left die linke anfangsposition
arect.right dir rechte. die setzt sich zusammen aus:
rect.right-startposx ist die maximal mögliche Länge des Balkens in Pixel (also für den angenommenen max Wert 100)
rect.right ist die Breite des zu zeichnenden Items und damit auch der Listbox. Dadurch ist der Code flexibel und Größenänderungen der Listbox führen immer zum gleichen relativen Ergebnis
der Rest ist ein simpler Dreisatz:
maximale Balkenlännge = 100
meine Balkenlänge = mein Wert
daraus ergibt sich
mein wert * maximale Balkenlänge
meine Balkenlänge = ---------------------------------
100
mein Wert ist der Prozentsatz oder was auch immer. In meinem Beispiel strtoint(items[index])
und für den deinen Code : strtoint(copy (Items [index], 14, 3)).
du mußt den Prozentsatz dort rauskopieren .... so schwer?
um sicher zu sein,
Quelltext
1: 2: 3: 4: 5: 6: 7:
| s:=copy (Items [index], 14, 3); try wert:=strtoint(s) except wert:=0; end; arect.right:=round(Wert*(rect.right-startposx)/100)+startposx; |
is jetz nur so hier reingeklimpert, geht bestimmt noch eleganter. Sinn ist, das copy(...) trotzdem noch einen String enthaltenn könnte,
der nicht in eine Zahl gewandelt wrden kann. Damit kommst du evtl in eine Endloschleife, da erst eine Exception ausgelöste wird, evtl der Listboxeintrag neu gezeichnet wird und damit wieder eine Exception ausgelöst usw.
jetzt klar ?
Mfg Frank