Zugriff auf Steuerelemente in verschiedenen Formularen

Rund um die LCL und andere Komponenten
Antworten
Eb
Lazarusforum e. V.
Beiträge: 238
Registriert: Di 5. Feb 2008, 15:32
OS, Lazarus, FPC: Linux Mint - Laz 2.2.0
CPU-Target: 64Bit
Wohnort: Stuttgart

Zugriff auf Steuerelemente in verschiedenen Formularen

Beitrag von Eb »

Hallo Zusammen,

Ich habe ein Programm mit mehreren Formularen

Nun würde ich gerne einer prozedur beim aufruf den Namen eines Formulars mitgeben.
Die prozedur soll dann bei dem Formular, das als Parameter übergeben wird, bei einigen labels die Eigenschaft caption ändern.

Vom Prinzip her sollte das etwas so funktionieren:

procedure label_aendern( )
begin
for do
begin
label1.caption := 'test1';
label2.caption := 'test2';
end;

end;

Wie müsste diese Prozedur in Lazarus aussehen?

Vielen Dank im voraus,

Eberhard

pluto
Lazarusforum e. V.
Beiträge: 7180
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Code: Alles auswählen

procedure label_aendern( <name des Formualars>)
begin
for <name des Formulars> do
begin
label1.caption := 'test1';
label2.caption := 'test2';
end;
 
end;

auf dein beispiel bezogen so:

Code: Alles auswählen

procedure label_aendern(var aFrom:TForm)
begin
  aFrom.label1.caption := 'test1';
  aFrom.label2.caption := 'test2';
end;


Wenn ich dich richtig verstanden habe. Wenn nicht schau dir mal:FindComponent, ComponentCount, Components[], screen.Forms an
MFG
Michael Springwald

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Hallo Eberhard und Willkommen im Forum!


For-Schleifen verwendet man soweit ich weiß nur, wenn etwas aufgezählt werden soll (for n:=1 to 100 do ...)
Wenn du die Eigenschaften einer bestimmten Form ansprechen möchtest, verwendest du am Besten den Befehl with:

Code: Alles auswählen

with <Handle des Formulars> do
begin
  Label1.Caption:='Test1';
  Label1.Caption:='Text2';
end;


Um eine bestimmte Form einer Prozedur zu "übergeben", übergibt man das sogenannte Handle. Beispielsweise könnte deine Prozedur wie folgt aussehen:

Code: Alles auswählen

procedure label_aendern(F:THandle)//F ist das Handle deiner Form.
begin
  with F do  //und damit machst du Folgendes:
  begin
    Label1.Caption:='Test1';
    Label1.Caption:='Text2';
  end;
end;


Heißt deine Form beispielsweise Form1, so rufst du obige Prozedur durch

Code: Alles auswählen

label_aendern(Form1.Handle);


auf.


Viele Grüße, Euklid

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

So, Pluto und Euklid ihr bekommt Tippverbot.

Der kram der hier gepostet wurde ist durchweg nicht Kompilierbar.
Woher soll denn der Compiler bitte wissen das auf FormX ein LabelX existiert ??

Kann er nicht !

Das was du machen wills könnte so klappen:

procedure label_aendern(FormX : TForm);
begin
if Assigned(FormX.FindComponen('Label1')) then
TLabel(FormX.FindComponen('Label1')).Caption := 'Bla';
end;
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7180
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Das mit FindComponen hatte ich auch schon gesagt als Tipp. *G*.
MFG
Michael Springwald

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Christian hat geschrieben:So, Pluto und Euklid ihr bekommt Tippverbot.


:lol:

Da muss ich dir zustimmen.^^ Ich weiß auch nicht, warum ich mich zu einen Tipp leiten ließ, den ich vorher nicht ausprobiert hatte...
... ich schiebe es mal auf nervöse Zuckungen meiner Finger ;)

*gesenkter Blick*

Eb
Lazarusforum e. V.
Beiträge: 238
Registriert: Di 5. Feb 2008, 15:32
OS, Lazarus, FPC: Linux Mint - Laz 2.2.0
CPU-Target: 64Bit
Wohnort: Stuttgart

Funktioniert - Vielen Dank!

Beitrag von Eb »

Hallo,

Der Code von Christian funktioniert perfekt, wenn es das Steuerelement nicht gibt, bricht das Programm nicht ab, sondern macht einfach nichts.

Wenn man sicher ist, dass das Steuerelement existiert, funktioniert es noch einfacher:

procedure label_aendern2(FormX : TForm);
begin
TLabel(FormX.FindComponent('Label1')).Caption := 'Bla';
end;


Das war genau das was ich gesucht habe.

Vielen Dank euch allen und noch ein schönes Wochenende,

Eberhard

Antworten