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/)
-   -   Delphi Zugriff auf Label aus "externer" Unit (neu gefragt) (https://www.delphipraxis.net/117586-zugriff-auf-label-aus-externer-unit-neu-gefragt.html)

MisterCP 21. Jul 2008 14:28


Zugriff auf Label aus "externer" Unit (neu gefragt
 
Hi,

das Thema wurde zwar im Febr. schon mal angefragt, aber aus meiner Sicht haben die antwortenden User den Frager event.nicht richtig verstanden. und daher hoffe ich, daß es vielleicht doch noch eine "schöne Lösung" gibt:

Problemstellung:
- auf der Form frmMain befinden sich zahlreiche Objekte, u.A. Labels und Memos.
- der Ordnung halber werden bestimmte Proceduren, die sich dieser Objekte bedienen in eigene Units ausgelagert, so z.B. alle Routinen für die Sprachumschaltung in eine Unit untLGU oder alles was die anzuzeigenden Werte darstellt in untDraw.

In VB (da komme ich eigentlich her) ist das jetzt ganz einfach, da habe ich aus jedem Modul (unit) zugriff über z.B. frmMain.lblName01.caption .

Die einzelne Übergabe aller Objekte in die Procedur scheidet aus, da ich innerhalb der Procedur mehrere Objekte aus der Form ansprechen will.

Frage:
Wie müßte die RICHTIGE deklaration aussehen wenn ich in der untLGU folgendes machen wollte

procedure ChangeLanguage(objForm: TObject);
objForm.lblName01.caption = getlngString(LngNr, 1004);
objForm.lblDescr01.caption = getlngString(LngNr, 1008);
... usw.

Schon mal im Voraqus vielen Dank für die hoffentlich creativen Lösungsvorschläge.

mkinzler 21. Jul 2008 14:31

Re: Zugriff auf Label aus "externer" Unit (neu gef
 
Du musst die fremde Unit in den Uses einbinden

dominikkv 21. Jul 2008 14:31

Re: Zugriff auf Label aus "externer" Unit (neu gef
 
indem du objForm nach TFrmMain castest oder gleich (objForm: TFrmMain) verwendest

MisterCP 21. Jul 2008 14:47

Re: Zugriff auf Label aus "externer" Unit (neu gef
 
erst mal danke für die schnelle Antwort.

@mkinzler: das war mir schon klar, sonst wird die proc ja nicht gefunden :-)
@dominikkv:
- was bitte ist casten, bzw. wie geht das?
- das mit (objForm: TFrmMain) war auch mein erster gedanke, aber dann bekomme ich die meldung [Error] untLGU.pas(24): Undeclared identifier: 'TFrmMain' weil in dieser richtung doch kein USES-verweis auf die untMain drin steht (wegen der cross-Referenz)

mkinzler 21. Jul 2008 14:51

Re: Zugriff auf Label aus "externer" Unit (neu gef
 
Delphi-Quellcode:
(objForm as TFrmMain).lblName01.caption = getlngString(LngNr, 1004);
Zitat:

weil in dieser richtung doch kein USES-verweis auf die untMain drin steht (wegen der cross-Referenz)
Binde rückwärts im Implementierungs-Teil ein

hoika 21. Jul 2008 14:58

Re: Zugriff auf Label aus "externer" Unit (neu gef
 
Hallo,

schöner wäre es allerdings, eine lokale Variable zu benutzen:

Delphi-Quellcode:
var
  MyFrmMain: TFrmMain;
begin
  MyFrmMain:= TFrmMain(objForm);   // die harten

  with MyFrmMain as TFrmMain(objForm) do   // die vorsichtigen checken den richtigen Typ
  begin
    MyFrmMain .Label1.Caption:= 'bla';
  end;
 
end;

Heiko

dominikkv 21. Jul 2008 16:17

Re: Zugriff auf Label aus "externer" Unit (neu gef
 
Zitat:

Zitat von hoika
Delphi-Quellcode:
  with MyFrmMain as TFrmMain(objForm) do   // die vorsichtigen checken den richtigen Typ
  begin
    MyFrmMain .Label1.Caption:= 'bla';
  end;

wtf?
du meinst wohl
Delphi-Quellcode:
with MyFrmMain do  
  begin
    Label1.Caption:= 'bla';
  end; // oder
with TFrmMain(objForm) do  
  begin
    Label1.Caption:= 'bla';
  end; // oder
with objForm as TFrmMain do  
  begin
    Label1.Caption:= 'bla';
  end;
@MisterCP: wenn du die Unit im Implementation-Teil bekannt gibst hast du keine zirkuläre Unitreferenz:

Delphi-Quellcode:
interface
  // bla
implementation
  uses
    UnitMitTFrmMain;

procedure ChangeLanguage;
begin
  frmMain.lblName01.caption = getlngString(LngNr, 1004);
  frmMain.lblDescr01.caption = getlngString(LngNr, 1008);
//... usw.
end;

mkinzler 21. Jul 2008 16:27

Re: Zugriff auf Label aus "externer" Unit (neu gef
 
Eher
Delphi-Quellcode:
  MyFrmMain := (objForm as TFrmMain); //Softcast

NickelM 21. Jul 2008 17:30

Re: Zugriff auf Label aus "externer" Unit (neu gef
 
Ich kenn mich jetzt net ganz sogut damit aus, aber (ganz dumm gefragt) geht das net vieleicht mit Handles????

Dass man vieleicht mit den WinAPI Funktionen den Caption setzt????
Wenn jetzt um andere Eigenschaften geht, die jetzt nur das label hat und nicht mit WinAPI geht, weiß ich mir auch keinen Rat.

hoika 21. Jul 2008 17:40

Re: Zugriff auf Label aus "externer" Unit (neu gef
 
Hallo,

na klar kann man auch nur das Handle speichern
und dann z.B. per SendMessage(Label_1_Handle, WM_SETTTEXT...
die Werte setzen.

Aber warum weg von der VCL ?

Eine andere Mögöiochkeit wäre,
sich in einer eigenen Klasse die TLabel zu merken (das macht das Form)
(quasi nur die Pointer) und dann die Klasse übergeben und benutzen.


Heiko


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