AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Formular nicht neu erstellen wenn schon Sichtbar.

Formular nicht neu erstellen wenn schon Sichtbar.

Ein Thema von dor557 · begonnen am 31. Mär 2007 · letzter Beitrag vom 4. Apr 2007
Antwort Antwort
Benutzerbild von dor557
dor557

Registriert seit: 23. Okt 2004
Ort: Walldorf
197 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

Formular nicht neu erstellen wenn schon Sichtbar.

  Alt 31. Mär 2007, 11:14
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
Sascha Nickel
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Formular nicht neu erstellen wenn schon Sichtbar.

  Alt 31. Mär 2007, 11:19
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;
  Mit Zitat antworten Zitat
Hafish

Registriert seit: 22. Mär 2007
37 Beiträge
 
#3

Re: Formular nicht neu erstellen wenn schon Sichtbar.

  Alt 31. Mär 2007, 11:23
Viel zu kompliziert, der Fehler kommt von "TForm1.Showing

Mach mal Form1.Showing draus (also ohne das T), dann sollte es gehen.
  Mit Zitat antworten Zitat
Benutzerbild von dor557
dor557

Registriert seit: 23. Okt 2004
Ort: Walldorf
197 Beiträge
 
Delphi 10.1 Berlin Starter
 
#4

Re: Formular nicht neu erstellen wenn schon Sichtbar.

  Alt 31. Mär 2007, 11:28
auch wenn ich das T weglasse kommt der Fehler....


Ich nehme die variante mit dem Nil

Gruss Sascha Danke !
Sascha Nickel
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Formular nicht neu erstellen wenn schon Sichtbar.

  Alt 31. Mär 2007, 11:33
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von dor557
dor557

Registriert seit: 23. Okt 2004
Ort: Walldorf
197 Beiträge
 
Delphi 10.1 Berlin Starter
 
#6

Re: Formular nicht neu erstellen wenn schon Sichtbar.

  Alt 4. Apr 2007, 12:13
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
Sascha Nickel
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 01:44 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