Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Komponente auf Frame ansprechen (https://www.delphipraxis.net/109378-komponente-auf-frame-ansprechen.html)

TheThrust 29. Feb 2008 07:02


Komponente auf Frame ansprechen
 
Hallo Leute!

Ich habe ein eher ungewöhnliches Problem und ich kann mir gut vorstellen dass ich einfach nur einen Denkfehler gemacht habe:

Es ist ein Frame über folgenden Code in meine Hauptunit eigebunden worden:
Delphi-Quellcode:
uses Unit2, Unit3;

var
  fr : array[0..3] of TFrame;

procedure TForm1.FormCreate(Sender: TObject);
begin
  fr[0] := Unit2.TFrame2.Create(self);
  fr[0].Parent := Form1;
end;
Soweit, sogut, nun möchte ich aber ein Label mit dem Namen Label1 auf dem Frame verändern. Ich habe verschiedene Möglichkeiten ausprobiert, habe aber jede Mal eine Fehlermeldung bekommen:

Delphi-Quellcode:
  fr[0].FindComponent('Label1').Caption := 'hi';
Zitat:

Undeclared identifier 'Caption'
Delphi-Quellcode:
  fr[0].FindComponent(Label1).Caption := 'hi';
Zitat:

Undeclared identifier 'Caption'
Delphi-Quellcode:
fr[0].Label1.Caption := 'hi';
Zitat:

Undeclared Identifier 'Label1'
Mir fällt keine andere Möglichkeit ein...

Ich hoffe da gibt es eine einfache Lösung, mit Forms bekomme ich die ganze sache sehr leicht hin, nur halt mit dem Frame nicht :-(

mfG TheThrust

Looper 29. Feb 2008 07:08

Re: Komponente auf Frame ansprechen
 
Das Frame kann man doch auch über FormX. ansprechen oder nicht?

mfg Looper

teebee 29. Feb 2008 09:27

Re: Komponente auf Frame ansprechen
 
Woher soll der Compiler wissen, welche Komponenten sich auf dem Frame fr[0] befinden? fr ist ja ein Array von TFrame und nicht von TFrame2.
Delphi-Quellcode:
 TFrame2(fr[0]).Label1.Caption := 'hi';
oder
Delphi-Quellcode:
(fr[0] as TFrame2).Label1.Caption := 'hi';

webcss 29. Feb 2008 10:20

Re: Komponente auf Frame ansprechen
 
Zitat:

fr[0].FindComponent('Label1').Caption := 'hi';
Delphi-Quellcode:
TLabel(fr[0].FindComponent('Label1')).Caption := 'hi';
Weil ein TComponent kennt keine Eigenschaft Caption :wink:

mkinzler 29. Feb 2008 10:27

Re: Komponente auf Frame ansprechen
 
Oder besser einen Softcast:
Delphi-Quellcode:
(fr[0].FindComponent('Label1') as TLabel).Caption := 'hi';

webcss 2. Mär 2008 23:06

Re: Komponente auf Frame ansprechen
 
Zitat:

Zitat von mkinzler
Oder besser einen Softcast:
Delphi-Quellcode:
(fr[0].FindComponent('Label1') as TLabel).Caption := 'hi';

Wo ist da eigentlich der Unterschied?

Dani 2. Mär 2008 23:20

Re: Komponente auf Frame ansprechen
 
Zitat:

Zitat von webcss
Zitat:

Zitat von mkinzler
Oder besser einen Softcast:
Delphi-Quellcode:
(fr[0].FindComponent('Label1') as TLabel).Caption := 'hi';

Wo ist da eigentlich der Unterschied?

Der direkte Cast schlägt niemals fehl, auch dann nicht, wenn die Typen eigentlich nicht kompatibel sind. Mit dem Softcast bekommt man dagegen im schlechtesten Fall einen Laufzeitfehler.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Caption := IntToStr(TStrings(Button1).IndexOf('Not a Stringlist'));
end;
-> Compiler beschwert sich nicht, Caption wird (zufällig!) auf "0" gesetzt. Da kommt nicht mal eine Exception :shock:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Caption := IntToStr((Button1 as TStrings).IndexOf('Not a Stringlist'));
end;
-> Compiler bemerkt den Fehler und bricht mit der Meldung "Inkompatible Typen" ab.

omata 2. Mär 2008 23:23

Re: Komponente auf Frame ansprechen
 
Eine andere Variante wäre der IS-Operator.

Gruss
Thorsten


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