Objects[col,row]

Top  Previous  Next

Sheet.Objects[col,row] je indexovaný kontejner který udržuje ukazatele na nějaký objekt, komponentu, record a podobně (nezaměňovat s CellComponent). Nejlépe si použití osvětlíme na příkladu.

 

 

Tento report stiskem tlačítka "Copy" zkopíruje obsah buňek A1,B1,C1 do jednoho objektu typu TParams a uloží ho do Objects buňky A1 [1,1]. Tlačítko Paste poté z Sheet.Objects A1 [1,1] vyčte params a naplní buňky A5,B5,C5 příslušnými hodnotami z params.

 

Skript reportu:

obsahuje 2 události pro tlačítka Copy a Paste, které jsou přiřazeny v události OnPrepareScript události Onclick příslušného tlačítka,

událost copyClick vytvoří TParam a pod jmény A,B,C uloží obsah buněk do příslušných param. Sheet.Objects[1,1]:=Parms potom tento param přiřadí indexované proměnné Objects na souřadnici A1 [1,1]

událost pasteClick naplní potom Formulas buněk A5:C5 příslušnými hodnotami a Sheet.Eval(False); vyvolá přepočet reportu a tím i naplnění Cells pro zobrazení. Pokud bychom ve skriptu naplnili namísto Formulas jen Cells změna by se projevila okamžitě a není třeba volat Eval, ale po stisku F9 by naplněná data z A5,B5 a C5 zmizela protože Formulas je prázdné, řešením je naplnit jak Cells tak Formulas a Eval potom lze vynechat. Skript neřeší uvolnění paměti opakovaně alokované TParams událostí copyClick.

 

procedure copyClick(Sender : TButton);

var    

 Parms: TParams;

begin

 Parms := TParams.Create;

 

   with TParam.Create(Parms) do

   begin

     Name := 'A';

     DataType:= ftString;

     AsString := Sheet.CellByName('A1');                    

   end;

   with TParam.Create(Parms) do

   begin

     Name := 'B';

     DataType:= ftString;

     AsString := Sheet.CellByName('B1');                    

   end;

   with TParam.Create(Parms) do

   begin

     Name := 'C';

     DataType:= ftString;

     AsString := Sheet.CellByName('C1')                  

   end;

   // Uloz do Objects                                      

   Sheet.Objects[1,1]:=Parms;  

end;

 

procedure pasteClick(Sender : TButton);

var    

 Parms: TParams;

begin

 If Sheet.Objects[1,1]<>nil then

 begin            

   Parms := TParams(Sheet.Objects[1,1]);

 

   Sheet.Formulas[1,5]:=Parms.ParamByName('A').AsString;

   Sheet.Formulas[2,5]:=Parms.ParamByName('B').AsString;

   Sheet.Formulas[3,5]:=Parms.ParamByName('C').AsString;

   Sheet.Eval(False);                            

 end;                

end;            

 

 

procedure OnPrepareScript(Sender : TReportProperty);

begin

 If Sheet.GetCellProperty('D1').CellComponent<>nil then

 TButton(Sheet.GetCellProperty('D1').CellComponent).OnClick:=@copyClick;

 

 If Sheet.GetCellProperty('D2').CellComponent<>nil then

 TButton(Sheet.GetCellProperty('D2').CellComponent).OnClick:=@pasteClick;                                                                                      

end;

 

begin

end.