Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wie bringe ich meine Anwendung wieder in den Vordergrund ??? (https://www.delphipraxis.net/79216-wie-bringe-ich-meine-anwendung-wieder-den-vordergrund.html)

Bemo 18. Okt 2006 10:38


Wie bringe ich meine Anwendung wieder in den Vordergrund ???
 
Hallo,

ich habe eine bereits bestehende Anwendung (A1) in eine DLL gewandelt um sie aus einer zweiten Anwendung (A2)heraus starten zu können. A1 erzeugt einen eigenen Thread (war ein wirklich guter Tip aus dem Forum :thumb: ). A2 nuzte ich, um A1 Parameter zu übergeben, die dann in A1 weiter bearbeitet werden. Die Parameter übergebe ich via Buttons oder Edit-Felder usw. Betätige ich jetzt einen Button in A2, geht A1 in den Hintergrund, d.h. das offene Formular von A1 verschwindet in die Task-Leiste. Jetzt möchte ich zwei neue Methoden in A1 implementieren, nämlich SHOW und HIDE, d.h ich möchte A1 auf Tastendruck in den Hintergrund bzw.Vordergrund schalten, ohne A1 zu beenden. Dazu habe ich hier im Forum auch einiges gefunden, aber nichts funktioniert. Folgene Vorgehensweise habe ich mir zurechtgelegt.
Zunächst stelle ich am Ende von ThreadCreate über UsrIntThread.Thread3:=GetCurrentThreadID die ID von A1(meine Anwendung in der DLL) fest und speichere sie in einer globalen Variablen. In A2 rufe ich dann im Event eines Button SetForegroundWindow(UsrintThread.Thread3) auf. Aber A1 kommt nicht in den Vordergrund. WARUM ???? :gruebel: Ich schnalls nicht :wall:

Grüße Bernd

Luckie 18. Okt 2006 10:46

Re: Wie bringe ich meine Anwendung wieder in den Vordergrund
 
Weil es heißt: SetForegroundWindow und nicht SetForegroundThread. Du musst das Handle deines Fensters angeben und nicht die ThreadID.

Bemo 18. Okt 2006 11:05

Re: Wie bringe ich meine Anwendung wieder in den Vordergrund
 
Hallo Michael,

danke für die prompte Antwort. Selbst wenn ich mich jetzt als Looser oute :oops: , aber wie stelle ich das Handle meiner dll Anwendung fest (Habe sowas noch nie programmiert). Eventuell über
Thread2 := GetWindowThreadProcessID (GetForegroundWindow)?????
Bekomme ich dann meine Anwendung über SetForegroundWindow(Thread2)wieder angezeigt ???

Grüße Bernd

Luckie 18. Okt 2006 11:12

Re: Wie bringe ich meine Anwendung wieder in den Vordergrund
 
Am einfachsten über FindWindow. Setzt aber voraus, dass du den Fenstertitel kennst und dieser eindeutig ist. Oder du vergibst eine eindeutige Fensterklasse, in dem du deinem Formular einen möglichst eindeutigen Namen gibst. (Mit FindWindow kann man entweder nach fenstertitel oder Fensterklassen suchen.) Damit änderst du auch die Bezeichnung deiner Fensterklasse, die standardmäßig TForm ist. Oder anders der Formluarname bestimmt die Bezeichning der Klasse, welche wiederum den Namen der Fensterklasse bestimmt.

Bemo 18. Okt 2006 16:14

Re: Wie bringe ich meine Anwendung wieder in den Vordergrund
 
Hallo Michael,

ok, ich habs geschnallt.SUPER.Vielen Dank :dancer2: :dancer: :hello:

Grüße Bernd

Namenloser 18. Okt 2006 17:27

Re: Wie bringe ich meine Anwendung wieder in den Vordergrund
 
Warum so umständlich?

Application.BringToFront bzw. Form1.BringToFront funzt auch.

Bemo 18. Okt 2006 19:36

Re: Wie bringe ich meine Anwendung wieder in den Vordergrund
 
Hallo NamenLozer,

ich denke, das funzt nicht so einfach. Damit habe ich nämlich so meine ersten Versuche gemacht:

Zitat:

Application.BringToFront
: Das bringt nur die zur Zeit aktive Anwendung, in meinem Beispiel A2 nach oben. Die ist aber eh zu diesem Zeitpunkt wo ich auf ihr den Button betätige aktiv.
Zitat:

Form1.BringToFront
: Das würde in dem Fall auch, wenn existiert, Form1 aus der Anwendung A2 nach oben bringen. Bei diesem Beispiel müße ich auch erst den HANDLE der FORM1 meiner Anwendung A1 bestimmen. Dann sind wir wieder bei LUCKIE'S Weg

Grüße Bernd

EWeiss 18. Okt 2006 21:01

Re: Wie bringe ich meine Anwendung wieder in den Vordergrund
 
Wenn das Handle deiner A1 Anwendung bekannt ist dann hiermit.

SetWindowPos A1.handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_NOSIZE Or SWP_NOMOVE

gruß

Zacherl 18. Okt 2006 21:35

Re: Wie bringe ich meine Anwendung wieder in den Vordergrund
 
Es gab hier auch mal im Forum eine Funktion "ForceForegroundWindow", der man ein Fensterhandle übergeben konnte.

Florian

EWeiss 18. Okt 2006 22:02

Re: Wie bringe ich meine Anwendung wieder in den Vordergrund
 
Zitat:

Betätige ich jetzt einen Button in A2, geht A1 in den Hintergrund, d.h. das offene Formular von A1 verschwindet in die Task-Leiste. Jetzt möchte ich zwei neue Methoden in A1 implementieren, nämlich SHOW und HIDE, d.h ich möchte A1 auf Tastendruck in den Hintergrund bzw.Vordergrund schalten, ohne A1 zu beenden
Deine Frage wiederspricht sich.
Was möchtest du nun erreichen ?

Die Form bei Tastendruck anzeigen(SHOW) oder verstecken(HIDE) oder in den Vordergrund bzw.. Hintergrund setzen ?
Blicke da irgendwie nicht durch.

So wie ich das erkenne möchtest du die Form maximieren oder minimieren
aber nicht in den Vordergrund > Hintergrund bringen.
Das würde in dem Fall wenn sich die Anwendung im Tray (nicht Tasbar) befindet eh nicht gehen.
Dazu muß die Anwendung sichtbar sein.

EDIT: OK Task-Leiste ...

Dann geht es dir ums Maximieren und Minimieren.
gruß


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