Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Variable über zusammengesetzte Strings ansprechen (https://www.delphipraxis.net/92566-variable-ueber-zusammengesetzte-strings-ansprechen.html)

hirnstroem 22. Mai 2007 12:08


Variable über zusammengesetzte Strings ansprechen
 
'loha Folks,

in einem Projekt befindet sich ein Unit in welchem ein Paar Konstanten definiert werden:

Delphi-Quellcode:
const
  HWV_DI = 'DI';
  HWV_GPI = 'GPI';
Gibt es eine möglichkeit diese nun ähnlich wie mit der FindComponent Routine zu suchen? Es ist nämlich so, dass der "Stamm" der Konstanten stets gleichbleibt und lediglich das Ende unterschiedlich ist. Desweiteren werden künftig immer mehr Konstanten mit demselben "Stamm" dazukommen und genau diese möchte ich "dynamisch" ansprechen können, wenn das geht, irgendwie -.-

Grüsse
hirnstroem

mischerr 22. Mai 2007 12:26

Re: Variable über zusammengesetzte Strings ansprechen
 
Ist mir nicht bekannt und kann mir auch nicht vorstellen dass das so funktioniert.

Ich würde mir ein konstantes Array definieren und dieses dann durchsuchen. Oder eine Client-Datenmenge, oder eine Klasse erstellen, ähnlich wie..

Delphi-Quellcode:
TMyClass = class
  VarName : string;
  VarValue: integer;
end;
..dann eine TList und dort die ganzen Typen im initialization-Abschnitt der unit registrieren. Dann noch eine Funktion, die den gesuchten Typ aus der jeweils gewählten Datenmenge liefert, ähnlich wie..

Delphi-Quellcode:
function GetConst(const AName: string): string;
..und fertig. Der Ordnung halber bei Verwendung der Klasse+TList aber nicht vergessen, die Liste im finialization Abschnitt wieder zu freen. Aber viele Wege führen nach Rom...

Codewalker 22. Mai 2007 12:27

Re: Variable über zusammengesetzte Strings ansprechen
 
Wäre aber eine nette Funktion die man sich in Delphi durchaus wünschen würde, Variablen und Konstanten per String-Namen anzusprechen. Kann man das nicht irgendwo vorschlagen? Oder vielleicht liest das ja jemand mit nem guten Draht zu CodeGear :mrgreen:

fLaSh11 22. Mai 2007 12:33

Re: Variable über zusammengesetzte Strings ansprechen
 
Mach doch einfach ne Liste aus den Konstanten.
Code:
const1=asdf;
const2=fdsa;
...
und dann such die Konstante in der Liste und hol den Wert raus.

Apollonius 22. Mai 2007 13:29

Re: Variable über zusammengesetzte Strings ansprechen
 
Was haltet ihr von einer Stringlist (als Speicherung für die Variablen). Wenn man da mit Names und Values arbeitet, ist ein Zugriff über Strings möglich.

SirThornberry 22. Mai 2007 13:38

Re: Variable über zusammengesetzte Strings ansprechen
 
Das vorhaben ist nicht möglich da Variablennamen und Constantennamen in der kompilierten Exe/Dll etc. nicht mehr vorhanden sind.
Die gewünschte parallele zu FindComponent hingt auch. Denn FindComponent sucht nicht eine Variable mit einem bestimmtem Namen sondern geht alle Komponenten durch und vergleicht das Property "Name". Und zufällig ist dieses Property immer gleich mit dem Variablennamen aber eben auch nur so lange wie man die Komponenten per IDE auf das Form setzt.

Apollonius 22. Mai 2007 13:41

Re: Variable über zusammengesetzte Strings ansprechen
 
Stimmt, als echte Variablen geht es nicht, wie man auch sehr schön im Assemblercode sieht, wo dann nur noch Adressen auftauchen. Dennoch kann man das Verhalten von Findcomponent nachbilden, und da die Stinglist es unterstützt muss man nix mehr selber machen.

SirThornberry 22. Mai 2007 13:45

Re: Variable über zusammengesetzte Strings ansprechen
 
genau, das Verhalten von FindComponent kann man recht einfach nachbilden. Es muss eben einem nur bewusst sein das Variablennamen im compilat nicht mehr existent sind und man somit alle Namen als Daten hinterlegen muss (z.B.: in einer Stringlist)

QuickAndDirty 22. Mai 2007 13:53

Re: Variable über zusammengesetzte Strings ansprechen
 
Delphi-Quellcode:
TNamen = (Hans,Peter, Uwe, Otto);
Const AdresseVon : array[TNamen] of String = ('Wilhelmstrasse', 'Otterweg', 'Pupsweg', 'Blödweg');
Const Namen: array[TNamen] of String = ('Hans','Peter','Uwe','Otto');

Function FindConst(aString:tString):tname;
var i:integer;
    gefunden:boolean;
begin
  gefunden := false
  For i := integer(Hans) to integer(otto) do
  Begin
    if namen[tnamen(i)] = astring then
    Begin
      gefunden := true;
      result := tnamen(i);
      break;
    end;
  end;
  if not gefunden then
    Raise Exception.create('Dumme sache');
end;

Sowas ungefähr könnte gehen

Apollonius 22. Mai 2007 13:56

Re: Variable über zusammengesetzte Strings ansprechen
 
Damit gewinnt man nichts, da man die Namen nicht wie gewünscht zusammensetzen kann.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:55 Uhr.
Seite 1 von 2  1 2      

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