{ die Resource wird ins Programm eingebunden (wichtig für ACCs) }
procedure TMFApplication.InitInstance;
begin
{ wird eine Anwendung das erste Mal in den Speicher geladen,
wird die Methode InitApplication aufgerufen, die u.a. die
boolean-Variable FirstInstance setzt; danach wird InitInstance
aufgerufen;
wird die Anwendung ein zweites Mal geladen (z.B. zuerst als ACC
und dann als Prg), wird NUR diese Methode InitInstance von
dem Konstruktor Init aufgerufen! }
InitResource(@MFResource,nil);
{ die im Prg eingebundene Resource wird initialisiert;
soll das RSC-File nachgeladen werden, wird statt InitResource()
einfach LoadResource(datei) aufgerufen }
inherited InitInstance
{ Standard-Initialisierungen, setzt Schnittstellenobjekt für
<Control>+<Q>-Tastenkombination und ruft InitMainWindow auf }
end;
procedure TMFApplication.InitMainWindow;
var p: PMFDialog;
begin
{ InitMainWindow legt ein "ganz einfaches" GEM-Fenster an und wird
deshalb eigentlich immer überschrieben, um ein abgeleitetes Fenster-
objekt zu installieren;
dieser Aufruf ist insofern besonders, als daß wir kein FENSTER,
sondern einen DIALOG als "MainWindow" anmelden; dieser wird zwar
normalerweise in einem Fenster dargestellt, sollte allerdings kein
Fenster-Handle mehr verfügbar sein, macht ObjectGEM daraus auto-
matisch (zur Laufzeit) einen MODALEN Dialog! }
new(p,Init(nil,'ObjectGEM MakeFast',MFDLG));
{ der Dialog trägt sich selbständig in die Fensterliste ein;
MainWindow zeigt immer auf das erste installierte TWindow-Objekt
(in diesem Fall auf einen Nachfahren);
dem Konstruktor wird das Parent-Objekt (in diesem Fall nil, es
existiert also kein Parent), der Fenstertitel und der Index des
Dialogbaums übergeben }
if (MainWindow=nil) or (ChkError<em_OK) then Status:=em_InvalidMainWindow
{ irgendwas ist schiefgelaufen => nicht initialisieren;
ObjectGEM prüft dann, wie und ob (ACCs!) das Programm
verlassen wird }
else
begin
{ p zeigt auf den Dialog; nun werden die Schnittstellen-
objekte initialisiert; diese tragen sich in die Liste
der TControl-Objekte im Dialog-Objekt ein und werden
dadurch beim freigeben des Dialogs automatisch mitge-
löscht }
{ die Rückgabe-Pointer werden gespeichert, um später die
Objekte mit ihren eigenen Methoden zu modifizieren! }
p^.st1:=new(PStatic,Init(p,MFMINDT,0,false,'Gibt an, wieviel TT-RAM (Alternate RAM) dem Programm genügt, wenn mehr ST-RAM als TT-RAM vorhanden ist.'));
p^.st2:=new(PStatic,Init(p,MFAMOUNT,8,false,'Gibt an, wieviel TT-RAM (Alternate RAM) dem Programm genügt, wenn mehr ST-RAM als TT-RAM vorhanden ist.'));
p^.st2^.Style:=p^.st2^.Style and not(sts_Fill);
{ einfacher Text, übergeben wird u.a. die max. Länge des Textes+1
(Nullbyte), einen boolean-Wert, der angibt, ob der Text unter-
strichen wird, und der String für BubbleHelp (!);
bringen Sie den Mauscursor doch mal über einen Button und
drücken Sie dann <Help> ...!?!!! }
p^.st3:=new(PStatic,Init(p,MFVER,39,false,'ObjectGEM MakeFast ist Freeware, d.h. Sie dürfen das Programm kostenlos kopieren und benutzen. Änderungen am Programm sind nicht erlaubt!'));
p^.cb1:=new(PCheckBox,Init(p,MFFAST,true,'Bestimmt das FastLoad-Flag. Ist es gesetzt, wird beim Programmstart nur die BSS gelöscht. Das Flag sollte bei mindestens je einem Auto-Ordner-Programm und Accessory NICHT gesetzt sein!'));
{ ankreuzbare Box; der boolean-Wert gibt an, ob die CheckBox
im "neuen" Stil gezeichnet wird; ist in der Resource das
CROSSED-Attribut gesetzt, wird statt des Häkchens ein
Kreuzchen verwendet }
p^.cb2:=new(PCheckBox,Init(p,MFPROG,true,'Das Programm darf in das (schnelle) TT-RAM geladen werden. Vorsicht, wenn das Programm z.B. den Bildschirmspeicher verschiebt!'));
p^.cb3:=new(PCheckBox,Init(p,MFMEM,true,'Malloc()-Anforderungen des Programms dürfen aus dem TT-RAM bedient werden. Vorsicht bei Programmen, die z.B. den Bildschirmspeicher verschieben!'));
p^.pb1:=new(PButton,Init(p,MFDATEI,id_No,true,'Wählt ein neues Programm zum Bearbeiten aus.'));
{ ein PushButton }
p^.pb2:=new(PButton,Init(p,MFMAKE,id_No,true,'Schreibt die neuen Werte in das ausgewählte Programm.'));
if FileSelect(@self,'PRG,ACC,TOS ETC. AUSWÄHLEN','',path,fname,true) then Load(path+fname)
end;
MFMAKE: begin
with phrec do
begin
ph_prgflags:=ph_prgflags and $0ffffff8;
{ FastLoad-Flags zunächst ausmaskieren (löschen)... }
if cb1^.GetCheck=bf_Checked then
ph_prgflags:=ph_prgflags or PH_FASTLOAD;
if cb2^.GetCheck=bf_Checked then
ph_prgflags:=ph_prgflags or PH_LOADALT;
if cb3^.GetCheck=bf_Checked then
ph_prgflags:=ph_prgflags or PH_MALLOCALT;
PByte(@ph_prgflags)^:=PByte(@ph_prgflags)^ or (ttmem shl 4)
{ ... und dann evtl. wieder setzen }
end;
reset(f);
write(f,phrec);
close(f);
{ Datei aktualisieren }
DisableAll
{ nun ist keine Datei mehr aktiv }
end
end;
ExitDlg:=false
{ Dialog NICHT verlassen }
end;
function TMFDialog.OK: boolean;
begin
Application^.Quit;
{ Anwendung beenden (sobald der aktuelle Message-Loop
beendet ist)... }
OK:=true
{ ... und vorher den Dialog verlassen }
end;
function TMFDialog.Help: boolean;
begin
Application^.Alert(@self,1,NOTE,'Bringen Sie den Mauscursor über das gewünschte Dialogelement und drücken Sie die <Help>-Taste (oder die rechte Maustaste...).',' &OK ');
{ dies ist die neue ObjectGEM-Alert-Routine! }
Help:=false
{ Dialogbox nicht verlassen }
end;
function TMFDialog.DDReadArgs(dSize: longint; PipeHnd,OrgID,mX,mY,KStat: integer): boolean;