AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dynamisch Variablenname erzeugen

Ein Thema von blackmice · begonnen am 5. Nov 2007 · letzter Beitrag vom 5. Nov 2007
Antwort Antwort
Seite 1 von 2  1 2      
blackmice

Registriert seit: 24. Okt 2007
Ort: Niederkrüchten
28 Beiträge
 
Delphi 5 Standard
 
#1

Dynamisch Variablenname erzeugen

  Alt 5. Nov 2007, 11:18
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:
 
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;
Aktuelle sieht es so aus:

Code:
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;
Wie man sieht ändern sich nur die Variablennamen.
Wenn ich also mit folgendem Sourcecode den Namen rausbekomme

Code:
 
test := (sender as TTrackbar).Name;
name := Copy(test,0,Pos('Bar',test)-1);
kann ich dann mit name := 'HV'
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
Blackmice
Debuggers don't remove bugs, they only show them in slow-motion.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Dynamisch Variablenname erzeugen

  Alt 5. Nov 2007, 11:22
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.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
blackmice

Registriert seit: 24. Okt 2007
Ort: Niederkrüchten
28 Beiträge
 
Delphi 5 Standard
 
#3

Re: Dynamisch Variablenname erzeugen

  Alt 5. Nov 2007, 11:31
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
Blackmice
Debuggers don't remove bugs, they only show them in slow-motion.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Dynamisch Variablenname erzeugen

  Alt 5. Nov 2007, 11:42
Zitat von blackmice:
wird wohl nicht das gewünschte Ergebnis bringen
Nö, nie! Da bist du bei Delphi an der falschen Stelle. Variablen sind nach dem Compilieren nur noch Adressen. Namen werden nirgends abgespeichert. Das kann man über den Umweg einer Klasse machen, welcher beim compilieren der eigene Name mitgegeben wird. Dies ist z.B. bei allen Nachfahren von TComponent der Fall.

Aber warum nimmst du nicht ein Record?
Delphi-Quellcode:
type Txyz=(HV,ThrMin,ThrMax,...,LedMax);

type TRec=record
       low,high:integer;
end;

type TAll=array[HV..LedMax] of TRec;
Jede Komponente hat auch noch das Feld "Tag". Da speicherst du durchgehend eine Zahl (je nachdem, an welcher Stelle dein Komponente in Txyz ist)
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;
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Dynamisch Variablenname erzeugen

  Alt 5. Nov 2007, 11:45
  • TStrinList mittels "Values".
  • Eigene Objekte.
  • TTrackbar ableiten und die benötigten Eigenschaften hinzufügen
  • etc.
Es gibt dutzende Wege ...
(PS: Arrays finde ich nicht so gut ...)
Chris
  Mit Zitat antworten Zitat
blackmice

Registriert seit: 24. Okt 2007
Ort: Niederkrüchten
28 Beiträge
 
Delphi 5 Standard
 
#6

Re: Dynamisch Variablenname erzeugen

  Alt 5. Nov 2007, 11:50
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.
Blackmice
Debuggers don't remove bugs, they only show them in slow-motion.
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Dynamisch Variablenname erzeugen

  Alt 5. Nov 2007, 11:52
Zitat von blackmice:
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.
Tja, du wirst da nicht drum rum kommen, es anders zu lösen ...
Chris
  Mit Zitat antworten Zitat
blackmice

Registriert seit: 24. Okt 2007
Ort: Niederkrüchten
28 Beiträge
 
Delphi 5 Standard
 
#8

Re: Dynamisch Variablenname erzeugen

  Alt 5. Nov 2007, 11:56
Na dann bleibt mir wohl doch nur der Weg für jeden Trackbar seine eigene Change-Routine zu schreiben
Blackmice
Debuggers don't remove bugs, they only show them in slow-motion.
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#9

Re: Dynamisch Variablenname erzeugen

  Alt 5. Nov 2007, 12:00
Zitat von blackmice:
Na dann bleibt mir wohl doch nur der Weg für jeden Trackbar seine eigene Change-Routine zu schreiben
Oder so ... wenn auch sicherlich eine unschöne Methode
Chris
  Mit Zitat antworten Zitat
Benutzerbild von leddl
leddl

Registriert seit: 13. Okt 2003
Ort: Künzelsau
1.613 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Dynamisch Variablenname erzeugen

  Alt 5. Nov 2007, 12:00
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;
Axel Sefranek
A programmer started to cuss, cause getting to sleep was a fuss.
As he lay there in bed, looping round in his head
was: while(!asleep()) ++sheep;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz