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 Formular nicht neu erstellen wenn schon Sichtbar. (https://www.delphipraxis.net/89454-formular-nicht-neu-erstellen-wenn-schon-sichtbar.html)

dor557 31. Mär 2007 11:14


Formular nicht neu erstellen wenn schon Sichtbar.
 
Ich habe ein Problem.

Wenn ich überprüfen möchte ob ein Formular schon sichtbar ist dachte ich könnte ich das mi

Delphi-Quellcode:
if not TForm1.Showing then
begin
  Form1 := TForm1.Create(self);
  Form1.Show;
end;
aber da bekomme ich eine Fehlermeldung.

Ich schätze mal das kommt daher das er Keine Eigenschaft finden kann wenn das Formular noch nicht mit Create erstellt wurde.

Nun wie kann ich dann überprüfen ob das schon Existiert. Denn ich schliesse die Formulare immer mit Release;

Danke für Jede Antwort.

Gruss Sascha

Die Muhkuh 31. Mär 2007 11:19

Re: Formular nicht neu erstellen wenn schon Sichtbar.
 
Hi,

Delphi-Quellcode:
if Form1 = nil then
begin
  Form1 := TForm1.Create(self);
  Form1.Show;
end;

// oder
if not Assigned(Form1) then
begin
  Form1 := TForm1.Create(self);
  Form1.Show;
end;

Hafish 31. Mär 2007 11:23

Re: Formular nicht neu erstellen wenn schon Sichtbar.
 
Viel zu kompliziert, der Fehler kommt von "TForm1.Showing

Mach mal Form1.Showing draus (also ohne das T), dann sollte es gehen.

dor557 31. Mär 2007 11:28

Re: Formular nicht neu erstellen wenn schon Sichtbar.
 
auch wenn ich das T weglasse kommt der Fehler....


Ich nehme die variante mit dem Nil :)

Gruss Sascha Danke !

SirThornberry 31. Mär 2007 11:33

Re: Formular nicht neu erstellen wenn schon Sichtbar.
 
klar das da ein Fehler kommt. Weil es eben einen unterschied zwischen "erzeugt" und "sichtbar" gibt. Du kannst nicht prüfen ob ein Formular sichtbar ist wenn es gar nicht exisitiert. Anders herum kann es natürlich auch sein das, das Form existiert aber nicht sichtbar ist.

dor557 4. Apr 2007 12:13

Re: Formular nicht neu erstellen wenn schon Sichtbar.
 
Folgenden Code habe ich geschrieben bzw. abgeändert aus einem anderen Thread wie man eine Externe Datei öffnen kann auch wenn das Programm läuft.

Diese Sache Funktioniert auch !!!

Delphi-Quellcode:
procedure TMainForm.FormShow(Sender: TObject);
var
  lpData: Pointer;
  cbData: DWORD;
begin
  lpData := ParamStrToBlob(cbData);
  try
    ProcessCommandline(lpData);
  finally
    FreeMemory(lpData);
  end;

end;

procedure TMainForm.WMCopyData(var Msg: TWMCopyData);
begin
  if (Msg.CopyDataStruct.dwData = SecondInstMsgId) and (SecondInstMsgId <> 0) then
    ProcessCommandline(Msg.CopyDataStruct.lpData)
  else
    { Tcha wohl doch nicht ID - stimmte nicht }
    inherited;
end;

procedure TMainForm.DefaultHandler(var Message);
begin
  if TMessage(Message).Msg = SecondInstMsgId then
    { Eine zweite Instanz hat uns nach dem Handle gefragt }
    { Es wird in die Message-Queue des Threads gepostet. }
    PostThreadMessage(TMessage(Message).WParam, SecondInstMsgId, Handle, 0)
  else
    { Ansonsten rufen wir die geerbte Methode auf }
    inherited;
end;

procedure ProcessCommandline(lpData: Pointer);
begin
   MainForm.RichEdit1.Lines.Clear;
   MainForm.RichEdit1.text := ParamBlobToStr(lpData);
   if not (length(MainForm.RichEdit1.Lines[0]) > 1) then
   begin
     MainForm.RichEdit1.Lines.Add(ParamStr(1));
   end;
   if (length(MainForm.RichEdit1.lines[0]) > 2) then
   begin
     MainForm.XMLopenF.FileName := MainForm.RichEdit1.Lines[0];
     if not (FrachtbriefDrucken = nil) then
      try
       if Assigned(FrachtbriefDrucken) then
         FrachtbriefDrucken.Release;
      finally

      end;
     xmlDatenF := TxmlDatenF.create(AuswahlForm);
     xmlDatenF.Show;
   end;
end;
aber ich bekomme nicht die Möglichkeit das auch Dann das xmlDatenF Formular erstellt wird wenn das Programm noch nicht am laufen ist. Woran liegt denn da der Fehler ???

Oder wo in der Procedure muss ich das noch einfügen ??

Gruss sascha


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