Доброго всем времени суток. Обращаюсь за помощью к специалистам.
Не знаю куда писать: программа сама написана на делфи, а скрипт на паскале - решил сюда.
Проблема в следующем: есть один DBCrosstab, справа от него я питаюсь рисовать Crosstаb с такою же высотою строк - все вроде получаеться, но когда я пытаюсь изменить высоту заглавия Crosstаb, то высота строк выщитывается от прежней высоты заглавия. Пример этого 1я картинка. 2я картинка - без изменения высоты заглавия.
Вот сам код скрипта на паскале - подскажите, пожалуйста, как сделать, что бы строки отображались нужным образом - высоту строк DBCrosstab я записываю в массив, а потом из него задаю высоту строк Crosstаb.
var Sum0, Sum1, Sum2, i: Integer;
b: array of Integer;
HeightArr: array of Extended;
HeightHead:Extended;
procedure DBCross1OnPrintCell(Memo: TfrxMemoView; RowIndex, ColumnIndex, CellIndex: Integer; RowValues, ColumnValues, Value: Variant);
var s, numRow, numCol:Integer;
var a: array of integer;
begin
SetLength(a,DBCross1.RowCount);
SetLength(b,DBCross1.RowCount);
numRow:=DBCross1.RowCount;
numCol:=DBCross1.ColCount;
if ColumnIndex = DBCross1.ColCount-1 then
begin
a[RowIndex]:=Value;
b[RowIndex]:=Value;
Sum0:=Sum0+Value;
//ShowMessage('a['+vartostr(RowIndex)+']='+ vartostr(a[RowIndex]));
end;
if (RowIndex = DBCross1.RowCount-1) AND (ColumnIndex = DBCross1.ColCount-1) then
begin
//ShowMessage('OK='+ vartostr(RowIndex));
s:=0;
for i:=0 to DBCross1.RowCount-1 do
begin
s:=s+a[i];
end;
//ShowMessage('sum='+ vartostr(sum));
Memo2.Text:='Загальна кількість: '+vartostr(s);
Memo4.Text:=vartostr(s);
end;
end;
procedure DBCross1OnPrintColumnHeader(Memo: TfrxMemoView; HeaderIndexes, HeaderValues, Value: Variant);
begin
//ShowMessage('Value='+ vartostr(Value));
//ShowMessage('Memo='+ vartostr(Memo.Height));
HeightHead:=Memo.Height;
end;
//Обчислення ваги кожного рядка
procedure Cross1OnBeforePrint(Sender: TfrxComponent);
begin
for i:=0 to DBCross1.RowCount-1 do
begin
with Cross1 do
begin
AddValue([i+1], ['Вага, %'], [(b[i]/Sum0)*100]);
//AddValue([i+1], ['№, п/п'], [i+1]);
end;
end;
end;
//Обчислення висоти рядків DBCross1
procedure DBCross1OnCalcHeight(RowIndex: Integer; RowValues: Variant; var Height: Extended);
begin
SetLength(HeightArr,DBCross1.RowCount);
HeightArr[RowIndex]:=Height;
end;
//Обчислення висоти рядків "Вага"
procedure Cross1OnCalcHeight(RowIndex: Integer; RowValues: Variant; var Height: Extended);
begin
Height:=HeightArr[RowIndex];
end;
procedure Memo3OnBeforePrint(Sender: TfrxComponent);
begin
Memo3.Text:= ;
end;
procedure Cross1OnPrintColumnHeader(Memo: TfrxMemoView; HeaderIndexes, HeaderValues, Value: Variant);
begin
Memo.Height:=HeightHead;
end;
procedure DBCross1OnAfterData(Sender: TfrxComponent);
begin
//ShowMessage('DBCross1.RowCount2=');
SetLength(HeightArr,DBCross1.RowCount);
//ShowMessage('DBCross1.RowCount3='+vartostr(DBCross1.RowCount));
end;
begin
Sum0 := 0;
Sum1 := 0;
Sum2 := 0;
SetLength(HeightArr,1);
//ShowMessage('DBCross1.RowCount1='+vartostr(DBCross1.RowCount));
end.
А вот еще одна проблема: если количество строк небольшое, то все отображается нормально - DBCross возле Cross, а если строк больше чем может уместиться на одной странице, то на следущей странице отображается только DBCross, а после ее окончания на следущей странице Cross. Пример виден у пдф-файле.
Буду очень благодарен за советы.
Забыл написать, что делаю это все в Fast Report 4.