Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Findcomponent für Variablen?? (https://www.delphipraxis.net/14549-findcomponent-fuer-variablen.html)

Nikolas 11. Jan 2004 12:39


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:
Findvariable( colorstostring(übergebeneFarbe)+'var'))
gibt mit dem ich da ohne massig if's hinkomme und wie der heisst :mrgreen:

THXbyTOX

Chewie 11. Jan 2004 12:51

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.

Nikolas 11. Jan 2004 12:56

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

Chewie 11. Jan 2004 13:10

Re: Findcomponent für Variablen??
 
Zitat:

Zitat von Toxman
ieht zwar nicht gut aus aber mit Hashes hab ich noch nicht gearbeitet und da wird's aufwändiger ich da reinzuarbeiten.

Eigentlich nicht. Du musst dich ja nicht selbst um die Hashverwaltung kümmern, das wär wirklich sehr aufwändig. Aber es gibt ja fertige Klassen, die du so ähmlich verwenden kannst wie ein Array, nur eben, dass du Strings anstatt Zahlen zum Indizieren verwendest.

negaH 12. Jan 2004 12:22

Re: Findcomponent für Variablen??
 
In vielen Fällen reicht auch ein Array das den Variablennamen und dessen Adresse speichert aus.

Zb.

Delphi-Quellcode:
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;
Gruß Hagen


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:14 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