Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Form soll Kontrolle übenehmen (https://www.delphipraxis.net/168419-form-soll-kontrolle-uebenehmen.html)

volkergeorg 20. Mai 2012 19:54

Form soll Kontrolle übenehmen
 
Hallo,
ich rufe mit ShellExecute 2 PDF-Reader auf und öffne 2 verschiedene ca. 200 MB große PDF-Dateien auf einer bestimmten Seite.
Das klappt alles gut. Jetzt soll meine Anwendung wieder die Kontrolle übernehmen. Das erreiche ich mit SetForeground. Wenn die PDF-Datein noch nicht ganz geöffnet
sind, also die Reader noch arbeiten, gehen diese immer wieder in den Vordergrund. Die Ladezeiten der PDF-Datein sind unterschiedlich. Dadurch ist eine Lösung über eine
Programmpause nicht optimal. Die Ladezeit iat ja auch von der Rechnergeschwindigkeit abhängig. Ich kann zwar über das HANDLE prüfen ob die PDF-Reader laufen und dann
mein Programm mit SetForeGround aktiv machen, dann sind aber oft noch nicht die PDF-Datein geladen und die Reader übernehmen wieder die Kontrolle. Bei einer Maussteuerung meines Programms ist das nicht wichtig, da das Formular ja sichtbar ist. Das Prgramm soll aber auch ausschliesslich mit der Tastatur bedienbar sein und da muss es nicht nur sichtbar, sondern auch aktiv sein. Gibt es eine Möglichkeit?:oops:

Furtbichler 21. Mai 2012 08:04

AW: Form soll Kontrolle übenehmen
 
Einfach alle 100ms 'SetForeground' aufrufen bzw. prüfen, ob das eigene Fenster aktiv ist?

"Topmost" ist auch ein Kandidat.

Luckie 21. Mai 2012 08:21

AW: Form soll Kontrolle übenehmen
 
Es gibt eine Funktion oder Nachricht, die einem sagt, ob ein Prozess gerade beschäftigt ist oder nicht. Wenn die Reader die PDFs fertig geladen haben, sollten sie nicht mehr beschäftigt sein. leider fällt mir der Name der Funktion/Nachricht im Moment nicht ein.

DeddyH 21. Mai 2012 08:27

AW: Form soll Kontrolle übenehmen
 
Hilft das hier weiter: http://www.delphi-forum.de/viewtopic...=460553#460553?

himitsu 21. Mai 2012 09:46

AW: Form soll Kontrolle übenehmen
 
Wozu öffnest du diese Programme/PDFs, wenn sie dann keiner lesen darf?
PS: Man kann PDFs auch in einem TOleContainer, innerhalb des eigenen Programms laden.



Im Programm wird eine Message gesendet, wenn das eigene Programm den Eingabefokus verliert.

Timer:
Aber wer sagt dir, daß dann keiner der Kunden in der Titelleiste auf eines der PDFs geklickt hat, weil er das lesen will?
Währe doch sehr nett, wenn dann ständig soein blödes Programm sich immer wieder in den Fordergrund holt.

volkergeorg 21. Mai 2012 09:59

AW: Form soll Kontrolle übenehmen
 
Danke für Eure Hilfe,
DaddyH, Dein Link sieht sehr interessant aus, werde ihn auspropieren.

Hallo Himitsu, Du kennst das Programm nicht. Für den Nutzer ist in diesem Fall nur die angezeigte Seite von Interese und er möchte dann
über das aktive Form das Programm in seinem Ablauf weiter steuern. Trotzdem danke für Deine Antwort.

Wenn es klappt, melde ich Erfolg.

Danke

himitsu 21. Mai 2012 10:08

AW: Form soll Kontrolle übenehmen
 
Natürlich kenn ich es nicht.
Hat uns schließlich noch niemand verraten, warum die PDFs unbedingt im Hintergrund offen sein müssen. :zwinker:


Aber wie gesagt, der Timer ist keine gute Lösung
und es gibt ein Event (OnDeactivate in TApplicationEvents oder notfalls in Application), welches natürlich immer gefeuert wird, wenn sich ein anderes Programm den Fokus mopst (ausversehn, oder weil es der Benutzer so wollte).

Und es gibt die ActiveX-Variante.

DP-Maintenance 21. Mai 2012 13:27

Dieses Thema wurde am "21. May 2012, 13:27 Uhr" von "TBx" aus dem Forum "Neuen Beitrag zur Code-Library hinzufügen" in das Forum "Programmieren allgemein" verschoben.

volkergeorg 24. Mai 2012 16:08

AW: Form soll Kontrolle übenehmen
 
Danke himitsu

volkergeorg 24. Mai 2012 16:31

AW: Form soll Kontrolle übenehmen
 
Hallo himitsu,
ich habe mein Problem gelöst mit OnDeactivate in TApplicationEvents.
Danke für Deinen Tip, geht wunderbar.
Danke aber auch an alle anderen, für Ihre Tips.

Volker


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:55 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