AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Problem beim Starten von Externer Datei !!
Thema durchsuchen
Ansicht
Themen-Optionen

Problem beim Starten von Externer Datei !!

Ein Thema von dor557 · begonnen am 4. Apr 2007 · letzter Beitrag vom 12. Apr 2007
 
Benutzerbild von dor557
dor557

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

Problem beim Starten von Externer Datei !!

  Alt 4. Apr 2007, 20:40
Ich habe Folgende situation :

Ein Process Formular mit dem Krafischen startbild welches in der dpr wie folgt aufgerufen wird :

Delphi-Quellcode:
  Application.Initialize;

  Startprocess := TStartprocess.Create(Application);
  try
    Application.Title := 'Programmname';
    StartProcess.Show;
    StartProcess.Refresh;
  finally
     StartProcess.hide;
     StartProcess.Free;
     Application.Run;
  end;
Dann habe ich bei der OnHide Procedure folgenden Code eingefügt :

Delphi-Quellcode:
procedure TstartProcess.FormHide(Sender: TObject);
begin
      Reg := TRegistry.Create;
      with Reg do
      begin
        // Lesen der Registry
      end;
      StartProcess.Refresh;
    StartProcess.ProcessLabel.Caption := 'Programm wird gestartet...';
    StartProcess.ProcessLabel.Caption := 'Configuration wird gelesen...';

    try
      Ini:= TIniFile.Create(copy(Paramstr(0),1,length(Paramstr(0))-23)+'\programm.ini');
      binpath := Ini.readString('PATHS','bindir',copy(Paramstr(0),1,length(Paramstr(0))-20));
      dbserver := Ini.ReadString('DB','server','');
      dbpath := Ini.readString('DB','dir',copy(Paramstr(0),1,length(Paramstr(0))-23)+'db');
      bdename := Ini.readString('DB','file','DB.FDB');
    finally
      Ini.Free;
    end;
    StartProcess.ProcessLabel.Caption := 'Verbindung zu Datenbank "'+bdename+'" wird hergestellt.';
    Application.CreateForm(TDaten, Daten);
    with Daten do
    begin
      if dbserver <> 'then
        IBDatabase1.DatabaseName := dbserver + ':' + dbpath + ' \' + bdename
      else IBDatabase1.DatabaseName := dbpath + ' \' + bdename;
      IBDatabase.open;
    end;
    StartProcess.ProcessLabel.Caption := 'Verbindung zu Datenbank "'+bdename+'" wurde hergestellt.';
    Application.CreateForm(TMainForm, MainForm);
    MainForm.Show;
    if (length(MainForm.RichEdit1.Lines[0]) > 1) then
    begin
     MainForm.XMLopenF.FileName := MainForm.RichEdit1.Lines[0];
     if not (FrachtbriefDrucken = nil) then
      try
       if Assigned(FrachtbriefDrucken) then
         FrachtbriefDrucken.Release;
      except
        on E: Exception do MessageDlg(E.Message, mtError, [mbOK],0);
      end;
     xmlDatenF := TxmlDatenF.create(Application);
     xmlDatenF.Show;
    end else
    begin
      AuswahlForm := TAuswahlForm.Create(Application);
      AuswahlForm.Show;
    end;

      if not (AuswahlForm = nil) then
      try
       if Assigned(AuswahlForm) then
         AuswahlForm.Release;
      except
        on E: Exception do MessageDlg(E.Message, mtError, [mbOK],0);
      end;
end;
Nun in der AuswahlForm.FormShow ist folgender Code :

Delphi-Quellcode:
   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;
      except
        on E: Exception do MessageDlg(E.Message, mtError, [mbOK],0);
      end;
     xmlDatenF := TxmlDatenF.create(MainForm);
     xmlDatenF.Show;
     AuswahlForm.Release;
   end;
In dem main Formular was Oben bei der StartProcess.FormHide wird ja das Haupt Formular erstellt was ein fsMDI formular ist erstellt und angezeigt.

Bei der Main.FormShow procedure steht folgendes :

Delphi-Quellcode:
procedure TMainForm.FormShow(Sender: TObject);
var
  lpData: Pointer;
  cbData: DWORD;
begin
  lpData := ParamStrToBlob(cbData);
  try
    ProcessCommandline(lpData);
  finally
    FreeMemory(lpData);
  end;
end;
in der Gleichen Unit noch folgende Funktionen die dazu gebraucht werden damit ich auch Extern die Datei öffnen kann :

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];
     if not (FrachtbriefDrucken = nil) then
      try
       if Assigned(FrachtbriefDrucken) then
         FrachtbriefDrucken.Release;
      except
        on E: Exception do MessageDlg(E.Message, mtError, [mbOK],0);
      end;
     xmlDatenF := TxmlDatenF.create(Application);
     xmlDatenF.Show;
   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;
Das ergebnis ist das ich Wenn das Programm schon läuft nicht wirklich ein Problem habe. Er erstellt das XMLDatenF Formular und liesst die daten ein wie er soll.

Nun wenn das Prgramm erst gestartet wird macht er das auch aber das Formular wird nicht in der Mitte wie im ObjectInspector (ScreenCenter) dargestellt sondern einfach links oben in der ecke.

das ist der Erste Fehler.

Der Zweite ist das das AuswahlForm nicht geschlossen wird sondern Trotzdessen angezeigt wird.

Sobald ich mit ShowModal das xmlDatenF öffnen will bekomme ich eine Fehlermeldung!!

das xmlDatenF ist ein MDIChild
das auswahlF auch.


Wie kann ich aus der Procedure den besten und einfachsten weg nehmen das er Egal ob das Programm läuft oder nicht das xmlDatenF erstellt und das AsuwahlForm schlisst....
Habe es in der FormShow procedure versucht unterzubringen nur da bekomme ich wieder einen Fehler...

Die Info wie ich Dateien öffnen kann habe ich aus dem OneInst Projekt.

http://www.michael-puff.de/dirindex..../Importe/Nico/ -> oneinst.zip

wie gesagt wenn das Programm läuft ist das super... nur wie bekomme ich Meine Oben beschriebenen Fehler weg.

Hat da jemand eine Lösung ????

Gruss Sascha
Sascha Nickel
  Mit Zitat antworten Zitat
 


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 07:11 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