![]() |
Findcomponent für Variablen??
HI
Ich habe mehrere Variablen die ich mit clredvar, clbluevar,...: integer; benannt habe. In einer function übergebe ich eine Farbe (clred, clblue,...) und möchte nun die entsprechende Variable bearbeiten. Meine Frage ist nun, ob es einen Befehl
Delphi-Quellcode:
gibt mit dem ich da ohne massig if's hinkomme und wie der heisst :mrgreen:
Findvariable( colorstostring(übergebeneFarbe)+'var'))
THXbyTOX |
Re: Findcomponent für Variablen??
Bei Variablen werden keine Laufzeittypinformationen mit compiliert, im fertigen Programm gibts also nur noch eine Adresse und kein Variablennamen mehr.
Was du allerdings machen kannst, ist die Verwendung eines assoziativen Arrays bzw. Hashes: [dp]assoziativ* Array[/dp]. Oder du nimmst Felder einer Klasse, die als published markiert sind, dort kannst du mittels TObject.FieldAdress vm Namen auf die adresse schließen. |
Re: Findcomponent für Variablen??
Danke, für die Antwort auch wenn sie nucht allzu gut ist. :roll:
Ich werd's dann wohl doch mit if's machen müssen.... Sieht zwar nicht gut aus aber mit Hashes hab ich noch nicht gearbeitet und da wird's aufwändiger ich da reinzuarbeiten. THXbyTOX |
Re: Findcomponent für Variablen??
Zitat:
|
Re: Findcomponent für Variablen??
In vielen Fällen reicht auch ein Array das den Variablennamen und dessen Adresse speichert aus.
Zb.
Delphi-Quellcode:
Gruß Hagen
type
TVarName = packed record Name: String; Addr: Pointer; end; TVarNameArray = array of TVarName; var VarNames: TVarNameArray; function IndexOfVariable(const Name: String): Integer; var I: Integer; begin for I := 0 to High(VarNames) do if AnsiCompareText(Name, VarNames[I].Name) = 0 then begin Result := I; Exit; end; Result := -1; end; function RegisterVariable(const Name: String; Addr: Pointer): Integer; var I: Integer; begin I := IndexOfVariable(Name); if I < 0 then begin I := Length(VarNames); SetLength(VarNames, I +1); end; VarNames[I].Name := Name; VarNames[I].Addr := Addr; Result := I; end; function FindVariable(const Name: String): Pointer; var I: Integer; begin I := IndexOfVariable(Name); if I < 0 then raise Exception.CreateFmt('Variable %s not registered.', [Name]); Result := VarNames[I].Addr; end; var MyVar: Integer = 0; procedure TestCode; begin RegisterVariable('MyVar', @MyVar); PInteger(FindVariable('MyVar'))^ := 1; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00: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