[Pascal] auf Variable aus übergeordneter Unit zugreifen

  • Moin,

    ich habe hier ein Lazarus-Projekt (Ruhe, es handelt sich um den Informatikunterricht, mir wär auch was anderes lieber), in dem ich zwei Formulare brauche. Dafür braucht man offenbar auch zwei Units. Jetzt muss ich aber aus der untergeordneten Unit auf eine Variable der oberen Unit zugreifen. Geht das?

    73
    thosch97

    PGP-Key E384 009D 3B54 DCD3 21BF  9532 95EE 94A4 3258 3DB1 | S/MIME-Key 0x1A33706DAD44DA
    G d-@ s+:- a--- C+++ UB+L++ P--- L++@ E-@>++ W+ N o? K? w>++ !O !M !V PS+++ PE-- Y+>++ PGP++>+++ !t 5? X? !R tv b+++>++++ DI !D G>+ e>+++ h !r>++ !z
    „Die Aachener gelten als Erfinder des 4. Hauptsatzes der Thermodynamik: ‚Thermo schreibt man zweimal.“‘
    “Saying that Java is good because it works on all platforms is like saying oral sex is good because it works on all sexes.”
    „Es gibt 10 Sorten von Leuten: Die einen verstehen das Binärsystem, die anderen nicht.“
    „Manche Männer lieben Männer, Manche Frauen eben Frauen; Da gibt's nix zu bedauern und nichts zu staunen; Das ist genau so normal wie Kaugummi kauen; Doch die meisten werden sich das niemals trauen“

    Einmal editiert, zuletzt von thosch97 (15. Oktober 2013 um 10:26)

  • Aus meiner Turbo Pascal Erfahrung heraus wuerd ich sagen, dass geht NICHT. Auf Variablen uebergeordneter Units kann man nicht zugreifen, weil sich die Referenz auf die Units dann quasi "ueberkreuzen" wuerden. (Cross Link Error... hiess das irgendwie). Ob das nun bei Lazarus immer noch so ist, weiss ich jetzt nicht, da ich nicht so der Delphi Fan bin.

    Klassiker:
    Am5x86 (Asus VL/I 486SV2GX4) | Am5x86 (ECS UM8810P-AIO) | Pentium III-S 1400MHz (Gigabyte 6VTXE)
    Gaming-Rig: Core i7 7700k (Gigabyte Z270X Gaming 5)
    HTPC: Core i3 4160 (ASRock H97 Pro4)

  • Lehrer hätten es gerne mit "gettern und Settern" ... Ich eher stehe auf die Kreuzbezüge

    Kreuzbezüge:

    du setzt in Unit1 die Variable, welche du in Unit2 braucht in den "public" Teil.
    Und bei Unit2 schreibst du (Code aus einem meiner Delphi-Projekte):

    Zitat


    var
    Form1: TForm1;

    implementation

    uses
    Unit1;

    {$R *.dfm}

    Wenn du es schöner machen willst ohne Kreuzbezüge:

    in Unit1 im Public Teil 2 Funktionen erzeugen:

    Diese sehen vom Code folgendermaßen aus:

    Zitat


    function GetDX : integer;
    begin
    Result := dx; //Das Ergebnis dieser Funktion, welche du in Unit2 aufrufst, gibt den Wert der Variable dx aus Unit 1 zurück
    end;

    Zitat


    procedure SetDX(temp:integer);
    begin
    dx := temp; //Du rufst von Unit2 aus SetDX(3) auf und somit fügt diese Prozedur dann die Variable nach Unit1 über.
    end;

    Im Endeffekt hast du nach kurzer Zeit aber schon keinen Bock mehr für jede Variable den ganzen Kram zu schreiben.


    aber viel Spaß.

    PS: Falls das jetzt nicht per STRG+C funktioniert, ich hab das grade so aus dem Kopf runtergeschrieben.

    HP DL-580 G7
    2x Intel Xeon E7-2870 (10 x 2,4GHz)
    96GB DDR3-1333 RAM
    NVIDIA GeForce GTX 1080 MSI (Blower)
    Samsung 850 Pro 512GB auf PCIe Karte
    4TB Seagate billigfieh
    72GB 10K HP Drive

    Einmal editiert, zuletzt von Magic94 (15. Oktober 2013 um 20:42)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!