Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Focus auf eigene Anwendung nicht verlieren (https://www.delphipraxis.net/176793-focus-auf-eigene-anwendung-nicht-verlieren.html)

erich.wanker 26. Sep 2013 16:51

Focus auf eigene Anwendung nicht verlieren
 
Hallo :-)

ein lt. Suche schon viel diskutiertes Thema - aber leider finde ich keine Lösung :oops:

Eine ganz simple Situation:

Ich hab in Form1 ein edit1. Wenn nun eine zweistellige Zahl in diesem Edit eingegeben wird soll eine Internetseite "www.test.de?wert="+edit1.text im Hintergrund mit dem User-Standardbrowser aufgerufen werden..


Alles kein Problem .. bis auf den Focus .. der wird nach dem shellexecute auf den Browser verlegt .. und egal was ich mache .. ich bekomm den focus nicht zurück ... oder anders: ich kann ihn nicht behalten:-(


(P.S.: der user soll einfach zahlenpaare eingeben .. wenn der user schnelle eingaben macht dann öffnen sich dementsprechend viele Tabs im Browser .. aber der user soll nicht warten bis eine der Eingaben "fertig geladen" wurde)


Vielen Dank für Hinweise
Erich

musicman56 26. Sep 2013 17:17

AW: Focus auf eigene Anwendung nicht verlieren
 
FormStyle ==> fsStayOnTop müsste klappen

sx2008 26. Sep 2013 18:03

AW: Focus auf eigene Anwendung nicht verlieren
 
Der ShellExecute() Funktion übergibst du wahrscheinlich den Parameter SW_SHOW.
Versuch's mal mit SW_SHOWNOACTIVATE.

erich.wanker 26. Sep 2013 20:42

AW: Focus auf eigene Anwendung nicht verlieren
 
danke für die Hinweise ... der Browser nimmt aber immer noch den Fokus von meinem Programm.

Puke 26. Sep 2013 21:06

AW: Focus auf eigene Anwendung nicht verlieren
 
Könnte man nicht im Prinzip nach dem Delphi-Referenz durchsuchenShellExecute einfach den Focus mithilfe von Delphi-Referenz durchsuchenSetFocus wieder auf das Formular setzen? ( währe auch nicht die optimale Lösung )

Gruß Puke

Neutral General 26. Sep 2013 21:15

AW: Focus auf eigene Anwendung nicht verlieren
 
Zitat:

Zitat von Puke (Beitrag 1230083)
Könnte man nicht im Prinzip nach dem Delphi-Referenz durchsuchenShellExecute einfach den Focus mithilfe von Delphi-Referenz durchsuchenSetFocus wieder auf das Formular setzen? ( währe auch nicht die optimale Lösung )

Gruß Puke

Ich denke das wird maximal sehr unzuverlässig funktionieren weil die Anwendung wahrscheinlich nicht direkt nach dem Shellexecute den Focus verliert sondern vllt. erst ne (halbe) Sekunde später wenn das Programm bzw dessen GUI dann auch geladen ist.
Von daher wird das eigene Programm zu früh versuchen den Focus wieder zu erhalten und dann verliert es ihn ne halbe Sekunde später doch.

Kegasetu 26. Sep 2013 21:18

AW: Focus auf eigene Anwendung nicht verlieren
 
entschuldigt das ich hier mein Problem schreibe,
ich brauch eure hilfe ich will in delphie Programme ausführen (wintaste+r) wist ihr wie soetwas geht (ich bin ein Anfänger also lacht ihr jetzt bestimmt)

Medium 27. Sep 2013 00:15

AW: Focus auf eigene Anwendung nicht verlieren
 
Eigentlich macht man eigene Threads für eigene Fragen auf. Hier passt es allerdings dennoch gut hin, denn die Antwort steht bereits 2 Beiträge über deiner Frage, sogar mit Such-Link ins Forum da hat Puke sich wohl verklickt, Hier im Forum suchenShellExecute dürfte passen. ShellExecute ist hier dermaßen oft vertreten, dass du alles nötige (und vermutlich einiges mehr) recht schnell finden müsstest. Bei konkreten Fragen dazu würde ich aber dann besser eigene Themen für die Fragen auf machen. (Und zwar pro Frage einen eigenen, das hilft der Übersicht im Forum ungemein.) Willkommen in der :dp:

erich.wanker 27. Sep 2013 11:00

AW: Focus auf eigene Anwendung nicht verlieren
 
Ich denk ich hab jetzt alles durch ;-)

.. und nichts funktioniert :-(

  • standardgeschichten: setFocus, bringToFront ..
  • shellexecute mit div. Parametern ..
  • ForceForegroundWindow ..
  • Application.Mainform Geschichten ..
  • TWatchFocus ..
  • diverse proceduren die per Timer aufgerufen werden


Ich denke, der Kern des Problems ist der Browser. Sobald ich einen Browser starte, wird der Focus IN den Browser verlegt (DOM) .. ein Druck auf die Tabulatortaste fokusiert das nächste HTML Element..


.. gibt es nicht irgendeine Möglichkeit - einen Browser zu starten und dennoch den Focus in der eigenen Anwendung zu behalten ?

Danke für Hinweise
Erich

Der schöne Günther 27. Sep 2013 11:32

AW: Focus auf eigene Anwendung nicht verlieren
 
Hallo-

Aus Zeitmangel habe ich das Thema nur überflogen. Aber soweit ich es im Hinterkopf habe, darf eine Anwendung sich nicht in den Vordergrund zwängen wenn sie es nicht mehr ist.
Delphi-Quellcode:
SetForegroundWindow(self.Handle)
funktioniert also nicht, wenn der eigene Delphi-Prozess nicht mehr im Vordergrund ist.

Es sei denn, die eigene Anwendung hat zuletzt eine Benutzereingabe bekommen. Der Trick ist, sich selbst eine Eingabe zu schicken. So habe ich es auf einem VCL-Formular einmal gemacht:

Delphi-Quellcode:
uses Winapi.Windows;

var
   Input: TInput;
begin
   // Diese Anwendung in den Vordergrund zwängen
   ZeroMemory(@Input, SizeOf(Input));
   SendInput(1, Input, SizeOf(Input));
   SetForegroundWindow(Handle);


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 Uhr.
Seite 1 von 2  1 2      

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-2025 by Thomas Breitkreuz