![]() |
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 |
@hitzi!
sorry, ich hatte dein posting nicht richtig verstanden, sonst hätte ich nicht nochmal gefragt. auf die uhrzeit kann ich mich auch nicht ausreden (17:57), vielleicht sollte ich mich doch um eine brille umsehen :D mfg, stefan |
ich hab noch en problem mit findcomponent.
ich hab folgendes geschrieben:
Delphi-Quellcode:
es funktioniert aba irgendwie net. kann mir einer sagen was da falsch is?
procedure TForm1.Button11Click(Sender: TObject);
var i: integer; begin if edit15.text='' then begin for i:=6 to 10 do begin If (FindComponent('label'+IntToStr(i)) as TLabel).caption='1' then If (FindComponent('label'+IntToStr(i)) as TLabel).caption='2' then if (FindComponent('label'+IntToStr(i)) as TLabel).caption='3' then if (FindComponent('label'+IntToStr(i)) as TLabel).caption='4' then begin disable; Button1.Enabled:=true; editnummer.Text:='0'; Edit15.Text:='30'; end; end; end; end; [edit=Daniel B]Delphi-Tags eingefügt. MfG Daniel B.[/edit] |
Moin Hellwalker,
zum Einen: Was funktioniert nicht? zum Anderen: Wenn Du Dir eine Variable deklarierst, Typ TLabel, und FindComponent immer dieser zuordnest, musst Du nur einmal zu Beginn jedes Schleifendurchlaufes FindComponent aufrufen, und kannst ansonsten mit der Variablen arbeiten. |
ich hab jetzt mal den labels die caption 1 bis 4 gegeben. wenn ich jetzt aber auf de button klicke passiert eben nich was passieren soll. er macht nämlich gar nix. was is da der fehler?
|
Moin Hellwalker,
ich seh's gerade: Es kann auch nichts passieren, denn so wie Du abfragst muss die Caption gleich 1, gleich 2, gleich 3 und gleich 4 sein. Die Verwendung von else könnte helfen. |
aba so wie es da steht muss es doch net des gleiche label sein oder???
is soll ja entweder label6, 7, 8, 9 oder label10 sein. was muss ich dann ändern? |
Moin Hellwalker,
so wie es da steht ist es immer das gleiche Label, da ja immer IntToStr(i) zum Namen hinzugefügt wird. Könntest Du mal kurz erklären, was Du mit der Abfrage bezweckst? Es klingt so, als würde sich das nicht mit einer Schleife lösen lassen können (zumindest nicht mit so einer). |
Re: FindComponent Frage
Probier es doch mal so:
Delphi-Quellcode:
if TLabel(FindComponent('Label' + IntToStr(I))).Caption = '1' then blablabla....
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:39 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