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;