Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Fenster soll im geöffneten Browser über dem Browser stehen (https://www.delphipraxis.net/200651-delphi-fenster-soll-im-geoeffneten-browser-ueber-dem-browser-stehen.html)

oldmann 12. Mai 2019 13:00

Delphi Fenster soll im geöffneten Browser über dem Browser stehen
 
Hallo,

ich möchte ein geöffnetes Delphi Fenster über einem geöffneten Browserfenster anzeigen.
Das Delphifenster soll stabil über dem Browserfenster stehen, so das man Daten z.B. Passwörter im Browser einfügen kann.:cry:
Wer kann hier helfen ??

Gruß Oldmann

jaenicke 12. Mai 2019 14:06

AW: Delphi Fenster soll im geöffneten Browser über dem Browser stehen
 
FormStyle auf fsStayOnTop sollte schon reichen, aber sinnvoller wäre denke ich ein Browseraddon, das mit deiner Anwendung kommuniziert...

Das kann dann die Daten auch direkt ausfüllen. Das habe ich gerade erst auch gemacht.

oldmann 13. Mai 2019 09:01

AW: Delphi Fenster soll im geöffneten Browser über dem Browser stehen
 
Hallo jaenicke,

"FSStayOnTop" reicht leider nicht.
Auch nicht "BringToFront".
Die Delphi Anwendung verschwindet immer beim Klick auf eine Website im Browser.
Die Delphi Anwendung soll stabil über alen Anwendunden die aufgerufen werden, stehen.
Gruß oldmann

Jasocul 13. Mai 2019 09:29

AW: Delphi Fenster soll im geöffneten Browser über dem Browser stehen
 
Du musst vermutlich die Methode CreateParams einbinden:
Delphi-Quellcode:
  TForm1 = class(TForm)
  private
    procedure CreateParams(var Params: TCreateParams);override;
  public
    { Public-Deklarationen }
  end;
...
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
  inherited;

  Params.ExStyle := Params.ExStyle or WS_EX_TOPMOST;
  Params.WndParent := 0;
end;

EWeiss 13. Mai 2019 09:35

AW: Delphi Fenster soll im geöffneten Browser über dem Browser stehen
 
Zitat:

Zitat von Jasocul (Beitrag 1432053)
Du musst vermutlich die Methode CreateParams einbinden:
Delphi-Quellcode:
  TForm1 = class(TForm)
  private
    procedure CreateParams(var Params: TCreateParams);override;
  public
    { Public-Deklarationen }
  end;
...
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
  inherited;

  Params.ExStyle := Params.ExStyle or WS_EX_TOPMOST;
  Params.WndParent := 0;
end;

Oder SetWindowPos verwenden.. mit den entsprechenden Flags.
Zitat:

Bereits angezeigtes Fenster immer im Vordergrund halten ohne die Position zu verändern:
Delphi-Quellcode:
SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE);


gruss

oldmann 13. Mai 2019 11:57

AW: Delphi Fenster soll im geöffneten Browser über dem Browser stehen
 
Hallo,

erst mal danke für Eure Antworten.
Ich habe nur das große Problem, dass ich nicht weiß wie ich Eure Hinweise in meine Programm anwenden soll.
Es wäre nett, wenn Ihr mir da noch ein wenig Hilfestellung gebt.

Gruß oldmann

Jasocul 13. Mai 2019 12:01

AW: Delphi Fenster soll im geöffneten Browser über dem Browser stehen
 
Zitat:

Zitat von oldmann (Beitrag 1432069)
Ich habe nur das große Problem, dass ich nicht weiß wie ich Eure Hinweise in meine Programm anwenden soll.
Es wäre nett, wenn Ihr mir da noch ein wenig Hilfestellung gebt.

Also bei meinem Ansatz reicht eigentlich Copy&Paste. Ich weiß wirklich nicht, wie ich da mehr Hilfestellung geben kann.

Luckie 13. Mai 2019 12:53

AW: Delphi Fenster soll im geöffneten Browser über dem Browser stehen
 
Was macht denn die Anwendung bzw soll sie machen? Eine Abwendung, die ständig im Vordergrund ist, sollte einen sehr guten Grund dazu haben.

oldmann 13. Mai 2019 13:09

AW: Delphi Fenster soll im geöffneten Browser über dem Browser stehen
 
Hallo,

jetzt klappt das mit dem Fenster.
Beim ersten mal gab es eine Fehlermeldung und ich dachte es müssten noch Variablen eingefügt werden.
Beim zweiten Start klappte es dann.
Also vielen Dank an alle.
Ich möchte Logindaten die in dem geöffneten Delphifenster enthalten sind, einfach per Button in die entsprechende Eingabezeile der Website einfügen.
Das heißt ich setze den Cursor in die Eingabezeile auf der Website und klicke dann in meinem Fenster auf den Button 'Einfügen'.
Ich benutze dazu:
SendText(StringReplace(Edit1.Text,#13#10,#13,[rfReplaceAll]));
Leider klappt das noch nicht.
Vielleicht weiß hier jemand Rat.

Gruß oldmann

jaenicke 13. Mai 2019 13:35

AW: Delphi Fenster soll im geöffneten Browser über dem Browser stehen
 
In dem Moment, in dem du bei dir auf den Knopf drückst, verliert die Webseite den Eingabefokus...
Deshalb sagte ich ja, dass eine Browserextension sinnvoller wäre.

Moombas 13. Mai 2019 14:49

AW: Delphi Fenster soll im geöffneten Browser über dem Browser stehen
 
Ist zwar eine bekloppte Lösung, aber hast du mal probiert vor dem SendText ein Alt+Tab (Fenster wechseln) zu senden.
Also vom Ablauf:
  1. Dein Programm starten
  2. Browser starten
  3. Im Browser auf das zu füllende Feld klicken
  4. In deinem Programm den Button drücken

Wie man Alt+Tab Simuliert: https://www.swissdelphicenter.ch/en/...de.php?id=2103

Theoretisch müsste durch den Alt+Tab er dann zum Browser zurück springen (vom Fokus), das Eingabefeld ist noch als Fokus gesetzt (normalerweise) und somit müsste dein dann ausgeführter Code den Text einfügen. Ggf. musst du mit sleep() arbeiten damit er zur richtigen Zeit deinen Code ausführt und nicht zu früh.
Hab es selber nicht getestet, nur ein dummer Gedanke. Zumal, wenn du dann woanders hin klickst in der Zeit vom sleep() das ganze nicht mehr funktioniert.

Und falls du noch mehr Daten übergeben willst, wäre definitiv die vorgeschlagene Lösung eines Browserplugins die beste Variante.

Delphi.Narium 13. Mai 2019 15:28

AW: Delphi Fenster soll im geöffneten Browser über dem Browser stehen
 
@Moombas Die Idee ist überhaupt nicht bekloppt. Dieses Vorgehen war früher durchaus mal gang und gäbe.

Eine weitere Möglichkeit (muss natürlich entsprechend angepasst werden): How to Send Information (String, Image, Record) Between Two Applications

jaenicke 13. Mai 2019 16:42

AW: Delphi Fenster soll im geöffneten Browser über dem Browser stehen
 
Die saubere Variante ist die, die auch die Bildschirmtastatur geht:
Das Fenster kann den Fokus nicht bekommen.

Ich habe vwrgessen wie das ging... irgendwie WM_ACTIVATEAPP abfangen oder so.

oldmann 13. Mai 2019 18:58

AW: Delphi Fenster soll im geöffneten Browser über dem Browser stehen
 
Hallo Sebastian,

du hast von einer Browserextension geschrieben.
Was ist das ?
Und wie komme ich daran ?
Es wäre Nett, wenn Du mir hier aud die Sprünge helfen könntest.

Eberhard Werner

hoika 13. Mai 2019 19:15

AW: Delphi Fenster soll im geöffneten Browser über dem Browser stehen
 
Hallo,
eine Browserextension ist eine Dll, die dynamisch in den Browser "eingeblendet" wird,
und damit auch Zugriff auf den DOM (das Browserfenster) hat.
Dürfte für dich aber viel zu kompliziert sein (für mich jedenfalls).

Bleib doch einfach mal bei Alt+Tab-Simulieren.

jaenicke 14. Mai 2019 05:27

AW: Delphi Fenster soll im geöffneten Browser über dem Browser stehen
 
Zitat:

Zitat von hoika (Beitrag 1432127)
eine Browserextension ist eine Dll, die dynamisch in den Browser "eingeblendet" wird,
und damit auch Zugriff auf den DOM (das Browserfenster) hat.
Dürfte für dich aber viel zu kompliziert sein (für mich jedenfalls).

Eine DLL würde ich dafür nicht benutzen, viel einfacher ist ein fertiges Grundgerüst einer Erweiterung zu nehmen und mit JavaScript diese mit Leben zu füllen.

Wenn allerdings keine JavaScript Kenntnisse vorhanden sein sollten, würde ich das eher nicht versuchen. Mit JavaScript Kenntnissen ist das nicht so kompliziert wie du dir das offenbar vorstellst.

Zitat:

Zitat von hoika (Beitrag 1432127)
Bleib doch einfach mal bei Alt+Tab-Simulieren.

Das ist die schlechteste Lösung. Sinnvoller wäre zu schauen, dass das Fenster nicht mehr aktivierbar wird, sprich den Eingabefokus nicht bekommen kann.

Das geht sogar sehr einfach, ich habe es kurz ausprobiert:
Delphi-Quellcode:
  TExampleForm = class(TForm)
  ...
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  end;


procedure TExampleForm.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.ExStyle := Params.ExStyle + WS_EX_NOACTIVATE;
end;

Moombas 14. Mai 2019 08:07

AW: Delphi Fenster soll im geöffneten Browser über dem Browser stehen
 
Zitat:

Zitat von jaenicke (Beitrag 1432176)
Zitat:

Zitat von hoika (Beitrag 1432127)
Bleib doch einfach mal bei Alt+Tab-Simulieren.

Das ist die schlechteste Lösung.

Es ging mir nur erstmal darum eine evtl. funktionierende (Quick and dirty) Lösung anzubieten. Das diese bei weitem nicht eine schöne Lösung ist, sollte klar sein.

Mal eine andere Sache. @jaenicke wie ist das mit TWebBrowser im eigenen Programm? Wenn man die gewünschte Website dort darstellt und die Informationen einträgt müsste doch auch funktionieren oder denke ich da nun zu einfach. Mir fehlt da leider aktuell die Zeit um das für den TE zu testen, viel mir aber eben als evtl. weitere Möglichkeit ein.

oldmann 14. Mai 2019 08:25

AW: Delphi Fenster soll im geöffneten Browser über dem Browser stehen
 
Hallo,

Es funktioniert.
Das letzte Listing von Sebastian Jaenicke brachte den Durchbruch.
Vielen Dank dafür ebenso vielen Dank an alle die sich an der Lösung beteiligten.
Damit ist dieses Thema beendet.

Gruß oldmann


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