{ zobraz.pas } { Trieda Zobraz pre program htmlview. } { } { Author: „uboč Saloky } { Datum:02.02.2008 http://www.trsek.com } {$G+} { ----- uvodny konstruktor ----- } constructor TZobraz.Init; var IniFile:text; begin Mena:='Lubos Saloky & Ludovit Hvizdos'; Assign(IniFile,'HtmlView.INI'); Reset(IniFile); ReadLn(IniFile); ReadLn(IniFile,Titul2[1]); ReadLn(IniFile,Titul2[2]); ReadLn(IniFile,Titul3[1]); ReadLn(IniFile,Titul3[2]); ReadLn(IniFile); for Zobraz.i:=1 to 10 do begin ReadLn(IniFile,DMenu[1,i]); ReadLn(IniFile,DMenu[2,i]); end; ReadLn(IniFile); ReadLn(IniFile,EndInfo[1]); ReadLn(IniFile,EndInfo[2]); ReadLn(IniFile); ReadLn(IniFile,ChybHlas[1]); ReadLn(IniFile,ChybHlas[2]); for Zobraz.i:=1 to 3 do begin ReadLn(IniFile,ChybPopis[1,i]); ReadLn(IniFile,ChybPopis[2,i]); end; Close(IniFile); VSeg:=$B800; LHRX:=0;LHRY:=0; KurzX:=0;KurzY:=1; Titul1:='HTMLView:'; ZmazObrazovku; ZapniKurzorMysi; asm mov ah,3 mov bh,0 int 10h mov Zobraz.TempCX,cx { priprava na vypnutie textoveho kurzora } end; InicializujZoznam; end; procedure TZobraz.PrepisObrazovku; var Pom:string; PoslZnak,PosX:integer; begin AktRiadok:=HornyRiadok; i:=1; repeat with AktRiadok^ do begin Move(Text^,Pom,DlzkaRiadka+1); PoslZnak:=PrvyZnak+DlzkaRiadka; PosX:=integer(PrvyZnak)-LHRX; if PrvyZnak>=LHRX+80 then begin Pom:=''; PosX:=0; end; if PoslZnak<=LHRX then begin Pom:=''; PosX:=0; end; if (PrvyZnakLHRX+80) then Pom[0]:=Char(LHRX+80-PrvyZnak); if (PrvyZnakLHRX) then begin Delete(Pom,1,LHRX-PrvyZnak); PosX:=0; end; UmiestniText(PosX,i,@Pom); end; Inc(i); AktRiadok:=AktRiadok^.Dalsi; until (AktRiadok^.Dalsi=nil) or (i=24); end; { ----- HLAVNA PROCEDURA pre zobrazovanie .HTML dokumentu ----- } procedure TZobraz.Dokument; var PoslZnak:word; begin UmiestniTextovyKurzor; PrepisObrazovku; repeat CakajNaVOI; if (Zoznam^[$4D]>0) and (LHRX0) and (LHRX+KurzX>0) then begin { vlavo } { VypniKurzorMysi;} if KurzX>0 then begin Dec(KurzX); UmiestniTextovyKurzor; PrepisPoziciuKurzora; end else begin Dec(LHRX); ZmazObrazovku; PrepisObrazovku; end; { ZapniKurzorMysi;} end; if (Zoznam^[$50]>0) and (PocetRiadkov+22>LHRY+KurzY) then begin { dole } CakajNaVOI; CakajNaVOI; CakajNaVOI; if KurzY<23 then begin Inc(KurzY); UmiestniTextovyKurzor; PrepisPoziciuKurzora; end else begin HornyRiadok:=HornyRiadok^.Dalsi; Inc(LHRY); ZmazObrazovku; PrepisObrazovku; end; end; if (Zoznam^[$48]>0) and (LHRY+KurzY>1) then begin { hore } CakajNaVOI; CakajNaVOI; CakajNaVOI; if KurzY>1 then begin Dec(KurzY); UmiestniTextovyKurzor; PrepisPoziciuKurzora; end else begin HornyRiadok:=HornyRiadok^.Predosly; Dec(LHRY); ZmazObrazovku; PrepisObrazovku; end; end; if (Zoznam^[$47]>0) then begin { Home } KurzX:=0; LHRX:=0; UmiestniTextovyKurzor; PrepisPoziciuKurzora; ZmazObrazovku; PrepisObrazovku; end; if (Zoznam^[$4F]>0) then begin { End } AktRiadok:=HornyRiadok; for Zobraz.i:=1 to KurzY-1 do AktRiadok:=AktRiadok^.Dalsi; { najdi aktualny riadok } with AktRiadok^ do begin PoslZnak:=PrvyZnak+DlzkaRiadka; if PoslZnak>LHRX+79 then begin KurzX:=79; LHRX:=PoslZnak-79; end else begin KurzX:=PoslZnak-LHRX; end; end; UmiestniTextovyKurzor; PrepisPoziciuKurzora; ZmazObrazovku; PrepisObrazovku; end; Until Zoznam^[1]>0; { Esc } end; { ----- vypis chyboveho hlasenia ----- } procedure TZobraz.Chyba(Kod:byte); begin VypniKurzorMysi; VypniTextovyKurzor; case Kod of 1,2:begin Ramcek(20,10,40,6,$4F); UmiestniText(33,11,@ChybHlas[Jazyk]); UmiestniText(24,13,@ChybPopis[Jazyk,Kod]); ZapniKurzorMysi; repeat ZistiPoziciu(MysX,MysY,Tlacidla); until (Tlacidla>0) or (JeZnak); if JeZnak then CitajZnak; end; end; ZapniTextovyKurzor; if Kod in [1,2] then Koniec; end; procedure TZobraz.PrepisPoziciuKurzora; var PomS,PomS2,PomS3:string[8]; begin PomS:=' '; { 13 medzier } UmiestniText(34,0,@PomS); Str(LHRX+KurzX,PomS2); Str(LHRY+KurzY,PomS3); PomS:='['+PomS2+':'+PomS3+']'; UmiestniText(34,0,@PomS); PomS:=' '; UmiestniText(74,0,@PomS); if PocetRiadkov>0 then Str((100*LHRY) div PocetRiadkov,PomS); UmiestniText(77-Length(PomS),0,@PomS); end; { ----- ukoncovacia procedura ----- } destructor TZobraz.Koniec; begin VypniKurzorMysi; asm cld mov es,Zobraz.VSeg mov ax,0700h mov cx,2000 xor di,di rep stosw { zmaz obrazovku } mov ah,2h mov dx,0300h mov bh,0 int 10h { nastav textovy kurzor } end; UmiestniText(24,0,@EndInfo[Jazyk]); UmiestniText(24,1,@Mena); ZavriZoznam; end; { ----- pomocne procedury ----- } procedure TZobraz.EmulujPridajRiadok; var f2:text; s:string; begin PocetRiadkov:=0; PocetStlpcov:=0; Assign(f2,'Emul.TXT'); Reset(f2); while not EOF(f2) do begin with AktRiadok^ do begin ReadLn(f2,AktRiadok^.PrvyZnak,s); Inc(PocetRiadkov); if PocetStlpcov