![]() |
Dynamisch Variablenname erzeugen
Wahrscheinlich wurde auch diese Frage schon zu Tode diskutiert, aber ich habe keine Einträge gefunden (Wahrscheinlich suche ich bloß falsch)
Also ich habe 6 Trackbars, die beim Verschieben eigentlich alle das gleiche tun sollen, nur mit verschiedenen Variablen. Gibt es eine Möglichkeit (Statt 6 verschiedene Routinen zu schreiben) eine Routine zu schreiben und anhand des Aufrufenden Trackbars bestimmte Variablen zu ändern? Also hier das Beispiel
Code:
Aktuelle sieht es so aus:iHVHigh : Integer = 0; iHvLow : Integer = 0; iThrMinHigh : Integer = 2; iThrMinLow : Integer = 0; iThrMaxHigh : Integer = 127; iThrMaxLow : Integer = 0; iLedMinHigh : Integer = 0; iLedMinLow : Integer = 0; iLedMaxHigh : Integer = 0; iLedMaxLow : Integer = 0;
Code:
Wie man sieht ändern sich nur die Variablennamen.
procedure TForm1.THRMinBarChange(Sender: TObject);
var cThrMin : String; begin cThrMin := IntToHex(ThrMinBar.Position,4); iThrMinLow := StrToInt('$' + copy(cThrMin,3,2)); iThrMinHigh := StrToInt('$' + copy(cThrMin,0,2)); ThrMinEdt.Text := IntToStr(round(500*ThrMinBar.Position*2.5/4096)); Form1.RS232Panel.Caption := BuildCaption; bRS232Changed := True; end; ... procedure TForm1.HVBarChange(Sender: TObject); var cHV : String; begin cHV := IntToHex(HVBar.Position,4); iHVLow := StrToInt('$' + copy(cHV,3,2)); iHVHigh := StrToInt('$' + copy(cHV,0,2)); HVEdt.Text := IntToStr(round(500*HVBar.Position*2.5/4096)); Form1.RS232Panel.Caption := BuildCaption; bRS232Changed := True; end; Wenn ich also mit folgendem Sourcecode den Namen rausbekomme
Code:
kann ich dann mit name := 'HV'test := (sender as TTrackbar).Name; name := Copy(test,0,Pos('Bar',test)-1); irgendwie auf die Variablen iHVLow iHVHigh zugreifen? müsste dann ergo für name := 'THRMax' irgendwie auf die Variablen iTHRMaxLow iTHRMaxHigh Die Variablennamen setzen sich immer aus i + Name des Trackbar + Low oder + High zusammen Ich hoffe ich habe mich halbwegs verständlich ausgedrückt. Bin noch nicht so lange dabei. Danke Blackmice |
Re: Dynamisch Variablenname erzeugen
Jo, schau dir mal an, was der Parameter Sender so beinhaltet!
Edit: Im Beispiel kam ja noch ne zweite Frage. Also Variablennamen kann (und will und soll!) Delphi auch nicht auseinandernehmen. Die Namen gibts auch zu Laufzeit nicht mehr. Ich würde hier ein array aus einem Record vorschlagen, oder wenn es komplizierter wird: polymorphe Klassen. |
Re: Dynamisch Variablenname erzeugen
Ich habe doch Sender schon auseinander genommen und rausgefunden, dass mein Trackbar z.B. HVBar heisst
Ich weiss jetzt auch, dass ich auf die Variablen iHVLow und iHVHigh zugreifen will, aber wie bringe ich das dem Computer bei?
Delphi-Quellcode:
test := (sender as TTrackbar).Name; // Hier steht jetzt der Name des Trackbar drin. In diesem Fall HVBar; name := Copy(test,0,Pos('Bar',test)-1); cHV := (sender as TTrackbar).Position 'i' + name + 'Low' := StrToInt('$' + copy(cHV,3,2)); wird wohl nicht das gewünschte Ergebnis bringen |
Re: Dynamisch Variablenname erzeugen
Zitat:
Aber warum nimmst du nicht ein Record?
Delphi-Quellcode:
Jede Komponente hat auch noch das Feld "Tag". Da speicherst du durchgehend eine Zahl (je nachdem, an welcher Stelle dein Komponente in Txyz ist)
type Txyz=(HV,ThrMin,ThrMax,...,LedMax);
type TRec=record low,high:integer; end; type TAll=array[HV..LedMax] of TRec; Und dann so:
Delphi-Quellcode:
var xyz:Txyz;
begin xyz:=Txyz((sender as TTrackbar).Tag); All[xyz]:= //ja und jetzt machst du mit deinen Strings dasselbe end; |
Re: Dynamisch Variablenname erzeugen
(PS: Arrays finde ich nicht so gut ...) |
Re: Dynamisch Variablenname erzeugen
Vor allem finde ich das mit dem Array jetzt auch zu kompliziert umzusetzen. Ich hab nen fertigen Sourcecode der auf diesen Variablen aufbaut, und das an so vielen verschiedenen Stellen. Nur ist demjenigen für den ich das Programm schreibe erst jetzt eingefallen, dass er statt 1 Trackbar mehr braucht. Und wenn ich jetzt diese Variablen in nen Array setze, kann ich an 1000 Stellen anfangen alles neu zu machen.
|
Re: Dynamisch Variablenname erzeugen
Zitat:
|
Re: Dynamisch Variablenname erzeugen
Na dann bleibt mir wohl doch nur der Weg für jeden Trackbar seine eigene Change-Routine zu schreiben
|
Re: Dynamisch Variablenname erzeugen
Zitat:
|
Re: Dynamisch Variablenname erzeugen
Delphi-Quellcode:
procedure WasAuchImmer(Var a : Integer; Var b : String; Sender : TObject)
begin a := (Sender as TTrackBar).Position; b := "Ich bin ein String"; end; procedure TForm1.THRMinBarChange(Sender: TObject); Begin WasAuchImmer(ersterInteger, ersterString); End; procedure TForm1.HVBarChange(Sender: TObject); Begin WasAuchImmer(zweiterInteger, zweiterString); End; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:53 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-2025 by Thomas Breitkreuz