home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1999 July
/
Chip_1999-07_cd.bin
/
zkuste
/
Delphi
/
D
/
sce.exe
/
DEMO.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1997-06-06
|
4KB
|
126 lines
unit CaseKopf;
interface
uses StdCtrls, ExtCtrls, typen, dialogs, sysutils, pars;
type
TKopf=class(tWKopf)
procedure initZeiger(TY,VT:byte;Zeile:integer;M:TMemo;
P:TParser;PB: TPaintBox);override;
constructor create(TY,VT:byte;Zeile:integer;M:TMemo;P:TParser;
PB: TPaintBox);
procedure zeichne(Xpos,Ypos,Xbis,Ybis:longInt);override;
procedure geoBerechnen(var GR:GroesseRecord);override;
procedure drucken(Xpos,Ypos,Xbis,Ybis:longInt;Seite:integer);override;
procedure druckenRumpf;override;
procedure DruckBerechnen(var GR:GroesseRecord);override;
end;
implementation
constructor TKopf.create(TY,VT:byte;Zeile:integer;M:TMemo;P:TParser;
PB: TPaintBox);
begin
inherited create(TY,VT,Zeile,M,P,PB);
KopfEndeMeldungen:=[Mof];
end;
procedure TKopf.geoBerechnen(var GR:GroesseRecord);
var tempB:cardinal;
temp:integer;
begin
initGroesse;
if KopfZeilen<>nil
then begin
KopfZeilen.geoBerechnen(Kopfgroesse);
Kopfgroesse.Hoehe:=Kopfgroesse.Hoehe+40;
Kopfgroesse.Breite:=Kopfgroesse.Breite;
if GR.Breite<Kopfgroesse.Breite
then GR.Breite:=Kopfgroesse.Breite;
end;
if Rumpf<>nil
then begin
Rumpf.geoBerechnen(Rumpfgroesse);
if Kopfgroesse.Breite<Rumpfgroesse.Breite
then Kopfgroesse.Breite:=Rumpfgroesse.Breite
else Rumpfgroesse.Breite:=Kopfgroesse.Breite;
G.Hoehe:=Rumpfgroesse.Hoehe+Kopfgroesse.Hoehe+20;
temp:=G.Hoehe div 14;
G.Hoehe:=G.Hoehe+temp;
GR.Hoehe:=GR.Hoehe+G.Hoehe;
if GR.Breite<Kopfgroesse.Breite
then GR.Breite:=Kopfgroesse.Breite;
G.Breite:=Kopfgroesse.Breite;
end;
end;
procedure TKopf.DruckBerechnen(var GR:GroesseRecord);
var tempB:cardinal;
temp:integer;
begin
initDruckGroesse;
if KopfZeilen<>nil
then begin
KopfZeilen.DruckBerechnen(DKopfgroesse);
while DKopfgroesse>40 do
begin
dec(DKopfgroesse,GR.Breite);
initDruckGroesse;
end;
DKopfgroesse.Hoehe:=DKopfgroesse.Hoehe+40;
DKopfgroesse.Breite:=DKopfgroesse.Breite;
if GR.Breite<DKopfgroesse.Breite
then GR.Breite:=DKopfgroesse.Breite;
end;
if Rumpf<>nil
then begin
Rumpf.DruckBerechnen(DRumpfgroesse);
if DKopfgroesse.Breite<DRumpfgroesse.Breite
then DKopfgroesse.Breite:=DRumpfgroesse.Breite
else DRumpfgroesse.Breite:=DKopfgroesse.Breite;
D.Hoehe:=DRumpfgroesse.Hoehe+DKopfgroesse.Hoehe+20;
//temp:=D.Hoehe div 14;
//D.Hoehe:=D.Hoehe+temp;
GR.Hoehe:=GR.Hoehe+D.Hoehe;
if GR.Breite<DKopfgroesse.Breite
then GR.Breite:=DKopfgroesse.Breite;
D.Breite:=DKopfgroesse.Breite;
end;
end;
procedure TKopf.initZeiger(TY,VT:byte;
Zeile:integer;M:TMemo;P:TParser;PB: TPaintBox);
begin
KopfZeilen:=tOfZeile.create(Typ,VTiefe,0,M,P,PB);
Rumpf:=tRumpf.create(Typ,VTiefe,0,M,P,PB);
end;
procedure TKopf.zeichne(Xpos,Ypos,Xbis,Ybis:longInt);
begin
if not initPos(Xpos,Ypos,Xbis,Ybis) then exit;
kasten(X,Y,X+Kopfgroesse.Breite,(Y+Kopfgroesse.Hoehe));
linie(X,(Y+Kopfgroesse.Hoehe-30),X+Kopfgroesse.Breite,
(Y+Kopfgroesse.Hoehe));
zeichneKopf;
if Rumpf<>nil
then Rumpf.zeichne(X,(Y+Kopfgroesse.Hoehe),
(X+G.Breite),(Y+G.Hoehe));
end;
procedure TKopf.drucken(Xpos,Ypos,Xbis,Ybis:longInt;Seite:integer);
begin
if not initDruckPos(Xpos,Ypos,Xbis,Ybis) then exit;
DruckKasten(DX,0-DY,DX+DKopfgroesse.Breite,0-(DY+DKopfgroesse.Hoehe));
DruckLinie(DX,0-(DY+DKopfgroesse.Hoehe-30),DX+DKopfgroesse.Breite,
0-(DY+DKopfgroesse.Hoehe));
druckenKopf;
druckenRumpf;
end;
procedure TKopf.druckenRumpf;
begin
if Rumpf<>nil
then Rumpf.drucken(DX,(DY+DKopfgroesse.Hoehe-1),
(DX+D.Breite),(DY+D.Hoehe),0);
end;
end.