home *** CD-ROM | disk | FTP | other *** search
/ Chip 1999 July / Chip_1999-07_cd.bin / zkuste / Delphi / D / sce.exe / DEMO.PAS < prev    next >
Pascal/Delphi Source File  |  1997-06-06  |  4KB  |  126 lines

  1. unit CaseKopf;
  2. interface
  3. uses  StdCtrls, ExtCtrls, typen, dialogs, sysutils, pars;
  4.  
  5. type
  6.          TKopf=class(tWKopf)
  7.          procedure initZeiger(TY,VT:byte;Zeile:integer;M:TMemo;
  8.                              P:TParser;PB: TPaintBox);override;
  9.          constructor create(TY,VT:byte;Zeile:integer;M:TMemo;P:TParser;
  10.                      PB: TPaintBox);
  11.          procedure zeichne(Xpos,Ypos,Xbis,Ybis:longInt);override;
  12.          procedure geoBerechnen(var GR:GroesseRecord);override;
  13.          procedure drucken(Xpos,Ypos,Xbis,Ybis:longInt;Seite:integer);override;
  14.          procedure druckenRumpf;override;
  15.          procedure DruckBerechnen(var GR:GroesseRecord);override;
  16.          end;
  17.  
  18. implementation
  19.  
  20. constructor TKopf.create(TY,VT:byte;Zeile:integer;M:TMemo;P:TParser;
  21.                      PB: TPaintBox);
  22. begin
  23. inherited create(TY,VT,Zeile,M,P,PB);
  24. KopfEndeMeldungen:=[Mof];
  25. end;
  26.  
  27. procedure TKopf.geoBerechnen(var GR:GroesseRecord);
  28. var tempB:cardinal;
  29.     temp:integer;
  30. begin
  31. initGroesse;
  32. if KopfZeilen<>nil
  33.    then begin
  34.    KopfZeilen.geoBerechnen(Kopfgroesse);
  35.    Kopfgroesse.Hoehe:=Kopfgroesse.Hoehe+40;
  36.    Kopfgroesse.Breite:=Kopfgroesse.Breite;
  37.    if GR.Breite<Kopfgroesse.Breite
  38.        then GR.Breite:=Kopfgroesse.Breite;
  39.    end;
  40. if Rumpf<>nil
  41.    then begin
  42.    Rumpf.geoBerechnen(Rumpfgroesse);
  43.    if Kopfgroesse.Breite<Rumpfgroesse.Breite
  44.       then Kopfgroesse.Breite:=Rumpfgroesse.Breite
  45.       else Rumpfgroesse.Breite:=Kopfgroesse.Breite;
  46.    G.Hoehe:=Rumpfgroesse.Hoehe+Kopfgroesse.Hoehe+20;
  47.    temp:=G.Hoehe div 14;
  48.    G.Hoehe:=G.Hoehe+temp;
  49.    GR.Hoehe:=GR.Hoehe+G.Hoehe;
  50.    if GR.Breite<Kopfgroesse.Breite
  51.        then GR.Breite:=Kopfgroesse.Breite;
  52.    G.Breite:=Kopfgroesse.Breite;
  53.    end;
  54. end;
  55.  
  56. procedure TKopf.DruckBerechnen(var GR:GroesseRecord);
  57. var tempB:cardinal;
  58.     temp:integer;
  59. begin
  60. initDruckGroesse;
  61. if KopfZeilen<>nil
  62.    then begin
  63.    KopfZeilen.DruckBerechnen(DKopfgroesse);
  64.    while DKopfgroesse>40 do
  65.       begin
  66.       dec(DKopfgroesse,GR.Breite);
  67.       initDruckGroesse;
  68.       end;
  69.    DKopfgroesse.Hoehe:=DKopfgroesse.Hoehe+40;
  70.    DKopfgroesse.Breite:=DKopfgroesse.Breite;
  71.    if GR.Breite<DKopfgroesse.Breite
  72.        then GR.Breite:=DKopfgroesse.Breite;
  73.    end;
  74. if Rumpf<>nil
  75.    then begin
  76.    Rumpf.DruckBerechnen(DRumpfgroesse);
  77.    if DKopfgroesse.Breite<DRumpfgroesse.Breite
  78.       then DKopfgroesse.Breite:=DRumpfgroesse.Breite
  79.       else DRumpfgroesse.Breite:=DKopfgroesse.Breite;
  80.    D.Hoehe:=DRumpfgroesse.Hoehe+DKopfgroesse.Hoehe+20;
  81.    //temp:=D.Hoehe div 14;
  82.    //D.Hoehe:=D.Hoehe+temp;
  83.    GR.Hoehe:=GR.Hoehe+D.Hoehe;
  84.    if GR.Breite<DKopfgroesse.Breite
  85.        then GR.Breite:=DKopfgroesse.Breite;
  86.    D.Breite:=DKopfgroesse.Breite;
  87.    end;
  88. end;
  89.  
  90. procedure TKopf.initZeiger(TY,VT:byte;
  91.    Zeile:integer;M:TMemo;P:TParser;PB: TPaintBox);
  92. begin
  93. KopfZeilen:=tOfZeile.create(Typ,VTiefe,0,M,P,PB);
  94. Rumpf:=tRumpf.create(Typ,VTiefe,0,M,P,PB);
  95. end;
  96.  
  97. procedure TKopf.zeichne(Xpos,Ypos,Xbis,Ybis:longInt);
  98. begin
  99. if not initPos(Xpos,Ypos,Xbis,Ybis) then exit;
  100. kasten(X,Y,X+Kopfgroesse.Breite,(Y+Kopfgroesse.Hoehe));
  101. linie(X,(Y+Kopfgroesse.Hoehe-30),X+Kopfgroesse.Breite,
  102.                                  (Y+Kopfgroesse.Hoehe));
  103. zeichneKopf;
  104. if Rumpf<>nil
  105.    then Rumpf.zeichne(X,(Y+Kopfgroesse.Hoehe),
  106.                     (X+G.Breite),(Y+G.Hoehe));
  107. end;
  108.  
  109. procedure TKopf.drucken(Xpos,Ypos,Xbis,Ybis:longInt;Seite:integer);
  110. begin
  111. if not initDruckPos(Xpos,Ypos,Xbis,Ybis) then exit;
  112. DruckKasten(DX,0-DY,DX+DKopfgroesse.Breite,0-(DY+DKopfgroesse.Hoehe));
  113. DruckLinie(DX,0-(DY+DKopfgroesse.Hoehe-30),DX+DKopfgroesse.Breite,
  114.                                  0-(DY+DKopfgroesse.Hoehe));
  115. druckenKopf;
  116. druckenRumpf;
  117. end;
  118.  
  119. procedure TKopf.druckenRumpf;
  120. begin
  121. if Rumpf<>nil
  122.    then Rumpf.drucken(DX,(DY+DKopfgroesse.Hoehe-1),
  123.                     (DX+D.Breite),(DY+D.Hoehe),0);
  124. end;
  125. end.
  126.