Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Trackbar Position durch Kommerzahl rechnen


DiamondDog - Mo 09.06.08 13:40
Titel: Trackbar Position durch Kommerzahl rechnen
Hallo Leute,
ich hab da ein kleines Problem und zwar will ich meine Trackbar Position in einem Label anzeigen, was auch super funktioniert. Nur die Zahl im Label soll noch mal durch 2,5 gerechnet werden und irgend wie bekomme ich das nicht hin wäre super wenn mir jemand zeigen könnte wie das geht.

So sieht das biß jetzt aus

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TfmBeeperOptions.TrackBar1Change(Sender: TObject);
var a: integer;
begin
  a:=Trackbar1.Position;
  Label31.Caption:='(' + inttostr(a) + '%)'
end;


Miri - Mo 09.06.08 13:55

1. du teilst da doch nirgends.
2. Integer sind ganzzahlige Werte. Um Kommazahlen zu verarbeiten müsstest du schon double o.ä. verwenden und für die Umwandlung in String dann floattostr statt inttostr!


DiamondDog - Mo 09.06.08 15:01

Ok habs jetzt so gemacht:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TfmBeeperOptions.TrackBar1Change(Sender: TObject);
var a: double;
begin
  a:=Trackbar1.Position;
  Label31.Caption:='(' + floattostr(a/2.5) + '%)'
end;
jetzt hab ich das Problem das die Zahl mit Komma ausgegeben wird zB. 96,8 %
Hätte es aber gerne das er nur in 1% Schritten anzeigt.
Trackbar Min ist 0
Trackbar Max ist 255
Möcht es halt so haben das ich den Regler von linsk nach rechts bewege und dann die ProzentZahl dazu angezeigt wird aber ohne Komma und die Sprünge sollen in 1% Schritten erfolgen.
Sorry ist einwenig schwer zu erklären hoffe das das verständlich genug ist.


Gausi - Mo 09.06.08 15:10

IntToStr(Round(a/2.5)) ;-)


passiv - Mo 09.06.08 15:16

dann machs in die andere richtung: die trackbar von 0-100 und im trackbar.change sagst du dann wert:=round(trackbar1.position * 2.55);

ungetestet ...


DiamondDog - Mo 09.06.08 15:27

Ok so ist es super besten Dank.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TfmBeeperOptions.TrackBar1Change(Sender: TObject);
var a: double;
begin
  a:=Trackbar1.Position;
  Label31.Caption:='(' + IntToStr(Round(a/2.5)) + '%)'
end;


Yogu - Mo 09.06.08 16:10

... oder so:


Delphi-Quelltext
1:
2:
3:
4:
procedure TfmBeeperOptions.TrackBar1Change(Sender: TObject);
begin
  Label31.Caption := Format('(%.0f%%)', [TrackBar1.Position / 2.5]);
end;

Aber vielleicht solltest du besser aussagekräftigere Komponentennamen als "Label31" wählen. ;)

user profile iconpassiv hat folgendes geschrieben:
dann machs in die andere richtung: die trackbar von 0-100 und im trackbar.change sagst du dann wert:=round(trackbar1.position * 2.55);

TrackBar von 0-100? Und wie soll dann die Hochzähl-Methode aussehen? TrackBar1.Position ist ein Integer - es würde immer nur die Gerundete Version von 2.55 dazugezählt werden - 3. Und dann wäre die Leiste sehr schnell voll.

Grüße,
Yogu


passiv - Do 12.06.08 10:11

@Yogu: "wert" soll dann auch irgendwie (ich schätze mal) der RGB- oder AlphaBlend-Wert sein. im label zeigt man ganz einfach den echten wert, den die Trackbar liefert an ...

aber stimmt schon, erst jetzt beim genaueren durchlesen ergibt das erst mal keinen sinn (ich hab zu weit vorausgedacht :P :roll: )