15 Fenster

10 Fenster verwalten

Selfhtml

Fenster verwalten. Nun ist es möglich über das Menü Steuerkomandos füe die Fensterverwaltung zu geben.
ZB. Zoom, verkleinern, Fensterwechsel, Kascade, etc.


Das Menü wurde um die Steuerbefehle für die Fensterverwatung ergänzt.
Die ausgeklammerten Kommandos müssen manuel gemacht werden.
  procedure TMyApp.InitMenuBar;
  var
    Rect: TRect;
  begin
    GetExtent(Rect);
    Rect.B.Y := Rect.A.Y + 1;

    MenuBar := New(PMenuBar, Init(Rect, NewMenu(
      NewSubMenu('~D~atei', hcNoContext, NewMenu(
        NewItem('~N~eu', 'F4', kbF4, cmNewWin, hcNoContext,
        NewLine(
        NewItem('~B~eenden', 'Alt-X', kbAltX, cmQuit, hcNoContext, nil)))),
      NewSubMenu('~F~enster', hcNoContext, NewMenu(
        NewItem('~N~ebeneinander', '', kbNoKey, cmTile, hcNoContext,
        NewItem(#154'ber~l~append', '', kbNoKey, cmCascade, hcNoContext,
        NewItem('~A~lle schliessen', '', kbNoKey, cmCloseAll, hcNoContext,
        NewItem('Anzeige ~e~rneuern', '', kbNoKey, cmRefresh, hcNoContext,
        NewLine(
        NewItem('Gr'#148'sse/~P~osition', 'Ctrl+F5', kbCtrlF5, cmResize, hcNoContext,
        NewItem('Ver~g~'#148'ssern', 'F5', kbF5, cmZoom, hcNoContext,
        NewItem('~N~'#132'chstes', 'F6', kbF6, cmNext, hcNoContext,
        NewItem('~V~orheriges', 'Shift+F6', kbShiftF6, cmPrev, hcNoContext,
        NewLine(
        NewItem('~S~chliessen', 'Alt+F3', kbAltF3, cmClose, hcNoContext, Nil)))))))))))), nil)))));

  end;
Beim Fenster erzeugen, ist noch ein Counter hinzugekommen.
Wen man bei den Fenster eine überlappend oder nebeneinader Darstellung will, muss man noch den Status ofTileable setzen.
  procedure TMyApp.NewWindows;
  var
    Win: PWindow;
    Rect: TRect;
  const
    WinCounter: integer = 0;                    // Zählt Fenster
  begin
    Rect.Assign(0, 0, 60, 20);
    Inc(WinCounter);
    Win := New(PWindow, Init(Rect, 'Fenster', WinCounter));
    Win^.Options := Win^.Options or ofTileable; // Für Tile und Cascade

    if ValidView(Win) <> nil then begin
      Desktop^.Insert(Win);
    end else begin
      Dec(WinCounter);
    end;
  end;
Diese Procedure schliesst alle Fenster im Desktop.
Dazu wird jedem Fenster mit ForEach ein cmClose-Event gesendet.
  procedure TMyApp.CloseAll;

    procedure SendClose(P: PView);
    begin
      Message(P, evCommand, cmClose, nil);
    end;

  begin
    Desktop^.ForEach(@SendClose);
  end;
cmNewWin muss man selbst abarbeiten. cmClose für das Schliessen des Fenster läuft im Hintergrund automatisch.
  0000BB">procedure TMyApp.CloseAll;

    0000BB">procedure SendClose(P: PView);
    0000BB">begin
      Message(P, evCommand, cmClose, 0000BB">nil);
    0000BB">end;

  0000BB">begin
    Desktop^.ForEach(@SendClose);
  0000BB">end;



zurück