Autor Beitrag
Cruiser23
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 191

WinXP
D7 Prof.
BeitragVerfasst: Fr 27.06.03 12:57 
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:
ausblenden 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 user profile iconTino: Code- durch Delphi-Tags ersetzt.

_________________
Du steckst immer in der Sch****, das einzige, was sich ändert, ist die Tiefe!
Cruiser23 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 191

WinXP
D7 Prof.
BeitragVerfasst: Fr 27.06.03 14:27 
Dazu komm nun noch folgends Problem :
ausblenden volle Höhe 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);
                            //SetForeGroundWindow(Form1.Handle);
                            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 user profile iconTino: Code- durch Delphi-Tags ersetzt.

_________________
Du steckst immer in der Sch****, das einzige, was sich ändert, ist die Tiefe!
Cruiser23 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 191

WinXP
D7 Prof.
BeitragVerfasst: 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:

_________________
Du steckst immer in der Sch****, das einzige, was sich ändert, ist die Tiefe!
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mi 02.07.03 07:36 
Ich kann dir leider nicht direkt helfen. Ich kann dir aber die Komponente CoolTrayIcon empfehlen. Mit hilfe dieser Komponente sollte das ohne Probleme klappen.

Gruß
Tino
Cruiser23 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 191

WinXP
D7 Prof.
BeitragVerfasst: 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!

_________________
Du steckst immer in der Sch****, das einzige, was sich ändert, ist die Tiefe!
Cruiser23 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 191

WinXP
D7 Prof.
BeitragVerfasst: Mi 02.07.03 12:03 
Habe gefunden, wonach ich gesucht habe:
ausblenden 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?

_________________
Du steckst immer in der Sch****, das einzige, was sich ändert, ist die Tiefe!
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: 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
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 191

WinXP
D7 Prof.
BeitragVerfasst: Mi 02.07.03 21:40 
Klingt logisch! Danke nochmal für die schnelle Hilfe!
...und die Cooltray-Kompo is echt cool :wink: !

_________________
Du steckst immer in der Sch****, das einzige, was sich ändert, ist die Tiefe!