15 Fenster
10 Fenster verwalten
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;