![]() |
Re: Fenster nicht minimieren
OK jfheins,
dass es so schwierig wird, habe ich mir am Anfang nicht vorgestellt. Werde am Wochenende mich mit deinem Code mal ausführlich auseinandersetzen. Melde mich spätestens am Montag wieder bei dir, hoffentlich mit einem positiven Ergebnis. Falls jemand noch eine andere Idee hat, ich bin für jeden Einfall dankbar. Gruss Optiplex |
Re: Fenster nicht minimieren
Hallo jfheins,
mir ist es nicht gelungen diese Message mit deinem Code abzufangen, irgendwie steht ich da auf dem Schlauch. Ich gehe davon aus, dass begin // Change WndProc OldWndProc := SetWindowLong({Handle}, GWLP_WNDPROC, @NewWndProc); end; in der Create des Formulars steht und function NewWndProc(hWnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; begin if ({Message}) // Handle Message else // Call old WndProc CallWindowProc(OldWndProc, hWnd, uMsg, wParam, lParam); end; als eigenständige Funktion im Implementation teil ist. So und nun habe ich das Problem die Message genau zu deklarieren und abzufangen, vielleicht kannst du mir da nochmal helfen Danke und Gruss Optiplex |
Re: Fenster nicht minimieren
Liste der Anhänge anzeigen (Anzahl: 2)
Hi,
schau doch mal hier ![]() cu Oliver [edit]hmmm, irgendwie doch nicht ... ich habe da ein kleines projekt realisiert, das immer im vordergrund bleibt und sich auch nicht von diesem minimieren beeindrucken lässt, ich schau nochmal nach, warum das so reagiert[/edit] [edit2]so ich habe jetzt mal mein kleines DemoProjekt hier platziert, das angezeigte Fenster ist durchklickbar, always OnTop (auch bei Bildschirmschoner, TaskManager) und lässt sich auch nicht minimieren[/edit2] [edit3]für alle die es interessiert, dieses benötige ich für ein Netzwerk-Überwachungs-Proggie, das die Netzwerkverbindung von Filialen zur Zentrale überwacht, und bei entsprechenden Störungen an allen Arbeitsplätzen diese Hinweise einblendet. Damit kann das Telefonaufkommen in der Zentrale entscheidend verringert werden (die Betonung liegt aber hier auf "kann") :mrgreen: [/edit3] |
Re: Fenster nicht minimieren
Hallo Oliver,
danke für das Beispiel, aber leider kann man dieses Fenster micht mehr mit der Maus ansprechen, ich gehe davon aus, dass dies von der Transparentz kommt, diese schein mir auch dafür verantwortlich zu sein, dass der 'Button Desktop' anzeigen in der Taskbar das Fenster nicht erreicht. Die Lösung ist soweit gut, nur müsste mein Fenster Mausklicks registrieren. Hast du dafür auch eine Lösung perat. Dieter |
Re: Fenster nicht minimieren
Zitat:
Zitat:
Delphi-Quellcode:
und dann prüfen
const DTM_RAISE = WM_USER + 83;
Delphi-Quellcode:
Wenns nicht geht: wird die Funktion überhaupt aufgerufen? (Breakpoint rein und Desktop anzeigen)
if (uMsg = DTM_Raise)
// Handle Message else // Call old WndProc CallWindowProc(OldWndProc, hWnd, uMsg, wParam, lParam); end; Kann aber auch sein, dass es ne sackgasse ist ... :angel2: |
Re: Fenster nicht minimieren
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Dieter,
Zitat:
Ich lade aber nochmal eine überarbeitete Version hoch, da kann man dann über das PopUp die "Durchklickbarkeit" ein- und ausschalten. cu Oliver |
Re: Fenster nicht minimieren
hallo jfheins,
habe esst gestern Abend ausprobiert, bin aber bei @NewWndProc in FormCreate hängen geblieben ich bekam den Fehler [Fehler] E2036 Variable erforderlich,. Weist du welche Variable gemeint ist und wie und wo ich diese deklarieren muss? Ich habe auch probiert die NewWndProc eingenständig ohne sie im Private teil anzugeben, hier bekomme ich noch den Fehler, dass die Typen Pointer und Integer nicht kombatibel sind. Kann dir deshalb nicht sagen ob die function überhaupt aufgerufen wird. const DTM_Raise=WM_User+83; type TForm2 = class(TForm) private function NewWndProc(hWnd:HWND;uMsg:Uint;wparam:WParam;lPara m:LPARAM):Lresult; end; var Form2: TForm2; OldwndProc:Pointer; implementation procedure TForm2.FormCreate(Sender: TObject); begin OldwndProc:=Setwindowlong(self.Handle,GWL_WNDPROC, @NewWndProc); end; function TForm2.NewWndProc(hWnd:HWND;uMsg:Uint;wparam:WPara m;lParam:LPARAM):Lresult; begin if (uMsg=DTM_RAISE) then begin sleep(3000); end else CallwindowProc(Oldwndproc,hwnd,umsg,wparam,lparam) ; end; Hallo Oliver, wenn die Transparent nicht am diesem Verhalten schuld ist, was bewirkt dann, dass dein Fenster für Win+D bzw Win+M tasten scheinbar unempfindlich ist, erklärs mir bitte. Ich kann nämlich keine besonderen Messageaufrufe in deinem Code erkennen, er funktioniert aber. gruss Dieter Gruss Optiplex |
Re: Fenster nicht minimieren
1. sein code verwendent, soweit ich das sehe, einen Timer der das Formular immer wieder in den vordergrund holt (topmost)
2. Zu meiner alternative: :arrow: newwndproc darf keine methode des forms sein :arrow: Das handle musst du ermitteln, und nicht dein eigenes nehemn !! :arrow: mach dir statt dem sleep erstmal nen breakpoint rein ;)
Delphi-Quellcode:
Mit den Delphi-Tags wird dein code übrigens wesentlich besser lesbar ;)handle = FindWindow("Progman", "Program Manager"); Oldwndproc = Setwindowlong(handle, GWL_WNDPROC, NewWndProc); :arrow: Pointer und Integer kannst du casten Wenn ich Delphi hätte, könnte ich das Beispiel überprüfen, aber das ist alles aus dem Kopf im Browser geschrieben ;) |
Re: Fenster nicht minimieren
Zitat:
Zitat:
1. MainForm.Hide 2. SubForm.FormStyle := fsStayOnTop In der Kombination wird die SubForm nicht minimiert. cu Oliver |
Re: Fenster nicht minimieren
Zitat:
Zitat:
Dieter |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:28 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