![]() |
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:
aber da bekomme ich eine Fehlermeldung.
if not TForm1.Showing then
begin Form1 := TForm1.Create(self); Form1.Show; end; 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 |
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; |
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. |
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 ! |
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.
|
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:
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 ???
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; Oder wo in der Procedure muss ich das noch einfügen ?? Gruss sascha |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:27 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 by Thomas Breitkreuz