15 Fenster
05 Fenster neu und schliessen
Über das Menü Fenster erzeigen und schliessen.
Neue Konstanten für Kommados.
Auch ist der HandleEvent dazugekommen.
const
cmNewWin = 1001;
type
TMyApp = object(TApplication)
constructor Init;
procedure InitStatusLine; virtual;
procedure InitMenuBar; virtual;
procedure HandleEvent(var Event: TEvent); virtual; // Abarbeitung Kommandos
procedure OutOfMemory; virtual; // Wird aufgerufen, wen Speicher überläuft.
procedure NewWindows;
end;
Das Menü wurde um Neu und Schliessen ergänzt.
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,
NewItem('S~c~hliessen', 'Alt-F3', kbAltF3, cmClose, hcNoContext,
NewLine(
NewItem('~B~eenden', 'Alt-X', kbAltX, cmQuit, hcNoContext, nil))))), nil))));
end;
Beim Fenster erzeugen, ist noch ein Counter hinzugekommen.
Dieser wird benutzt um die Fenster zu nummerieren.
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));
// Wen zu wenig Speicher für Fenster, dann Counter wieder -1.
if ValidView(Win) <> nil then begin
Desktop^.Insert(Win);
end else begin
Dec(WinCounter);
end;
end;
cmNewWin muss man selbst abarbeiten. cmClose für das Schliessen des Fenster läuft es im Hintergrund automatisch.
procedure TMyApp.HandleEvent(var Event: TEvent);
begin
inherited HandleEvent(Event);
if Event.What = evCommand then begin
case Event.Command of
cmNewWin: begin
NewWindows; // Fenster erzeugen.
end;
else begin
Exit;
end;
end;
end;
ClearEvent(Event);
end;