![]() |
Zugriff auf Label aus "externer" Unit
Hallo,
hab ein Problem, trotz langer Suche nix gefunden. Auf das Wesentliche reduziert hab ich ein kleines Programm (unit1 und Form1), und zusätzlich noch eine "externe" Unit2, in der ich ein paar Prozeduren deklariert habe, die ich im Programm benütze. Das funktioniert soweit einwandfrei, nur wenn ich aus einer Prozedur der Unit2 auf Objekte (einfach ein Label) der Form1 zugreifen will, kommt beim compilen der Fehler <Undeclared identifier: 'label1'> Irgendwie muss da noch rein, dass ich auf das "label1" der FORM1 zugreifen will, ich brings einfach nicht raus WIE! Wie gesagt, sonst funktionieren die Prozeduren, lediglich der Zugriff auf das Label ist das Problem. Danke schonmal ... Markus (Delphi6) |
Re: Zugriff auf Label aus "externer" Unit
Ubergebe das Label besser als Parameter
|
Re: Zugriff auf Label aus "externer" Unit
Eine etwas weniger sparsame Antwort:
Wenn Du vorher die Funktion hattest
Delphi-Quellcode:
dann muss die Unit1, zu der Form1 gehört in der uses-Zeile von Unit2 erscheinen.
procedure BerechneIrgendwas;
begin //machwas Ergebnis := FloatToStr(machwas); Form1.Label1.Caption := Ergebnis; end; mkinzler schlägt vor:
Delphi-Quellcode:
Der Aufruf aus Form1 würde lauten
procedure BerechneIrgendwas(OutLabel : TLabel);
begin //machwas Ergebnis := FloatToStr(machwas); OutLabel.Caption := Ergebnis; end;
Delphi-Quellcode:
Das ist dann gut, wenn Du die Routine direkt aus Form1 und nur einmal aufrufst. Wird sie von anderen Routinen von Unit2 oder rekursiv aufgerufen, ist die erste Variante besser.
Unit2.Berechneirgendwas(Label1);
Grüße, Messie |
Re: Zugriff auf Label aus "externer" Unit
Zitat:
|
Re: Zugriff auf Label aus "externer" Unit
Zitat:
Grüße, Messie |
Re: Zugriff auf Label aus "externer" Unit
nein, auch dann ist es nicht sinnvoller. Denn wenn Irgendwann Form1 in Formx umbenannt wird muss man es an zig stellen ändern. Oder wenn irgendwann Form1 gar nicht instanziert wird sondern dynamisch das Form auf eine andere Variable angelegt wird dann kracht es weil Form1 nicht instanziert ist.
Delphi steht für Objectpascal und wenn man mit TForm arbeitet verwendet man bereits Klassen und es macht keinen Sinn das dann mit globaler Programmierung zu vermixen wenn es auch anders geht. |
Re: Zugriff auf Label aus "externer" Unit
Danke erstmal,
ich hab an die erste (einfachere) Möglichkeit gedacht, die funktioniert aber immer noch nicht. Die Zeilen
Delphi-Quellcode:
liefern die entsprechenden Fehler.label1.caption := inttostr(ergebnis); // geht nicht: <Undeclared identifier: 'label1'> form1.label1.caption := inttostr(ergebnis); // geht auch nicht: <Undeclared identifier: 'form1'> Wenn ich nun in die uses-Zeile der Unit2 die Unit1 reinschreibe, kommt beim compilen der Fehler <Circular unit reference>, man darf da also offensichtlich nicht gleichzeitig in Unit1 auf Unit2 und umgekehrt verweisen. Nun ja, die andere Variante mit dem Ausgabelabel funktioniert jedenfalls tadellos, das Programm läuft! Vielen Dank also! |
Re: Zugriff auf Label aus "externer" Unit
Wenn Du 2 Units hast, die sich gegenseitig referenzieren, musst Du in der einen die uses-Klausel im interface-Abschnitt erweitern und in der anderen die im implementation-Abschnitt.
|
Re: Zugriff auf Label aus "externer" Unit
Zitat:
|
Re: Zugriff auf Label aus "externer" Unit
Zitat:
Angesichts der posts glaube ich aber auch, dass Zero8fifteen Deine Erläuterung nicht gleich verstehen wird. Ich wollte es so einfach wie möglich aufgabenbezogen darstellen. Und Vereinfachungen enthalten nun mal nicht alle Informationen und sind auch nicht immer vollständig richtig, ja nach Grad der Vereinfachung. Grüße, Messie |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz