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. |