Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Prozedur-Parameter mit variantem Typ? (https://www.delphipraxis.net/22602-prozedur-parameter-mit-variantem-typ.html)

Tryer 20. Mai 2004 09:43

Re: Prozedur-Parameter mit variantem Typ?
 
Hier nochmal eine andere Fassung: Zugriff auf die Variablen über getrennte Get-und Set-Routinen mit typlosem Value (-> ausserhalb kein Casting nötig, aber halt auch kein "property-Zugriff").
Wenn Du bei der vorherigen Lösung bleiben willst dann würde ich das TNumber wieder rausschmeissen und statt dessen mit TQuat arbeiten, da passen die anderen Typen schliesslich auch rein.

Delphi-Quellcode:
type
  TVariableArray = array [TVarNames] of TQuat;

  TDummy = class
  private
    FVars: TVariableArray;
  protected
  public
    NumFormat: TNumFormat;
    procedure SetVariable(VarName: TVarNames; const Value);
    procedure GetVariable(VarName: TVarNames; var Value);
  end;

implementation

{ TVaribles }

procedure TDummy.GetVariable(VarName: TVarNames; var Value);
begin
  case NumFormat of
    nfReal:
      Double(Value) := PDouble(@FVars[VarName])^;
    nfComplex:
      TComplex(Value) := PComplex(@FVars[VarName])^;
    nfQuat:
      TQuat(Value) := FVars[VarName];
  end;
end;

procedure TDummy.SetVariable(VarName: TVarNames; const Value);
begin
  case NumFormat of
    nfReal:
      PDouble(@FVars[VarName])^ := Double(Value);
    nfComplex:
      PComplex(@FVars[VarName])^ := TComplex(Value);
    nfQuat:
      FVars[VarName] := TQuat(Value);
  end;
end;

procedure Test;
var
  Dum: TDummy;
  D: Double;
  C: TComplex;
  Q: TQuat;
begin
  Dum := TDummy.Create;
  Dum.NumFormat := nfReal;
  D := 1.234;
  Dum.SetVariable(A, D);

  Dum.NumFormat := nfComplex;
  C.X := 1.23;
  C.Y := 4.56;
  Dum.SetVariable(B, C);

  Dum.NumFormat := nfQuat;
  Q.X := 1.23;
  Q.Y := 4.56;
  Q.Z := 7.89;
  Q.W := 10;
  Dum.SetVariable(C, Q);
end;
MfG,
Tryer

dizzy 20. Mai 2004 15:01

Re: Prozedur-Parameter mit variantem Typ?
 
Geil geil geil :thuimb: !
Ich hätte ja garnicht zu hoffen gewagt, dass man einen Parameter typenlos deklarieren kann! Drüber seniert hatte ich, es aber schnellstens wieder verworfen, da Delphi ja so typstreng ist :roll: (scheinbar wohl nicht ganz so sehr :) )
Dass der Propertyzugriff flöten geht ist absolut egal. Das ist dann nur eine Frage der Dokumentation - kein Problem! Wow, genau so hatte ich mir das vorgestellt.
Super-duper-heissen Dank! :firejump:


ein glücklicher
dizzy :hello:


\\edit: Nachtrag:
Ich habe jetzt alles so umgebaut wie du vorschlugst --- und es klappt 1A !! So wie ich mir das gewünscht hab. Nochmals vieeeelen Dank :party:
Alleine wäre ich an so einigen Stellen bös hängen geblieben...


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:45 Uhr.
Seite 3 von 3     123   

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