Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Externe Anwendung starten + ProgressBar (https://www.delphipraxis.net/137784-externe-anwendung-starten-progressbar.html)

PanFan 28. Jul 2009 17:48


Externe Anwendung starten + ProgressBar
 
Hallo Experten,

ich bin nicht mehr der jüngste und etwas schwer von Begriff, aber für Euch ist das mit Sicherheit ein Klacks.

Ich möchte in meinem Programm per Button-Klick eine *.pps öffnen und mittels ProgressBar den Ladezustand anzeigen. Die ProgressBar soll sich in einem eigenen Fenster befinden, welches danach auch wieder verschwindet.

Das ist eigentlich etwas, das es heute in jeder kleinen Anwendung gibt aber ich bringe es einfach nicht zusammen.

Kann mir jemand ein Beispiel zum abgucken zukommen lassen?

Gruß
Peter

achso...ich benutze Delphi 4

himitsu 28. Jul 2009 18:40

Re: Externe Anwendung starten + ProgressBar
 
also die .pps kannst du einfach per ShellExecute öffnen ... dieses sucht sich schon das passende Programm raus, startet es und übergibt ihm den Dateinamen.
> soviel zum externen Öffnen

aber das mit dem Ladebalken wird schwerer/unmöglich,
denn wenn ein anderes Programm die Datei öffnet, dann weiß dein Programm ja nicht wie weit das andere ist (abgesehn davon das andere Programm hat eine passende Schnittstelle, wo dein Programm dann danach fragen kann)

sx2008 28. Jul 2009 19:07

Re: Externe Anwendung starten + ProgressBar
 
Man könnte mit WaitForInputIdle() warten, bis der Prozess bereit für Eingaben ist:
Delphi-Quellcode:
uses ..., ShellApi;
function ShellExecBlocking(const FileName: string; const Parameters: string;
  const Verb: string; CmdShow: Integer; const Directory: string): Boolean;
var
  Sei: TShellExecuteInfo;
  Res: LongBool;
  Msg: tagMSG;
begin
  FillChar(Sei, SizeOf(Sei), #0);
  Sei.cbSize := SizeOf(Sei);
  Sei.fMask := SEE_MASK_DOENVSUBST or SEE_MASK_FLAG_NO_UI or SEE_MASK_NOCLOSEPROCESS or
    SEE_MASK_FLAG_DDEWAIT;
  Sei.lpFile := PChar(FileName);
  Sei.lpParameters := PCharOrNil(Parameters);
  Sei.lpVerb := PCharOrNil(Verb);
  Sei.nShow := CmdShow;
  Sei.lpDirectory := PCharOrNil(Directory);
  Result := ShellExecuteEx(@Sei);
  if Result then
  begin
    WaitForInputIdle(Sei.hProcess, INFINITE);
    CloseHandle(Sei.hProcess);
  end;
end;
Aber ein Progressbar ist so gut wie unmöglich, da nich absehbar ist, wie lange der Vorgang dauern wird.

PanFan 28. Jul 2009 19:17

Re: Externe Anwendung starten + ProgressBar
 
jo, ShellExecute verwende ich auch dafür und das funzt problemlos. Aber eben den Fortschritt des "anderen" Programms abzufragen bringe ich nicht zusammen. Die PPS, die ich laden möchte ist 250MB schwer und das dauert, zumindest beim ersten Mal, eine Weile. Und damit der User sieht was los ist, möchte ich eben diesen Fortschritt anzeigen.

Eine andere Möglichkeit ist die Anzeige eines einfachen Fensters mit z.B.: "Moment bitte, Anwendung wird geladen...". Aber auch damit komme ich nicht weiter. Entweder wird es viel zu früh wieder geschlossen oder es geht garnicht weil die Fehlermeldung kommt, daß die Eigenschaft Visible bei OnShow und OnHide nicht verändert werden kann.

Gruß
Peter

PanFan 28. Jul 2009 19:22

Re: Externe Anwendung starten + ProgressBar
 
Danke sx2008, das wäre vielleicht eine Idee für das Wartefenster. Muß ich mal probieren.

hathor 28. Jul 2009 19:34

Re: Externe Anwendung starten + ProgressBar
 
Kann man mit der Abfrage nach dem Cursor-Aussehen etwas anfangen?
Stichwort: Sanduhr...WM_???CURSOR...

Bernhard Geyer 28. Jul 2009 19:35

Re: Externe Anwendung starten + ProgressBar
 
Zitat:

Zitat von PanFan
Die PPS, die ich laden möchte ist 250MB schwer und das dauert, zumindest beim ersten Mal, eine Weile. Und damit der User sieht was los ist, möchte ich eben diesen Fortschritt anzeigen.

Liegt wohl daran das diese Datei (mindestens Teilweise) in den Windows Filecache geladen werden muss. Du könntest also primitiv vor dem Laden mit PP die Datei mit einem TFileStream pseudomäßig laden. Und dort weist du ja wo du gerade mit dem laden bist.

PanFan 29. Jul 2009 11:15

Re: Externe Anwendung starten + ProgressBar
 
und wie sieht das dann aus?

Luckie 29. Jul 2009 11:21

Re: Externe Anwendung starten + ProgressBar
 
Zitat:

Zitat von hathor
Kann man mit der Abfrage nach dem Cursor-Aussehen etwas anfangen?
Stichwort: Sanduhr...WM_???CURSOR...

Und wenn der Benuttzer die Maus über ein anderes fenster bewegt, ändert sich der Mauszeiger wieder.

@Bernahrd: Wie stellst du dir das vor? Das habe ich jetzt nicht so gant verstanden.

sx2008 29. Jul 2009 20:33

Re: Externe Anwendung starten + ProgressBar
 
Es gäbe da noch zwei andere Möglichkeiten:
1.) Anstatt Powerpoint wird der Powerpoint-Viewer gestartet.
download: http://www.microsoft.com/DOWNLOADS/d...displaylang=de
Während Powerpoint ja eine recht "fette" Anwendung ist, ist der Viewer relativ schlank und sollte schnell geladen sein
Ich gehe mal davon aus, dass du nur die Presentation vorführen möchtest.
2.) Powerpoint hat umfangreiche Automatisierungs-Schnittstellen.
Man kann also Powerpoint.Application starten, dann die PPS-Datei laden und dann die Präsentation starten.
So ist es möglich, dem Benutzer zumindest grob zu sagen, was gerade passiert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:49 Uhr.
Seite 1 von 2  1 2      

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