![]() |
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:
MfG Hitzi
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; [edit=Daniel B]Delphi-Tags eingefügt. MfG Daniel B.[/edit] |
Fehler gefunden.
self muss in application geändert werden beim create. MfG Hitzi |
Erst denken, dann posten.
|
Zitat:
? 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 |
[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] |
hallo hitzi!
Zitat:
mfg, gf |
Auszug:
whith TForm2.create(self) do begin ändern in whith TForm2.create(application) do begin So siehts dann aus:
Delphi-Quellcode:
MfG Hitzi
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; |
Moin Hitzi,
noch ein kleiner Tip: Frage bei einem boolschen Vergleich niemals nach true oder false ab. Beispiel:
Delphi-Quellcode:
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.
if Assigned(tf) = false then // sollte man nicht machen
if not Assigned(tf) then // besser so 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. |
Delphi-Quellcode:
So was ist schlecht. Wenn etwas gefunden wird was test heisst aber nicht vom Type TForm ist fliegt die das um die Ohren.
tf:= Application.FindComponent('test') as TForm2;
Besser:
Delphi-Quellcode:
:dancer:
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; |
Danke für die Tipps. :D Werde den Quellcode dem entsprechend abändern.
MfG Hitzi |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz