![]() |
Das Minimieren des Fensters abfangen
Und zwar geht es um den Dektop-Button in der Quick Launch. Diese Anweisung minimiert alle Fenster, auch eine zweite Taskbar von mir, die eigentlich immer sichtbar sein sollte. Weiß einer was da passiert? Wie gesagt, SC_MINIMIZE ist es in dem Fall nicht.
|
AW: Das Minimieren des Fensters abfangen
SC_...
Von Windows kommen WM_-Nachrichten. Davon könntest du die Entsprechende abfangen/ignorieren. |
AW: Das Minimieren des Fensters abfangen
Erst lesen dann antworten...
Die Antwort kannst Du ignorieren, sorry; #################################### Vielleicht in etwa so:
Code:
Gruß
procedure TForm.FormResize(Sender: TObject);
begin if form.windowstate = wsminimized then SendMessage(Handle,WM_SYSCOMMAND,SC_MINIMIZE,0); end; procedure TForm.MyWM_SYSCOMMAND(var aMsg: TMessage); begin if aMsg.WParam = SC_MINIMIZE then Application.Minimize else inherited; end; |
AW: Das Minimieren des Fensters abfangen
Zitat:
Zitat:
@Darlo Das habe ich in etwa auch so versucht, ohne Erfolg. |
AW: Das Minimieren des Fensters abfangen
Das dürfte auch nicht ganz so trivial sein:
![]() |
AW: Das Minimieren des Fensters abfangen
Vllt reicht es so indem Du Deine Logik einsetzt:
Delphi-Quellcode:
procedure WMSysCommand ( Var Message : TWMSysCommand ); message WM_SYSCOMMAND;
procedure SizeMove (var msg: TWMSize); message WM_SIZE; ----- procedure TForm1.WMSysCommand ( Var Message : TWMSysCommand ); begin inherited; case Message.CmdType of SC_RESTORE: begin end; SC_MAXIMIZE: begin end; SC_MINIMIZE: begin end; end; end; procedure TForm1.SizeMove(var msg: TWMSize); begin inherited; case msg.SizeType of SIZE_RESTORED : ; SIZE_MINIMIZED: ; SIZE_MAXIMIZED: ; SIZE_MAXSHOW : ; SIZE_MAXHIDE : ; end; end; |
AW: Das Minimieren des Fensters abfangen
@ConnorMcLeod
Klappt auch nicht. Ich hab in alles was mir einfiel ein Beep-Signal eingebaut, auch in Application.OnMinimize. Alles funktioniert wie es soll, nur nicht denn der Desktopbutton geklickt wird. Ich gucke mir mal den Link von DeddyH genauer an, auch wenn mein Englisch beschissen ist |
AW: Das Minimieren des Fensters abfangen
Zitat:
Was verstehst du unter Quick Launch? Meinst du den Button Desktop Anzeigen? Wenn ja wer sagt dir das hier die Anwendungen Minimiert werden? Ich möchte das bezweifeln. Dieser Button schaltet die ZORDER des Desktop. gruss |
AW: Das Minimieren des Fensters abfangen
|
AW: Das Minimieren des Fensters abfangen
Ok, danke Jungs, es hat geklappt.
Bedingt, wobei ich mit OnDeActivate und OnMinimaze es auch schon versucht habe. Zitat:
Ist zum Mäuse melken. Jahre lang schrieb ich immer "Schnellstart-Leiste". Als Antwort bekam ich: "Hä, was ist eine Schnellstartleiste? Meinst du die Quick Launch?". Schreibe ich Quick Launch... ach, ist egal. Zitat:
Zitat:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin SetWindowPos(Handle, HWND_TOPMOST, Left,Top, Width, Height, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE); SetWindowLong(Handle, GWL_HWNDPARENT, 0); end; |
AW: Das Minimieren des Fensters abfangen
Polling per Timer? Naja, wenn es funktioniert...
|
AW: Das Minimieren des Fensters abfangen
Ok, wenn ich Zeit habe überlege ich mir etwas anderes, aber vorerst funktioniert es.
Aber letztendlich läuft es doch immer auf einen Timer aus, auch wenn ich nicht brutal das Fenster nach vorne stelle, sondern erst abfrage ob es nötig ist. Denn das ist die Funktion: Command=ToggleDesktop Wie soll ich das abfangen? |
AW: Das Minimieren des Fensters abfangen
Fein, wenn's funkt, aber schöner fände ich, wenn man die Message ans Desktop-Fenster irgendwie mitschnüffeln könnte und darauf reagieren kann. Dadurch müßte der Timer nicht dauernd aktiv sein. Oder ganz entfallen.
So, wie z.B.:
Code:
wenn die Message daher kommt...
warte, bis ich nicht mehr topmost bin, dann solange ich nicht topmost bin setz mich topmost gut ist |
AW: Das Minimieren des Fensters abfangen
Wie in dem von mir weiter oben verlinkten Thread steht:
Zitat:
|
AW: Das Minimieren des Fensters abfangen
Yo, den global Hook habe ich überlesen, mir aber sowas gedacht. Vllt ist mir am WE langweilig, dann setz ich mich dran, weil ich das auch brauchen könnte.
|
AW: Das Minimieren des Fensters abfangen
Zitat:
|
AW: Das Minimieren des Fensters abfangen
Liste der Anhänge anzeigen (Anzahl: 2)
Es gibt hierfür einen komplizierten Weg, so wie bislang hier beschrieben
oder eben einen einfaachen Weg (den ich immer bevorzuge) Im Anhang die kompilierte Anwendung und der Source. Und wie man sieht war der Ansatz schon richtig, aber die Stelle war falsch ;) |
AW: Das Minimieren des Fensters abfangen
Bei meiner anwendung kann das BS diese nicht in der ZORDER verändern.
Denke das liegt daran das sie kein Caption hat. (Skin Form) Zitat:
gruss |
AW: Das Minimieren des Fensters abfangen
Zitat:
Delphi-Quellcode:
NoMinimizeForm.dpr(6): Datei nicht gefunden: 'Vcl.Forms.dcu'
Wie erzeuge ich die dcu Datei? |
AW: Das Minimieren des Fensters abfangen
Entferne überall "Vlc.", dann klappt es.
|
AW: Das Minimieren des Fensters abfangen
Danke, aber so einfach ist es doch nicht. Hab jetzt das hier
Delphi-Quellcode:
[Fehler] NoMinimizeForm.dpr(13): Undefinierter Bezeichner: 'MainFormOnTaskbar'
|
AW: Das Minimieren des Fensters abfangen
Zitat:
Es wäre ja zu praktisch, wenn du deine Delphi-Version angeben würdest. :roll: In XE2 wurden die delphieigenen Units mit einem Namespace versehn. (früher hieß diese mal Forms) Und ![]() |
AW: Das Minimieren des Fensters abfangen
Hab Delphi 7 Personal :(
Was kann ich anstatt TApplication.MainFormOnTaskbar einsetzen? |
AW: Das Minimieren des Fensters abfangen
Zitat:
Edit: Ok, und die Zeile raus. Stimmt. |
AW: Das Minimieren des Fensters abfangen
Hab es entfernt, aber ist es nicht wichtig für Windows 7, wird es auch da ohne Probleme funken?
|
AW: Das Minimieren des Fensters abfangen
Zitat:
|
AW: Das Minimieren des Fensters abfangen
Also das ist der Hammer, jetzt kann ich Minianwendungen (wie man sie in Win 7 nennt) schreiben! :thumb:
Danke euch, vor allem "Sir Rufo" |
AW: Das Minimieren des Fensters abfangen
"Alte" Delphi-Versionen zeigen das das versteckte Application-Fenster in der Taskleiste an.
TApplication ist quasi ein MessageOnlyWindow, worüber wichtige SystemMessages behandelt werden. "Neuere" Delphi-Versionen zeigen dort das Hauptfenster (MainForm) an, denn seit Vista gibt es ja das Aero. So wird z.B. in der Taskleiste eine Vorschau des zugehörigen Fensters angezeigt. (halte mal die Maus über einen Taskbareintrag) Bei deinem Delphi-Programm wirst du nichts sehn, da natürlich nichts auf diesem Fenster drauf ist. Zu Abwärtskompatibilität könnte nan nun neuere Delphi-Programma aber wieder in den alten Modus umschalten. Tipp: Im DP-Profil kann man sein Delphi angeben. |
AW: Das Minimieren des Fensters abfangen
Danke für die Info!
... Jah... zu früh gefreut, das Fenster bleibt immer im Vordergrund. Wie kann ich das wohl "abstellen"? :gruebel: |
AW: Das Minimieren des Fensters abfangen
Delphi-Quellcode:
oder wenn es ohne Mainform starten soll:
Hide
Delphi-Quellcode:
Edit:
begin
Application.Initialize; Application.CreateForm(TfrmMain, frmMain); Application.ShowMainForm := False; //<<<< Application.Run; end. Upps, wohl falsch verstanden. Meinst du es ist Top und du willst es nicht Top haben? |
AW: Das Minimieren des Fensters abfangen
Was meinst du mit Hide?
|
AW: Das Minimieren des Fensters abfangen
Zitat:
Was stört dich genau? Das habe ich nicht richtig verstanden. Die soll nur nicht minimiert werden oder nicht auf Win+D reagieren oder nie verschwinden aber auch nicht Top sein? |
AW: Das Minimieren des Fensters abfangen
Das Fenster bzw. Formular ist immer im Vordergrund, das will ich aber nicht haben.
|
AW: Das Minimieren des Fensters abfangen
Du guckst dir aber auch nicht den Code an, oder ;)
Schmeiß
Delphi-Quellcode:
raus. Da steht dick HWND_TOPMOST
SetWindowPos( Handle, HWND_TOPMOST, Left, Top, Width, Height, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE )
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:08 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