Einzelnen Beitrag anzeigen

Benutzerbild von dor557
dor557

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

Re: Fenster erstellt bzw. sichtbar !?

  Alt 20. Apr 2007, 04:17
Ich denke ich habe das Problem Gefunden.

Ich kann ja nicht auf die Variablen in der ersten instanz zugreifen richtig ??

Falls ja dann müsste ich wissen wie !!

die momentane basis ist folgender Code :

Delphi-Quellcode:
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];
     MainForm.AuswahlPanel.Visible := false;
if xmlDatenF = nil then
     begin
       xmlDatenF := TxmlDatenF.create(Application);
       xmlDatenF.Show;
    end
else
    begin
      MessageDlg('xmlDatenF ist nicht nil',mtInformation , [mbOK],0);
      xmlDatenF := TxmlDatenF.create(Application);
      xmlDatenF.Show;
    end;
   end;
end;

{ Eine zweite Instanz hat uns ihre Kommandozeilenparameter geschickt }
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;

{----------------------------------------------------------------------------}
{ Wir überschreiben den DefaultHandler, der alle Nachrichten zuerst bekommt, }
{ damit wir auf die Nachricht mit der ID SecondInstMsgId reagieren können.   }
{ (Dies ist notwendig, da wir jetzt noch nicht wissen welchen Wert           }
{  die ID haben wird, weswegen wir keine statische Message-Prozedure,        }
{  so wie bei WM_COPYDATA, schreiben können.)                                }
{----------------------------------------------------------------------------}
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 TMainForm.FormShow(Sender: TObject);
var
  lpData: Pointer;
  cbData: DWORD;
begin
  lpData := ParamStrToBlob(cbData);
  try
    ProcessCommandline(lpData);
  finally
    FreeMemory(lpData);
  end;
end;
Der Fehler passiert wenn das XMLDatenF mit release geschlossen werden soll und nicht nil ist ! also im klartext mit folgendem code bekomme ich die meldung :

  XMLDatenF.Release; wahlweise auch Destroy...

das ist egal.....

Bekomme die meldung dann immer wenn ich XMLDatenF.Release schreibe.

in der OnClick anweisung muss ich ohne XMLDatenF den befehl Release machen ansonsten bekomme ich die gleiche Fehlermeldung.

Anscheinend muss die Frage also lauten wie kann ich ein Fenster mit Release schliessen ohne das XMLDatenF bzw. den Formularnamen zu benutzen !?

Gruss Sascha
Sascha Nickel
  Mit Zitat antworten Zitat