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/)
-   -   Globale Konstanten (https://www.delphipraxis.net/190220-globale-konstanten.html)

Amicello 13. Sep 2016 16:52

Globale Konstanten
 
Bin ganz neu bei Delphi - und wie ich das von gewohnt bin, möchte ich auch gern mein Delphi Projekt sinnvoll aufteilen - ganz einfach um für mich den Quelltext noch halbwegs übersichtlich zu gestalten.

Dazu möchte ich mehrere Units mit entsprechenden Funktionen und Klassen für ihre jeweiligen Bereiche erstellen.
Zusätlzich habe ich eine Liste konstanter Addressen und Offsets, die ich global über alle Unterunits im gesamten Programm nutze.
Die Pflege der Adressen / Offsets soll wieder zentral in einer einzigen Datei möglich sein.

Leider scheitert es gerade bei mir daran, dass ich zu dämlich bin zu googlen, wie ich globale Konstanten in einer Unterdatei definiere. Es steht zwar vieles darüber dass man als Programmierer den Sichtbarkeitsbereich einer Konstante festlegen kann, aber nicht wie. In konkreten Beispielen geht es immer nur um globale Variablen.

Hat da mal jemand ein Beispiel zur Hand?

Neutral General 13. Sep 2016 16:54

AW: Globale Konstanten
 
Variablen/Konstanten sind global, wenn du sie im interface Bereich einer Unit definierst.
Musst diese Unit dann halt überall da einbinden wo du Zugriff drauf brauchst:

Delphi-Quellcode:
unit GlobaleVariablen;

interface

var
  Variable: Integer = 5;

const
  Konstante = 'Hallo';

implementation

end.

dGeek 13. Sep 2016 16:55

AW: Globale Konstanten
 
Ich mache das immer so:

Delphi-Quellcode:
unit _global_vars;

interface

// uses ... ;

type
 TGlobalVars = packed record
 
 // alles mögliche an Variablen z.B.
 iInteger: Integer;
 sString: String;

 // und / oder const z.B:
 const
  iConstInteger: Integer = 123;
  sConstString: String = 'Fester String';
end;

// ...

var
 aGlobalVars: TGlobalVars; // Variablen und Konstanten können nun über "aGlobalVars.sMeineVariable" aufgerufen werden.
 
implementation

// hier notfalls irgendwelchen Funktionen und Proceduren, wenn nötig

end.
Ich finde das mit dem Record besser, da so ein Kontext besteht und man so weiß, wo die Variable hingehört.
Dafür das Record natürlich entsprechend benennen.

haentschman 13. Sep 2016 17:00

AW: Globale Konstanten
 
Hallöle...:P

Dann mußt die Konstanten Unit in der USES im interface deiner Unit deklarieren. Dann kannst du die Konstante über den Namen verwenden. :zwinker:

dGeek 13. Sep 2016 17:03

AW: Globale Konstanten
 
... im Uses einer ANDEREN Unit.
In einer Unit, wo die Variablen/Konstanten verwendet werden sollen.

*Klugscheiß*

Amicello 13. Sep 2016 17:27

AW: Globale Konstanten
 
Danke... nachdem ich den Uses-Block in der Konstantendefinition entfernt habe funktioniert es prima!
Irgendwas war da faul. Ich denke jetzt bin ich auf einem guten Weg.

Problem 2 von 254.935 (total) gelöst.


Unit xxx

Interface

Const
(...)

Implementation

End.

dGeek 13. Sep 2016 17:28

AW: Globale Konstanten
 
Denke mal über die Implementierung mit dem Record nach. Das erspart dir später viel Ärger beim Suchen von Variablen und Zusammenhängen.

Daniel 13. Sep 2016 17:30

AW: Globale Konstanten
 
Zitat:

Zitat von dGeek (Beitrag 1347552)
Das erspart dir später viel Ärger beim Suchen von Variablen und Zusammenhängen.

Wenn Du alle Konstanten in ein gemeinsames Record setzt, hast Du wenigstens die Gewissheit, dass es gar keinen Zusammenhang gibt. Du hast Dir damit eine Art Namensraum definiert - ich bevorzuge weiterhin individuelle Konstanten im jeweiligen Kontext.

dGeek 13. Sep 2016 17:33

AW: Globale Konstanten
 
Zitat:

Wenn Du alle Konstanten in ein gemeinsames Record setzt,
So war das doch nicht gemeint :P

Ich habe einige, thematisch geordnete Records.

Amicello 13. Sep 2016 17:48

AW: Globale Konstanten
 
Viele Funktionen und Werte werde ich sowieso dem Kontext nach in entsprechende Klassen einbetten.
Die Möglichkeit hatte ich mit AutoIt bisher nicht.

Gut, dafür hat man mit AutoIt 5 Seiten nackten Code blind und aus der La-Meng drauf-los-getippt,
incl. WriteProcessMemory und DLL Structs - drückt dann einmal auf Ausführen und ...
ach du Sch...ande, es funktioniert ja im ersten Anlauf!

Bei Delphi stolper ich noch über jeden Grashalm. Bei der gleichen Menge Code klemmts noch mindestens 20 mal an fehlenden oder zuvielgesetzten Semikolons oder unpassenden Typencastings. Andererseits gibts dafür aber auch mehr Möglichkeiten.
Ist bei PHP aber auch nicht grossartig anders, aber Delphi ist schon eine kleine pingelige Diva wie ich festgestellt hab.


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