Delphi-PRAXiS

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);

EWeiss 27. Sep 2013 12:42

AW: Focus auf eigene Anwendung nicht verlieren
 
ok dann halt nicht.

gruss

erich.wanker 27. Sep 2013 13:01

AW: Focus auf eigene Anwendung nicht verlieren
 
..der andere Prozess ist z.b.: der Chrome Browser ..

und da sind schon viele "Steps" .. der Browser .. und dann die zu ladende Seite ..

..aber auf das will ich ja während der Eingabe nicht warten ;-) - der Chrome soll einen Tab nach dem anderen rausklotzen, während der User ungebremst seine Eingaben (und die dadurch generierten Aufrufe) macht.

sx2008 27. Sep 2013 13:07

AW: Focus auf eigene Anwendung nicht verlieren
 
Was passiert denn wenn du anstelle von Chrom zum Beispiel das Notepad oder den Calculator startest?
Hintergrund der Frage ist herauszufinden ob Chrome irgendwelche Schweinereien mit dem Focus macht die normale Anwendungen nicht machen.

Klaus01 27. Sep 2013 13:11

AW: Focus auf eigene Anwendung nicht verlieren
 
.. nun ein Browser ist ja eingetlich eine Ding, das etwas darstellen soll.
Damit der User auch was sieht, geht der Browser in den Vordergrund.

Kannst Du Deine Seitenabfragen nicht mit einer nicht visuellen Komponente durchführen?

Grüße
Klaus

erich.wanker 27. Sep 2013 13:12

AW: Focus auf eigene Anwendung nicht verlieren
 
sx2008: .. der focus geht an calc.exe :-(

Klaus01: .. der vom User eingestellte Standardbrowser ist das "Ziel" für die Darstellung

EWeiss 27. Sep 2013 13:18

AW: Focus auf eigene Anwendung nicht verlieren
 
scheint ja erledigt zu sein

gruss

erich.wanker 27. Sep 2013 13:25

AW: Focus auf eigene Anwendung nicht verlieren
 
zwischenzeitlich hab ich es "ganz fürchterlich grauslig" zum laufen gebracht .. :twisted:

.. naja :pale: ... mit mehrfachen!!? Mausklicks via Timer in mein Fenster ..

Delphi-Quellcode:
  private
    durchlauf:Integer;


procedure TForm1.Edit1Change(Sender: TObject);
begin

      if length(edit1.Text) = 12 then
      begin
        ShellExecute(Form1.Handle, 'open', pchar('http://www.domain.suffix:81/isapi.dll?wert='+edit1.Text), nil, nil, SW_SHOWNOACTIVATE);
        edit1.Text:='';
        timer1.Enabled:=true;
      end;


      if length(edit1.Text) > 12 then
      begin
        edit1.Text:='';
      end;

end;




procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
      if not (Key in ['0'..'9', Char(VK_BACK)]) then Key := #0;
end;



procedure TForm1.Timer1Timer(Sender: TObject);
begin

if durchlauf < 10 then
      begin
        SetCursorPos(form1.Left+100,form1.Top+100);
        mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
        durchlauf:=durchlauf+1;
      end
      else
      begin
        timer1.Enabled:=false;
        durchlauf:=0;
      end;
end;




procedure TForm1.FormCreate(Sender: TObject);
begin
durchlauf:=0;
end;

end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:37 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-2025 by Thomas Breitkreuz