AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

FindComponent Frage

Ein Thema von hitzi · begonnen am 14. Jan 2003 · letzter Beitrag vom 27. Jul 2003
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von hitzi
hitzi

Registriert seit: 2. Jan 2003
Ort: Eibau
768 Beiträge
 
Delphi 2010 Professional
 
#1

FindComponent Frage

  Alt 14. Jan 2003, 11:39
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]
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von hitzi
hitzi

Registriert seit: 2. Jan 2003
Ort: Eibau
768 Beiträge
 
Delphi 2010 Professional
 
#2
  Alt 14. Jan 2003, 11:52
Fehler gefunden.

self muss in application geändert werden beim create.

MfG Hitzi
Thomas
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3
  Alt 14. Jan 2003, 11:55
Erst denken, dann posten.
  Mit Zitat antworten Zitat
Benutzerbild von hitzi
hitzi

Registriert seit: 2. Jan 2003
Ort: Eibau
768 Beiträge
 
Delphi 2010 Professional
 
#4
  Alt 14. Jan 2003, 12:36
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
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von RomanK
RomanK

Registriert seit: 7. Jun 2002
Ort: Kirchheim unter Teck
1.036 Beiträge
 
Delphi 7 Personal
 
#5
  Alt 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]
Roman Keller
Krieg ist Gottes Art den Amerikanern Geographie beizubringen!
  Mit Zitat antworten Zitat
grayfox

Registriert seit: 22. Jan 2003
Ort: Litschau
173 Beiträge
 
Delphi 4 Standard
 
#6
  Alt 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
  Mit Zitat antworten Zitat
Benutzerbild von hitzi
hitzi

Registriert seit: 2. Jan 2003
Ort: Eibau
768 Beiträge
 
Delphi 2010 Professional
 
#7
  Alt 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
Thomas
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#8
  Alt 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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Udo

Registriert seit: 19. Jan 2003
54 Beiträge
 
Delphi 8 Architect
 
#9
  Alt 23. Jan 2003, 22:56
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;
  Mit Zitat antworten Zitat
Benutzerbild von hitzi
hitzi

Registriert seit: 2. Jan 2003
Ort: Eibau
768 Beiträge
 
Delphi 2010 Professional
 
#10
  Alt 24. Jan 2003, 14:43
Danke für die Tipps. Werde den Quellcode dem entsprechend abändern.

MfG Hitzi
Thomas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:24 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