Tento díl navazuje na díl předchozí, a proto by bylo dobré,
kdybyste si jej přečetli dříve než začnete číst tento. Pro dobré
pochopení byste měli znát aspoň základní příkazy pro práci se
soubory. Takže tedy: Musíte si nejdříve vytvořit nějakou proměnnou
typu Textfile nebo typu file of typ (kde
typ je typ hodnot, které budou moci být čteny nebo zapisovány
do souboru). Tuto proměnnou si poté musíte příkazem
assignfile spojit s konkrétním souborem. Poté použijete
příkaz rewrite (vymaže obsah a otevře soubor), reset
(otevře soubor pro čtení i zápis) nebo append (otevře
soubor pro čtení i zápis a posune ukazatel na konec souboru, pouze
pro textfile). Nyní můžete ze souboru číst (read,
readln) nebo do něj zapisovat (write, writeln). A
nakonec musíte soubor uzavřít příkazem closefile.
Uložení nastavení: Do eventu Onclose
hlavního formu musíte přidat:
procedure Tzakladni.FormClose(Sender: TObject; var Action: TCloseAction);
var soubor:file of Tmujzaznam;
zaznam:Tmujzaznam;
begin
assignfile(soubor,ExtractFilePath(application.exename)+'nastav.dat');
rewrite(soubor);
begin //nastavení fontu
zaznam.font.fcolor:=Editor.font.color;
zaznam.font.fname:=Editor.font.Name;
zaznam.font.fsize:=Editor.font.Size;
zaznam.font.fstyle:=Editor.font.Style;
end;
zaznam.color:=Editor.color;
zaznam.font.fCharset:=Editor.font.Charset;
begin //nastavení zarovnání
if levo.checked then zaznam.zarovnat:=1;
if stred.checked then zaznam.zarovnat:=2;
if pravo.Checked then zaznam.zarovnat:=3;
end;
write(soubor,zaznam); //samotné uložení
nastavení
closefile(soubor);
end;
Snad jen:funkce Extractfilepath(application.exename) vrací
cestu k adresáři s aplikací, takže soubor nastav.dat bude ve stejném
adresáři jako aplikace. Typ Tmujzaznam je definovaný
takto:
type TrFont=record
fName : string[200];
fColor : TColor;
fSize : word;
fStyle : Tfontstyles;
fCharset:TFontCharset;
end;
type Tmujzaznam=record
font:Trfont;
color:Tcolor;
zarovnat:integer;
end;
Tuto definici musíte vložit do unit1 mezi uses a
const. Snad ještě: záznam Font nemůže být ukládán přímo
(nevím proč, ale prostě to nejde), a proto jsem si vytvořil záznam
TrFont.
Načtení nastavení: Do eventu Oncreate
hlavního formu musíte přidat:
procedure Tzakladni.FormCreate(Sender: TObject);
var soubor:file of Tmujzaznam;
zaznam:Tmujzaznam;
begin
//pro otevření souboru zadaného parametrem
Caption := meNoname;
if paramcount>0 then
begin
try
editor.Lines.loadfromfile(paramstr(1));
Caption :=paramstr(1);
Editor.Modified := FALSE;
except
showmessage('Neplatná cesta k souboru.');
end;
end;
//zde začíná načítání uložení
assignfile(soubor,ExtractFilePath(application.exename)+'alespad.dat');
try
reset(soubor);
except
//on V:EInOutError do
showmessage('Soubor '+ExtractFilePath(application.exename)+'alespad.dat'+' nenalezen! Po ukončení této aplikace se založí nový!');
exit;
end;
read(soubor,zaznam);
begin
Editor.font.color:=zaznam.font.fcolor;
Editor.font.Name:=zaznam.font.fname;
Editor.font.Size:=zaznam.font.fsize;
Editor.font.Style:=zaznam.font.fstyle;
end;
Editor.color:=zaznam.color;
Editor.font.Charset:=zaznam.font.fCharset;
case zaznam.zarovnat of
1:levoclick(nil);
2:stredclick(nil);
3:pravoclick(nil);
end;
closefile(soubor);
end;
Nejprve bych rád popsal ještě první část. U většiny programů
funguje, že když je spustíte s parametrem souboru, který chcete
otevřít, tak jej otevřou automaticky. No a totéž řeší první část.
meNoName je konstanta 'Bez názvu'. Funkce
paramcount vrací počet parametrů, se kterými byl program
spuštěn, a paramstr vrací parametr, jehož pořadové číslo
specifikuje číslo v závorce.
Nyní k načtení nastavení: Toto je velmi podobné uložení
nastavení, takže pokud jste pochopili ukládání, pochopíte i
načítání. Je zde jen jeden háček: Soubor, který udává první
parametr, nebo soubor s nastavením nemusí existovat, a proto
je zde využito konstrukce try..except..end, která by mohla
být pro začínající programátory problém. Nejde však o nic těžkého a
laicky řečeno: provedou se příkazy mezi try a except,
a pokud dojde někde k chybě zpracovávání těchto příkazů, provádění
se přeruší a začnou se zpracovávat příkazy mezi except a
end a poté se pokračuje za end. Pokud k chybě nedojde,
příkazy mezi except a end nebudou zpracovány. Toto je
velmi laicky řečeno, ale pro názornost to stačí.