Autor Beitrag
tempme
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 08.04.05 19:48 
Hallo zusammen,
ich stecke im Moment in einer Sackgasse, komme leider da irgendwie nicht weiter.
Vielleicht kann einer von euch mir weiterhelfen.

Nun zu meinem Problem:
  • die komplette Applikation ist nonVCL
  • das Hauptfenster wird mit Hilfe von WinAPIs erstellt, ich benutze keine Dialog (Resource)
  • Beim Start ist das Fenster unsichtbar
  • TNA Icon wird erzeugt
  • je nach Status wird das Fenster versteckt bzw. hervorgehoben (ShowWindow)
  • das Fenster hat folgende Styles: WS_SYSMENU, WS_CAPTION, DS_CENTER
  • Ich möchte nun SC_CLOSE abfangen, um das Fenster wieder minimieren zu können anstatt das komplette Programm zu beenden
  • In der WndProc benutze ich folgenden Code:
    ausblenden Delphi-Quelltext
    1:
    2:
    3:
    4:
    5:
    6:
    7:
    8:
    9:
    10:
    11:
    12:
    13:
    case uMsg of
     WM_SYSCOMMAND:
     begin
      if wParam = SC_CLOSE then
      begin
       // Fenster wieder verstecken
       PostMessage(hWnd,
                   WM_COMMAND,
                   IDM_OPTIONS,
                   WM_INVIS);
      end;
     end;
    end;

Wenn ich nun das Programm starte und versuch das Fenster zu bewegen, dann klappt es nicht.
Ich weiss nun auch dass es an dem o.g. Code liegt. Ich schätze ich muss weitere Messages abfangen und behandeln, nur leider weiss ich nicht welche und wie.

Hat jemand eine Idee?
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 08.04.05 21:30 
Musst du auch nicht wissen. Ist die Message, die dich interessiert, nicht dabei, dann rufe einfach die "DefaultWindowProc" auf. Hier ein Beispiel aus meiner TNA-Demo, bei der ich beim Minimieren ein TNA-Icon anlegen lasse. Alle anderen Messages sollen aber durchgehen, und darum habe ich das so gemacht:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
    WM_SIZE:
      if(wp = SIZE_MINIMIZED) then
      begin
        if(Shell_NotifyIcon(NIM_ADD,@NID)) then
          ShowWindow(wnd,SW_HIDE)
        else
          Result  := DefWindowProc(wnd,uMsg,wp,lp);
      end
      else Result := DefWindowProc(wnd,uMsg,wp,lp);
tempme Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Sa 09.04.05 00:13 
Dank dir Mathias.
Nun klappt es.