Code: Select all
procedure TFPD.InicjujTabele(Styl:byte);
var
n,m:byte;
begin
IncWiersz(0,0); //zapamietuje poprzedni tekst
Inicjuj_WspT;
NrWiersza:=NrWiersza+2*Pixel_DPI; //obramowanie tabeli
fillChar(Tab,sizeOf(Tab),0);
for n:=0 to TAB_MAX_Wierszy-1 do begin
for m:=0 to TAB_MAX_Kolumn-1 do begin
Tab[n,m].RGora :=false; //true;
Tab[n,m].RDol :=true;
Tab[n,m].RLewa :=false; //true;
Tab[n,m].RPrawa :=true;
Tab[n,m].PolaczonaX:=m; //sama ze soba, co znaczy ze nie jest polaczona
Tab[n,m].PolaczonaY:=n; //sama ze soba, co znaczy ze nie jest polaczona
Tab[n,m].Kolor :=clNone;
Tab[n,m].Styl :=Styl;
Tab[n,m].Pad :=D_PadL;
Tab[n,m].NrObrazka :=0;
if n=TAB_MAX_Wierszy-1 then Tab[n,m].RDol:=false;
if m=TAB_MAX_Kolumn-1 then Tab[n,m].RPrawa:=false;
end;
end;
CzyObrys :=true;
NrWierszaTab:=0;
end;
{---------------------------------------------------------------------------}
procedure TFPD.Tabela(IleWierszy,IleKolumn:word;Szerokosc,PAD:SmallInt; PlikTla:string);
var
table : TRVTableItemInfo;
ramki : TRVBooleanRect;
m,n,o : byte;
ByloPolaczenieX:boolean;
IlePolaczycX:byte;
ByloPolaczenieY:boolean;
IlePolaczycY:byte;
AktualnyStylTmp:byte;
bmp,bmpTlo:TBitmap;
ss:string;
xxx:integer;
Szer,Wys:longint;
CzyBMP:boolean;
JPG:TJPEGImage;
MS:TStream;
begin
AktualnyStylTmp:=AktualnyStyl;
if IleWierszy>0 then
for n:=0 to IleWierszy-1 do begin
if IleKolumn>0 then
for m:=0 to IleKolumn-1 do begin
if n=IleWierszy-1 then Tab[n,m].RDol:=false;
if m=IleKolumn-1 then Tab[n,m].RPrawa:=false;
if Tab[n,0].Blok_Start then Tab[n,m].RGora:=true;
if Tab[n,0].Blok_End then Tab[n,m].RDol:=true;
end;
end;
// Stale definiujace wyglad tabeli - raczej nie zmienic !!!
table := TRVTableItemInfo.CreateEx(IleWierszy,IleKolumn, RVE.RVData);
table.ParaNo := PAD;
table.Color := clWhite; //clNone; //clWhite;
table.BorderLightColor := clNone; //=trnsparent //clWhite;
if CzyObrys
then table.BorderColor := clBlack
else table.BorderColor := clNone;
table.CellBorderColor := clGray;
table.CellBorderLightColor := clNone; //clWhite;
table.BorderStyle := rvtbColor; // rvtbRaisedColor;
table.CellBorderStyle := rvtbColor; //rvtbLoweredColor;
// TRVTableBorderStyle = (rvtbRaised, rvtbLowered, rvtbColor, rvtbRaisedColor, rvtbLoweredColor);
table.VRuleWidth:=0;
table.VRuleColor:=clYellow;
table.VOutermostRule:=False;
table.HRuleWidth:=0;
table.HRuleColor:=clYellow;
table.HOutermostRule:=False;
table.BorderWidth := 1; //0 - oznacza ze bez ramki
table.BorderVSpacing := 0;
table.BorderHSpacing := 0;
table.CellBorderWidth := 1; //0 - oznacza ze nie ma ramek komorek;
table.CellPadding := 2; //2 - oznacza szerokosc ramki wkolo tekstu wewnatrz komorki ;
table.CellVSpacing := 0;
table.CellHSpacing := 0;
if Pokaz_Siatke_Tabel
then table.Options:=table.Options-[rvtoHideGridLines]
else table.Options:=table.Options+[rvtoHideGridLines];
//Ustawienie szerokosci kolumn tabeli i polaczen komorek w wierszu oraz koloru komorek
if IleWierszy>0 then
for n:=0 to IleWierszy-1 do begin
if IleKolumn>0 then
for m:=0 to IleKolumn-1 do begin
table.Cells[n,m].BestWidth := Tab[0,m].Szerokosc;
table.Cells[n,m].BorderLightColor := Tab[n,m].Kolor;
table.Cells[n,m].Color := Tab[n,m].Kolor;
{ TODO : Komponent nie obsluguje prawidlowo tej wlasciwosci troche lepiej jest dla rvtbRaised}
//2007.07
case Tab[n,m].Pad_V of
D_PAD_G: table.Cells[n,m].VAlign := rvcTop;
D_PAD_S: table.Cells[n,m].VAlign := rvcMiddle;
D_PAD_D: table.Cells[n,m].VAlign := rvcBottom;
else table.Cells[n,m].VAlign := rvcVDefault;
end;
end;
m:=0;
ByloPolaczenieX:=false;
ByloPolaczenieY:=false;
IlePolaczycX:=0;
IlePolaczycY:=0;
while m<=IleKolumn-1 do begin
// dla X
if (Tab[n,m].PolaczonaX<>m) then begin
inc(IlePolaczycX);
ByloPolaczenieX:=true;
end else begin
if ByloPolaczenieX then begin
inc(IlePolaczycX);
table.MergeCells(n,m-IlePolaczycX,IlePolaczycX,1,FALSE);
end;
IlePolaczycX:=0;
ByloPolaczenieX:=false
end;
//Dla Y
if (Tab[n,m].PolaczonaY<>n) then begin
table.MergeCells(Tab[n,m].PolaczonaY,m,1,1+n-Tab[n,m].PolaczonaY,FALSE);
end;
inc(m);
end;
if ByloPolaczenieX then begin
inc(IlePolaczycX);
table.MergeCells(n,m-IlePolaczycX,IlePolaczycX,1,FALSE);
end;
end;
// table.MergeCells(0,0,6,1,FALSE);
// table.MergeCells(0,6,5,1,FALSE);
// table.MergeCells(3,1,3,1,FALSE);
// table.MergeCells(3,4,2,1,FALSE);
// table.Select(3,1,1,1);
// table.SplitSelectedCellsVertically(3);
o:=0;
if Tab[0,0].NrObrazka<>0 then begin
o:=1;
end;
if IleWierszy>0 then
for n:=0 to IleWierszy-1 do begin
InicjujStyle;
if IleKolumn>0 then
for m:=o to IleKolumn-1 do begin
with Table.Cells[n,m] do begin
try
if (Tab[n,m].PolaczonaX=m) and
(Tab[n,m].PolaczonaY=n)
then begin
Clear;
ramki:=VisibleBorders;
ramki.SetValues(Tab[n,m].RLewa, Tab[n,m].RGora,
Tab[n,m].RPrawa, Tab[n,m].RDol );
VisibleBorders:=ramki;
//AddNL(Tab[n,m].Tresc,Tab[n,m].Styl,Tab[n,m].Pad);
if Tab[n,m].SzerTXT>0 then begin {2004.08.17}
Szer:=0;
Wys :=0;
ss:=trim(Tab[n,m].Tresc);
WymiarTXT(ss,Tab[n,m].Styl,Szer,Wys);
if Szer > Tab[n,m].SzerTXT then begin
repeat
ss:=trim(ss);
if ss<>'' then delete(ss,length(ss),1);
ss:=trim(ss);
WymiarTXT(ss+'...',Tab[n,m].Styl,Szer,Wys);
until Szer <= Tab[n,m].SzerTXT;
ss:=ss+'...';
end;
AddNL(ss ,Tab[n,m].Styl,Tab[n,m].Pad);
end else begin
AddNL(Tab[n,m].Tresc,Tab[n,m].Styl,Tab[n,m].Pad);
end;
AktualnyStyl:=Tab[n,m].Styl;
AktualizujWystepowanieStylow;
end;
except
on E:Exception do begin end;
end;
end;
end;
// IncWiersz(1,0);
end;
if Tab[0,0].NrObrazka<>0 then begin
table.MergeCells(0,0,1,IleWierszy,FALSE);
bmp:=TBitmap.Create;
bmp.Assign(TabBmp[Tab[0,0].NrObrazka].Obrazek);
table.cells[0,0].Clear;
table.cells[0,0].AddPictureEx('',bmp,D_PadC,rvvaMiddle);
table.BorderWidth := 0;
table.CellBorderWidth := 0;
table.CellBorderColor :=clNone;
//bmp.Free; - powoduje blad
end;
// table.InsertRows(3,10,1,false);
// with table.Cells[2,0] do begin
// Clear;
// AddNL('Another example.',0,0);
// SetItemExtraIntProperty(ItemCount-1, rvepResizable, 1);
// AddNL('Width of table = 90% of document width. Widths of cells = 16%',0,0);
// end;
// table.BackgroundImageFileName:='d:\BDS2006\Apl\FVat\#\Polecenie.bmp';
if FileExists(PlikTla) then begin
bmpTlo := TBitmap.Create;
CzyBMP:=(FileExt(UpStr(PlikTla))='BMP');
if CzyBMP then begin
try
bmpTlo.LoadFromFile(PlikTla);
except
msgBox({self,}'Problem z za³adowaniem pliku:'+#13+#13+PlikTla, mfOK);
end;
end else begin
try
JPG := TJPEGImage.Create;
JPG.LoadFromFile(PlikTla);
bmpTlo.Assign(JPG);
// MS:=TMemoryStream.Create;
// JPG.SaveToStream(MS);
// bmpTlo.LoadFromStream(MS);
// MS.Free;
JPG.Free;
except
msgBox({self,}'Problem z za³adowaniem pliku:'+#13+#13+PlikTla, mfOK);
end;
end;
table.BackgroundImage := bmpTlo;
table.BackgroundStyle := rvbsStretched; //rvbsTiled;//rvbsCentered;//rvbsStretched;
bmpTlo.Free;
end;
table.BestWidth := Szerokosc;
RVE.AddItem('', table);
InicjujStyle;
end;
{---------------------------------------------------------------------------}
procedure TworzTabele(Styl:byte);
var
Wsp:double;
x,y:byte;
begin
Wsp:=1.00;
case Styl of
Arial_3: Wsp:=WspT_Arial3;
Arial_3b: Wsp:=WspT_Arial3b;
Arial_3i: Wsp:=WspT_Arial3i;
Arial_3bi: Wsp:=WspT_Arial3bi;
Arial_3u: Wsp:=WspT_Arial3u;
Arial_6: Wsp:=WspT_Arial6;
Arial_6b: Wsp:=WspT_Arial6b;
Arial_6i: Wsp:=WspT_Arial6i;
Arial_6bi: Wsp:=WspT_Arial6bi;
Arial_6u: Wsp:=WspT_Arial6u;
Arial_7: Wsp:=WspT_Arial7;
Arial_7b: Wsp:=WspT_Arial7b;
Arial_7i: Wsp:=WspT_Arial7i;
Arial_7bi: Wsp:=WspT_Arial7bi;
Arial_7u: Wsp:=WspT_Arial7u;
Arial_8: Wsp:=WspT_Arial8;
Arial_8b: Wsp:=WspT_Arial8b;
Arial_8i: Wsp:=WspT_Arial8i;
Arial_8bi: Wsp:=WspT_Arial8bi;
Arial_8u: Wsp:=WspT_Arial8u;
Arial_9: Wsp:=WspT_Arial9;
Arial_9b: Wsp:=WspT_Arial9b;
Arial_9i: Wsp:=WspT_Arial9i;
Arial_9bi: Wsp:=WspT_Arial9bi;
Arial_9u: Wsp:=WspT_Arial9u;
Arial_10: Wsp:=WspT_Arial10;
Arial_10b: Wsp:=WspT_Arial10b;
Arial_10i: Wsp:=WspT_Arial10i;
Arial_10bi: Wsp:=WspT_Arial10bi;
Arial_10u: Wsp:=WspT_Arial10u;
Arial_12: Wsp:=WspT_Arial12;
Arial_12b: Wsp:=WspT_Arial12b;
Arial_12i: Wsp:=WspT_Arial12i;
Arial_12bi: Wsp:=WspT_Arial12bi;
Arial_12u: Wsp:=WspT_Arial12u;
Arial_14: Wsp:=WspT_Arial14;
Arial_14b: Wsp:=WspT_Arial14b;
Arial_14i: Wsp:=WspT_Arial14i;
Arial_14bi: Wsp:=WspT_Arial14bi;
Arial_14u: Wsp:=WspT_Arial14u;
Curier_7: Wsp:=WspT_Curier7;
Curier_7b: Wsp:=WspT_Curier7b;
Curier_7i: Wsp:=WspT_Curier7i;
Curier_7bi: Wsp:=WspT_Curier7bi;
Curier_7u: Wsp:=WspT_Curier7u;
Curier_10: Wsp:=WspT_Curier10;
Curier_10b: Wsp:=WspT_Curier10b;
Curier_10i: Wsp:=WspT_Curier10i;
Curier_10bi: Wsp:=WspT_Curier10bi;
Curier_10u: Wsp:=WspT_Curier10u;
end;
NowaStrona(false);
InicjujTabele(Styl);
Zostalo:=0;
for x:=0 to 73 do begin
if CzyNowaStrona(Wsp,1,NrWierszaTab,Zostalo) and CzyPodzial
then begin
Tabela(NrWierszaTab,10,-100, D_PADL);
NowaStrona(False);
InicjujTabele(Styl);
end;
if NrWierszaTab=0 then begin
Tab[0,0].Szerokosc:=-5;
Tab[0,1].Szerokosc:=-15;
Tab[0,2].Szerokosc:=-12;
Tab[0,3].Szerokosc:=-12;
Tab[0,4].Szerokosc:=-10;
for y:=5 to 9 do begin
Tab[0,y].Szerokosc:=-5;
end;
end;
Tab[NrWierszaTab,0].Tresc:=intToStr(x+1);
Tab[NrWierszaTab,1].Tresc:=RVStyle1.TextStyles.Items[Styl].StyleName{+#182+#222};
Tab[NrWierszaTab,0].Pad :=D_PADR;
IncWiersz(1,NrWierszaTab);
Tab[NrWierszaTab,2].Tresc := realToStr(NrWiersza,2);
Tab[NrWierszaTab,3].Tresc := realToStr(Zostalo-Wsp,2);
Tab[NrWierszaTab,4].Tresc := realToStr(Wsp,2);
inc(NrWierszaTab);
end;
if NrWierszaTab>0 then Tabela(NrWierszaTab,10,-100, D_PADL);
end;