Hallo
Ich hab schon bei Google und Co. gesucht und ich kriegs einfach nicht gebacken.
Also ich habe ein neues Programm erstellt und noch eine zusätzliche Unit. Das Formular nenne ich einfach mal "Unit A" und die Unit "Unit B".
Jetzt möchte ich, dass "Unit A" der "Unit B" einen Auftrag übergibt (die Prozedur dafür soll in "Unit B" bereitgestellt werden, braucht allerdings einen Eingabeparameter, den es von "Unit A" bekommt.).
Okay, das Übergeben klappt noch problemlos. Aber jetzt möchte ich das "Unit B" Komponenten von "Unit A" verändert (z.B. soll die Beschriftung der Buttons geändert werden).
Wenn ich jetzt aber den Uses-Teil von beiden Units so abändere dass beide Units sich gegenseitig kennen gibt es eine Fehlermeldung, welcher lautet:
[Fatal Error] Startfenster.pas(7): Program or unit \'A\' recursively uses itself
Okay, schön und gut, aber wie soll "Unit B" das Formular von "Unit A" verändern, wenn es dieses nicht kennt?
Einfach UnitA.Button.Caption:=\'blabla\' geht dann natürlich nicht.
Wo liegt der Fehler und wie ändere ich das? Etwas Quellcode wäre nicht schlecht :).
(Ich weiß dass ich das genauso gut in EINE Unit packen könnte, aber mein Info-Lehrer mag es gerne kompliziert.)
Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge
Hi,
Du implementierst in "Unit B" eine Funktion, die ein Dialogfenster (ist das TDialog?) annimmt. Den Dialog übergibst Du dann an "Unit B"
Auf dem Dialog sorgst Du dafür, daß die Controls ordentlich benannt sind und trägst die Namen in "Unit B" ein.
In "Unit B" enumerierst Du dann alle auf dem Dialog platzierten Controls, prüfst per Case-Block den Namen und änderst die Eigenschaften entsprechend.
Code kannste von mir nicht bekommen, bin schon lange aus Delphi raus.
Okay, danke für die Antwort.
Aber irgendwie versteh ich nur Bahnhof, aber was solls, pack ich das alles in eine Unit und fertig.
Wenn sich 2 Units gegenseitig referenzieren, muss mindestens eine davon über die USES-Klausel im Implementation Abschnitt eingebunden werden.
In Deinem Fall also etwa so:
unit UnitA;
interface
uses UnitB;
[...]
unit UnitB;
interface
[...]
implementation
uses UnitA;
In der Hilfe findest Du diese Thema unter der Überschrift Zirkuläre Unit-Referenzen.
UnitA.Button.Caption:='blabla';
Kann so auch auf keinen Fall funktionieren, das das Formular fehlt.
Mit
FormA.ButtonN.Caption := 'blabla';
müsste es funktionieren.CU Borlander
Super Borlander! Das funktioniert!
Danke euch beiden.