Autor Beitrag
M. Raab
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 334
Erhaltene Danke: 1

WIN 7
Delphi XE
BeitragVerfasst: Mo 06.01.03 17:26 
Hallo NG,

heute bin ich gleich mal 2x vertreten ... Hier mein 2. Problem:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
function WinMain(hInstance : HINST; hPrevInstance : HINST;
                 lpCmdLine : PChar; nCmdShow : Integer) : Integer; stdcall;
var
  msg : TMsg;
  appStart : DWord;
begin
  Finished := False;

  // Das Programm wird initialisiert (Fenster erstellen!)
  if not glCreateWnd(800, 600, FALSE, 32) then
  begin
    Result := 0;
    Exit;
  end;

  appStart := GetTickCount();            // Die Zeit zum Programmstart nehmen

  // Main message loop:


Problem: wird auf Minimieren geklickt, ist das Fenster weg, ebenso bei Maximieren. Wie kann ich das verhindern und abfangen ? Wie kann ich eine Prozedur straten, wenn jemand auf Minimize klickt ? Die Tastaturereignisse kann ich mit der Funktion

ausblenden Quelltext
1:
function WndProc(hWnd: HWND; Msg: UINT;  wParam: WPARAM;  lParam: LPARAM): LRESULT; stdcall;					


anfangen. Wie aber Minimize etc... Wie vrhindere ich, dass das Fenster ganz verschwindet sondern nur minimiert wird ?

Mein Fenster erstelle ich mit:

ausblenden 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:
function glCreateWnd(Width, Height : Integer; Fullscreen : Boolean; PixelDepth : Integer) : Boolean;
var
  wndClass : TWndClass;         // Fenster Klasse
  dwStyle : DWORD;              // Fenster Stil
  dwExStyle : DWORD;            // Erweiterter Fenster Stil
  dmScreenSettings : DEVMODE;   // Bildschirm Einstellungen (fullscreen, etc...)
  PixelFormat : GLuint;         // OpenGL Einstellungen (Pixelformat)
  h_Instance : HINST;           // aktuelle Instanz
  pfd : TPIXELFORMATDESCRIPTOR;  // Einstellungen für das OpenGL Fenster
begin
  h_Instance := GetModuleHandle(nil);       // Instanz für's Fenster holen
  ZeroMemory(@wndClass, SizeOf(wndClass));  // Daten in wndClass löschen

  with wndClass do                    // Setup der Fenster Klasse
  begin
    style         := CS_HREDRAW or    // Neuzeichenen wenn Fenster-Breite geändert
                     CS_VREDRAW or    // Neuzeichenen wenn Fenster-Höhe geändert
                     CS_OWNDC;        // Device Context exlusiv
    lpfnWndProc   := @WndProc;        // WndProc wird als Window Procedure gesetzt
    hInstance     := h_Instance;
    hCursor       := LoadCursor(0, IDC_ARROW);
    lpszClassName := 'TEST';
  end;

  if (RegisterClass(wndClass) = 0) then  // Fenster Klasse registrieren
  begin
    MessageBox(0, 'Failed to register the window class!', 'Error', MB_OK or MB_ICONERROR);
    Result := False;
    Exit
  end;


Gruss

Markus
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 06.01.03 18:53 
Ausgehend von einem Beispiel, dass beim Klick auf Minimieren in die TNA umgeleitet wird, bin ich mit folgendem Code zum Ziel gekommen:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
case uMsg of
  WM_SYSCOMMAND:
    case wParam of
      SC_MINIMIZE:
        begin
          // mach was
        end;
      // ansonsten Windows aktiv werden lassen
      else
         Result := DefWindowProc(hwnd,Msg,wParam,lParam);
    end;
end;

Beim Maximieren (SC_MAXIMIZE) ist´s IMHO genauso. Zum Thema schließen schlage ich SC_CLOSE bzw. die Nachricht WM_CLOSE vor; wobei ich persönlich Programme hasse, die sich nicht beenden lassen ...

< -- Edit ------------------>

Upps, "wParam"-Abfrage vergessen ... :oops:
M. Raab Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 334
Erhaltene Danke: 1

WIN 7
Delphi XE
BeitragVerfasst: Di 07.01.03 13:05 
Hallo Mathias,

also: das ganze klappt ebenfalls. Trotzdem: wenn ich das Fenster minimiere, verschwindet es vollständig. Gibt es eine einfache Möglichkeit das Fenster als Balken stehen zu lassen ? Ich erzeuge in Delphi zur Laufzeit mehrere Fenster die alle sauber unten aufgeführt werden. Mein Ziel wäre nun: beim Minimieren dieses Fenster sauber einzureihen....

Oder muss man das minimierte Fenster komplett erzeugen (ähnlich Fullscreen) und dann unten positionieren ?

Gruss


Markus
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 16.01.03 04:49 
Das übernimmt in der Regel doch alles Windows. :shock: Oder ist das bei OpenGL anderst?