03 Dialoge
40 Freien Speicher ueberpruefen
Überprüfen ob genügend Speicher frei ist, um den Dialog zu erzeugen.
Auf den heutigen Rechner wird die wohl nicht mehr der Fall sein, das der Speicher wegen eines Dialoges überläuft.
Die virtuelle Procedure OutOfMemory, wen doch mal der Speicher überläuft.
type
TMyApp = object(TApplication)
ParameterData: TParameterData; // Parameter für Dialog.
constructor Init; // Neuer Constructor
procedure InitStatusLine; virtual; // Statuszeile
procedure InitMenuBar; virtual; // Menü
procedure HandleEvent(var Event: TEvent); virtual; // Eventhandler
procedure OutOfMemory; virtual; // Wird aufgerufen, wen Speicher überläuft.
procedure MyParameter; // neue Funktion für einen Dialog.
end;
Die Procedure wird aufgerufen, wen zu wenig Speicher vorhanden ist.
procedure TMyApp.OutOfMemory;
begin
MessageBox('Zu wenig Arbeitsspeicher !', nil, mfError + mfOkButton);
end;
Der Dialog wird jetzt mit Werten geladen.
Dies macht man, sobald man fertig ist mit Komponenten ertstellen.
procedure TMyApp.MyParameter;
var
Dia: PDialog;
Rect: TRect;
dummy: word;
Ptr: PView;
begin
Rect.Assign(0, 0, 35, 15);
Rect.Move(23, 3);
Dia := New(PDialog, Init(Rect, 'Parameter'));
with Dia^ do begin
// CheckBoxen
Rect.Assign(2, 3, 18, 7);
Ptr := New(PCheckBoxes, Init(Rect,
NewSItem('~D~atei',
NewSItem('~Z~eile',
NewSItem('D~a~tum',
NewSItem('~Z~eit',
nil))))));
Insert(Ptr);
// Label für CheckGroup.
Rect.Assign(2, 2, 10, 3);
Insert(New(PLabel, Init(Rect, 'Dr~u~cken', Ptr)));
// RadioButton
Rect.Assign(21, 3, 33, 6);
Ptr := New(PRadioButtons, Init(Rect,
NewSItem('~G~ross',
NewSItem('~M~ittel',
NewSItem('~K~lein',
nil)))));
Insert(Ptr);
// Label für RadioGroup.
Rect.Assign(20, 2, 31, 3);
Insert(New(PLabel, Init(Rect, '~S~chrift', Ptr)));
// Edit Zeile
Rect.Assign(3, 10, 32, 11);
Ptr := New(PInputLine, Init(Rect, 50));
Insert(Ptr);
// Label für Edit Zeile
Rect.Assign(2, 9, 10, 10);
Insert(New(PLabel, Init(Rect, '~H~inweis', Ptr)));
// Ok-Button
Rect.Assign(7, 12, 17, 14);
Insert(new(PButton, Init(Rect, '~O~K', cmOK, bfDefault)));
// Schliessen-Button
Rect.Assign(19, 12, 32, 14);
Insert(new(PButton, Init(Rect, '~A~bbruch', cmCancel, bfNormal)));
end;
if ValidView(Dia) <> nil then begin // Prüfen ob genügend Speicher.
Dia^.SetData(ParameterData); // Dialog mit den Werten laden.
dummy := Desktop^.ExecView(Dia); // Dialog ausführen.
if dummy = cmOK then begin // Wen Dialog mit Ok beenden, dann Daten vom Dialog in Record laden.
Dia^.GetData(ParameterData);
end;
Dispose(Dia, Done); // Dialog und Speicher frei geben.
end;
end;