Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi FindComponent Frage (https://www.delphipraxis.net/2237-findcomponent-frage.html)

hitzi 14. Jan 2003 11:39


FindComponent Frage
 
Warum funktioniert der folgenden Code nicht. Es wird immer assigned(tf) als false erkannt, obwohl das Fenster mit dem Namen existiert.
Gibt es einen anderen Weg, herauszufinden ob eine Fenster mit einem bestimmten Namen schon existiert? (nur Fenster aus dem eigenen Programm)

Delphi-Quellcode:
var tf:TForm2;
begin
 tf:=Application.FindComponent('test')as TForm2;
 if assigned(tf)=false then begin  //Form2 mit dem Namen Test wurde nicht gefunden
     whith TForm2.create(self) do begin
      name:='test';
      ....
     end
   end else begin //Form2 mit dem Namen Test wurde gefunden
    whith (Application.FindComponent('test')as TForm2) do begin
      ....
    end;
 end;
MfG Hitzi

[edit=Daniel B]Delphi-Tags eingefügt. MfG Daniel B.[/edit]

hitzi 14. Jan 2003 11:52

Fehler gefunden.

self muss in application geändert werden beim create.

MfG Hitzi

jbg 14. Jan 2003 11:55

Erst denken, dann posten.

hitzi 14. Jan 2003 12:36

Zitat:

Zitat von jbg
Erst denken, dann posten.

[OFFTOPIC]

?

Zu dem Zeitpunkt als ich hier gepostet wusste ich keine Lösung zu dem Problem. Hatte schon vieles probiert. Da wollte ich mal hier im Forum nachfragen. Wenn ich nachfrage heißt das doch nicht, dass ich aufhöre mit der Problemlösung. Wenn ich dann eine Lösung finde (egal auf welchen Weg) und hier noch niemand auf meine Frage geantwortet hat, ist doch eigentlich selbstverständlich, dass man die Lösung präsentiert.

Eine Alternative wäre den Post zu löschen. Diese Möglichkeit habe ich aber nicht. Außerdem hat evt. später einmal ein anderer User das selbe Problem und wird so mit der Forumsuche fündig.

Also, was soll ich das nächste Mal machen? Meine Frage posten, allerdings mit der Gefahr, dass ich mit der Zeit selber eine Lösung finde. Oder lieber gar nicht erst posten?

MfG Hitzi

RomanK 14. Jan 2003 12:50

[OT]
Also wenn du ein Prob hast dann darfst du immer hier posten, wenn du dann die Lösung findest oder selber herrasubekommst dann poste diesen Lösungsweg bitte, wie gesagt es kann ja sein das ein andere User dass selbe Prob auch mal hatte, und es nicht rausbekommen hat, oder dass es einer haben wird, bzw. es einfach jemanden interessiert wie es geht...[/OT]

grayfox 23. Jan 2003 16:57

hallo hitzi!
Zitat:

self muss in application geändert werden beim create.
verrätst mir auch noch, worauf 'self' geändert gehört?

mfg, gf

hitzi 23. Jan 2003 20:02

Auszug:
whith TForm2.create(self) do begin

ändern in
whith TForm2.create(application) do begin

So siehts dann aus:
Delphi-Quellcode:
var tf:TForm2;
begin
tf:=Application.FindComponent('test')as TForm2;
if assigned(tf)=false then begin  //Form2 mit dem Namen Test wurde nicht gefunden
     whith TForm2.create(application) do begin
      name:='test';
      ....
     end
   end else begin //Form2 mit dem Namen Test wurde gefunden
    whith (Application.FindComponent('test')as TForm2) do begin
      ....
    end;
end;
MfG Hitzi

Christian Seehase 23. Jan 2003 21:19

Moin Hitzi,

noch ein kleiner Tip:

Frage bei einem boolschen Vergleich niemals nach true oder false ab.

Beispiel:

Delphi-Quellcode:
if Assigned(tf) = false then // sollte man nicht machen

if not Assigned(tf) then // besser so
True und false sind zwar in Delphi als Konstanten definiert (true = 1, false = 0), aber es ist nicht gesagt, dass ein boolsches Funktionsergebnis sich unbedingt daran hält.
Meist wird <> 0 als true und = 0 als false angesehen.
(Ok, in diesem Beispiel ist die Wahrscheinlichkeit das es schiefgeht natürlich gering).
Für meinen Geschmack ist die zweite Variante auch lesbarer.

Udo 23. Jan 2003 22:56

Delphi-Quellcode:
tf:= Application.FindComponent('test') as TForm2;
So was ist schlecht. Wenn etwas gefunden wird was test heisst aber nicht vom Type TForm ist fliegt die das um die Ohren.
Besser:
Delphi-Quellcode:
var C: TComponent;
begin
   C:= TForm(Application.FindComponent('test'));
   if C = nil then
   begin
     Application.CreateForm(TForm, Form2);
     Form2.Name:= 'test';
     Form2.Show;
   end
   else
     if C is TForm then
       with C as TForm do Height:= 300;
end;
:dancer:

hitzi 24. Jan 2003 14:43

Danke für die Tipps. :D Werde den Quellcode dem entsprechend abändern.

MfG Hitzi


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