Entwickler-Ecke
Windows API - Schaltfläche in der Taskbar ausblenden unter XP
Cruiser23 - Fr 27.06.03 12:57
Titel: Schaltfläche in der Taskbar ausblenden unter XP
Wenn ich mein Prog minimire, soll es in den Systray, was auch kein problem darstellt. Allerdings soll es dafür
nicht in der Taskbar angezeigt werden. Zwei Animationen sehen einfach mies aus (zum Tray und zur Taskbar)! Habe dafür im EDH2000 folgenden source gefunden:
Delphi-Quelltext
1: 2: 3: 4: 5:
| ShowWindow( Application.Handle, SW_HIDE ); SetWindowLong( Application.Handle, GWL_EXSTYLE, GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW); ShowWindow( Application.Handle, SW_SHOW ); |
Der tuts nur unter XP nicht ganz, das heißt: In der Taskbar is jetzt keine Schaltfläche mehr, sondern das Fenster minimirt sich (wie wenn man das Editorfenster von Delphi schließt) links, genau über die Taskbar).
Gibts nicht sowas wie---?
Apllication.ShowMainFor = False...nur auch zu einem späteren Zeitpunkt als OnCreate möglich?
Moderiert von
Tino: Code- durch Delphi-Tags ersetzt.
Cruiser23 - Fr 27.06.03 14:27
Dazu komm nun noch folgends Problem :
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74:
| procedure TForm1.MinForm; var h:HWnd;
begin if MinTrue = false then begin TaskBarAddIcon; h:=handle; postmessage(h,WM_SYSCOMMAND,SC_MINIMIZE,0); MinTrue:= true; end else Showmessage('Ist minimiert'); Exit; end;
procedure TForm1.TaskBarAddIcon; var tnid: TNotifyIconData ;
begin with tnid do begin cbSize := sizeof(TNotifyIconData); Wnd := Form1.handle; uID := 1; uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP; uCallbackMessage := WM_TASKBAREVENT; hIcon := application.icon.handle; strcopy(tnid.szTip,'Tooltipp'); Shell_NotifyIcon(NIM_ADD, @tnid); with Screen do DrawAnimatedRects(Handle, 3, BoundsRect, Rect(Width-20, Height, Width-10, Height));
end; end;
procedure TForm1.WMTASKBAREVENT(var message: TMessage); var MP: TPoint;
begin case message.LParamLo of WM_RBUTTONDOWN : begin GetCursorPos(MP); SystrayPopup.Popup(MP.x,MP.y); end; WM_LBUTTONDBLCLK : begin Anzeigen1Click(nil); end; end; end;
procedure TForm1.MinForm; var h:HWnd;
begin if MinTrue = false then begin TaskBarAddIcon; h:=handle; postmessage(h,WM_SYSCOMMAND,SC_MINIMIZE,0); MinTrue:= true; end else Showmessage('Ist minimiert'); Exit; end; |
Wenn mein prog einmal minimiret ist, läss es sich (nach dem Restore) kein zweites mal minimiren! Was habe ich falsch gemacht?
Weiß den niemand einen Rat :autsch:
Moderiert von
Tino: Code- durch Delphi-Tags ersetzt.
Cruiser23 - Di 01.07.03 21:19
Nochmal Hallo
Ich will ja niemanden auf den Wecker gehen, nur stehe ich mit meinem prog leider ein wenig unter Zeitdruck (ich hab noch knapp 2 Monate) und ich muss an dem Ding noch soviel machen, das ein wenig Hilfe in Form von nem Tipp oder so echt gut gebrauchen könnte! Nich bös nehmen! :cry:
Cruiser23 - Mi 02.07.03 10:51
Danke
Habe es ir gerade gezogen! Funtz auch, jetzt muss ich`s "nur noch" verstehen, aber da bin ich zuversichtlich!
Gab ÜB n kleines Problem mit dem Download:
Wenn ich den von dir Angegebenen Link anklicke, kann ich zwar Downloaden, aber die Datei kann man dan nicht öffnen!
Wenn man allerdings auf die Haupseite von denen geht und dann zieht, is alles OK! Liegts an mir oder an dem Link? Egal, habs ja jetzt!
Danke nochmal!
Cruiser23 - Mi 02.07.03 12:03
Habe gefunden, wonach ich gesucht habe:
Delphi-Quelltext
1: 2:
| if IsWindowVisible(Application.Handle) then ShowWindow(Application.Handle, SW_HIDE); |
Dazu habe ich eigentlich keine Frage, nur ist mir etwas aufgefallen:
Wenn ich das ganze zu OnCreate stecke, tut sich nichts (wird compilert aber is halt noch in der Taskbar). Bei OnShow dagegen futzt`s! Gibt es in Delphi eigentlich Befehle, die in OnCreate einfach nicht ausgeführt werden, oder hätt ich noch etwas dazuschreiben müssen?
Tino - Mi 02.07.03 13:26
| Cruiser23 hat folgendes geschrieben: |
| Gibt es in Delphi eigentlich Befehle, die in OnCreate einfach nicht ausgeführt werden, |
Nein!
Das Problem ist wahrscheinlich das wenn das OnCreate Event ausgelöst wird das Mainform noch nicht sichtbar ist und somit deine Bedingung
Delphi-Quelltext
1:
| if IsWindowVisible(Application.Handle) then |
False ergibt. Im OnShow Event dagegen ist das Form bereits sichbar und die Bedingung ergibt True.
Gruß
Tino
Cruiser23 - Mi 02.07.03 21:40
Klingt logisch! Danke nochmal für die schnelle Hilfe!
...und die Cooltray-Kompo is echt cool :wink: !
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!