Einzelnen Beitrag anzeigen

Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#21

AW: Win32 non-Vcl ein zweites Window Modal und Umlaute Frage

  Alt 26. Mai 2018, 02:21
So ist es dann der letzte Vorgang im alten Fenster danach passiert ja nichts mehr und du hast alles abgearbeitet.
Ich habe da so eine berühmte Vcl Weisheit im Kopf "ein deaktiviertes Fenster kann nicht den Fokus erhalten".
Von daher glaube ich schon das im WM_CREATE des zweiten Window das erste Window erst deaktiviert werden müsste oder irre ich mich da? Das war es als ich meinte das es Sinn ergibt, nun machst Du meine heile Welt kaputt *schmunzel*


Das ist jetzt mein momenter Template Hauptteil, muss nur noch Positionen der Buttons anpassen.
Delphi-Quellcode:
{Fensterfunktion für Fenster 1}
function Wnd1Proc(hWnd1: HWND; uMsg: UINT; wParam: wParam; lParam: LParam):
  lresult; stdcall;
var
  x, y : integer;
begin
  Result := 0;
  case uMsg of
    WM_CREATE:
      begin
        {Fenster zentrieren}
        x := GetSystemMetrics(SM_CXSCREEN);
        y := GetSystemMetrics(SM_CYSCREEN);
        MoveWindow(hWnd1, (x div 2) - (Window1Width div 2),
          (y div 2) - (Window1Height div 2),
          Window1Width, Window1Height, true);

        hwndBtnExit := CreateWindowEx(0, 'BUTTON', 'Beenden',
          WS_CHILD or WS_VISIBLE, 200, 300,
          100, 25, hWnd1, IDC_BTNEXIT, hInstance, nil);
        hwndBtnAbout := CreateWindowEx(0, 'BUTTON', 'Über',
          WS_CHILD or WS_VISIBLE, 200, 160,
          100, 25, hWnd1, IDC_BTNABOUT, hInstance, nil);
      end;
    WM_COMMAND:
      begin
        if HiWord(wParam) = BN_CLICKED then
          case LoWord(wParam) of
            IDC_BTNEXIT: SendMessage(hWnd1, WM_CLOSE, 0, 0);
            IDC_BTNABOUT:
              {Fenster 2 erzeugen und anzeigen}
              begin
                hWndAbout := CreateWindowEx(0, ClassName2, Window2Name,
                  WS_OVERLAPPEDWINDOW or WS_VISIBLE, 40, 10,
                  300, 200, hWnd1, 0, hInstance, nil);
              end;
          end;
      end;
    WM_DESTROY:
      begin
        PostQuitMessage(0);
      end;
  else
    Result := DefWindowProc(hWnd1, uMsg, wParam, lParam);
  end;
end;

{Fensterfunktion für Fenster 2}
function Wnd2Proc(hWnd2: HWND; iMsg: UINT; wParam: wParam; lParam: LParam):
  lresult; stdcall;
var
  x, y : integer;
begin
  Result := 0;
  case iMsg of
    WM_CREATE:
      begin
        EnableWindow(hWndMain, false);
        {Fenster zentrieren}
        x := GetSystemMetrics(SM_CXSCREEN);
        y := GetSystemMetrics(SM_CYSCREEN);
        MoveWindow(hWnd2, (x div 2) - (Window2Width div 2),
          (y div 2) - (Window2Height div 2),
          Window2Width, Window2Height, true);
        hwndBtnExit := CreateWindowEx(0, 'BUTTON', 'Beenden',
          WS_CHILD or WS_VISIBLE, 100, 100,
          100, 25, hWnd2, IDC_BTNEXIT, hInstance, nil);
      end;
    WM_COMMAND:
      begin
        if HiWord(wParam) = BN_CLICKED then
          case LoWord(wParam) of
            IDC_BTNEXIT: SendMessage(hWnd2, WM_CLOSE, 0, 0);
          end;
      end;
    WM_CLOSE:
      begin
        EnableWindow(hWndMain, True);
        DestroyWindow(hWnd2);
      end;
    else
      Result := DefWindowProc(hWnd2, iMsg, wParam, lParam);
  end;
end;
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat