Autor Beitrag
Friedhelm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47



BeitragVerfasst: Mi 04.12.02 12:06 
Hallo Frank,

1. Startposx wird festgelegt wo der Balken anfangen soll (x-Achse)

2. arect.right:=round(strtoint(items[index])* rechteck zeichnen,

3. (rect.right-startposx)/100)+startposx;
Item/Index die zahl, die in der Listbox steht.

4. damit habe ich aber nicht - wie in meinem Falle - den Teilstring verarbeitet?
Ich rechne doch einzig und allein mit den Werten, die in der Listbox stehen(wenn es nur ZAHLEN sind) UNd dass´ist in meiner ListBox ja nicht der Fall.
Mit nur Zahlen funzt es.

Eigentlich geht es mir jetzt darum, den Teilstring(Item), nämlich die 035, 075 usw als Balken hinter dem jeweiligen Eintrag zu stellen, wobei alle Einträge der LB in voler Länge bestehenbleiben.

Sehe ich die LÖsung nicht, oder ist sie so simpel??? :oops:


Gruss
Friedhelm
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Mi 04.12.02 12:44 
*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,
ausblenden 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

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
Friedhelm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47



BeitragVerfasst: Mi 04.12.02 14:21 
Hallo Frank,

danke für deine Mühe. Wenn ich das so lese habe ich es verstanden.
Bei mir hat z.B. beim Kopieren immer ein Komma gefehlt. :oops:

So kam ich nicht weiter.
Danke nochmal. :beer:

Gruss
Friedhelm