AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Zugriff auf Label aus "externer" Unit
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriff auf Label aus "externer" Unit

Ein Thema von Zero8fifteen · begonnen am 24. Feb 2008 · letzter Beitrag vom 24. Feb 2008
Antwort Antwort
Seite 1 von 2  1 2      
Zero8fifteen

Registriert seit: 2. Jan 2008
2 Beiträge
 
#1

Zugriff auf Label aus "externer" Unit

  Alt 24. Feb 2008, 15:22
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)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Zugriff auf Label aus "externer" Unit

  Alt 24. Feb 2008, 15:25
Ubergebe das Label besser als Parameter
Markus Kinzler
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Zugriff auf Label aus "externer" Unit

  Alt 24. Feb 2008, 16:09
Eine etwas weniger sparsame Antwort:

Wenn Du vorher die Funktion hattest

Delphi-Quellcode:
procedure BerechneIrgendwas;
begin
  //machwas
  Ergebnis := FloatToStr(machwas);
  Form1.Label1.Caption := Ergebnis;
end;
dann muss die Unit1, zu der Form1 gehört in der uses-Zeile von Unit2 erscheinen.

mkinzler schlägt vor:
Delphi-Quellcode:
procedure BerechneIrgendwas(OutLabel : TLabel);
begin
  //machwas
  Ergebnis := FloatToStr(machwas);
  OutLabel.Caption := Ergebnis;
end;
Der Aufruf aus Form1 würde lautenUnit2.Berechneirgendwas(Label1); 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.

Grüße, Messie
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Zugriff auf Label aus "externer" Unit

  Alt 24. Feb 2008, 17:18
Zitat:
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.
Warum bitte das? Wenn du das Ausgabelabel mitgibst kannst du es von überall aufrufen.
Markus Kinzler
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Zugriff auf Label aus "externer" Unit

  Alt 24. Feb 2008, 17:55
Zitat von mkinzler:
Warum bitte das? Wenn du das Ausgabelabel mitgibst kannst du es von überall aufrufen.
Ich meinte, falls die Routine nicht direkt aus Form1 aufgerufen wird, sondern z.B. proc1 ruft proc2 auf, proc2 ruft Ergebnisprozedur proc3 auf etc. Dann müsste das Label bis proc3 durchgereicht werden. Und da ist ein anderer Aufbau - welcher Form auch immer - sinnvoller.

Grüße, Messie
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Zugriff auf Label aus "externer" Unit

  Alt 24. Feb 2008, 18:01
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Zero8fifteen

Registriert seit: 2. Jan 2008
2 Beiträge
 
#7

Re: Zugriff auf Label aus "externer" Unit

  Alt 24. Feb 2008, 18:17
Danke erstmal,

ich hab an die erste (einfachere) Möglichkeit gedacht, die funktioniert aber immer noch nicht.

Die Zeilen

Delphi-Quellcode:

 label1.caption := inttostr(ergebnis); // geht nicht: <Undeclared identifier: 'label1'>
 
 form1.label1.caption := inttostr(ergebnis); // geht auch nicht: <Undeclared identifier: 'form1'>
liefern die entsprechenden Fehler.


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!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Zugriff auf Label aus "externer" Unit

  Alt 24. Feb 2008, 18:21
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Zugriff auf Label aus "externer" Unit

  Alt 24. Feb 2008, 18:23
Zitat:
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.
Das würde gehen, wenn du Unit1 in Unit2 unter implementation einbindest. Die Lösung mit dem Parameter ist aber die sauberere und bessere Lösung.
Markus Kinzler
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#10

Re: Zugriff auf Label aus "externer" Unit

  Alt 24. Feb 2008, 18:53
Zitat von SirThornberry:
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.
Keiner versteht mich...
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:34 Uhr.
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