Доброго всем времени суток. Обращаюсь за помощью к специалистам.
Не знаю куда писать: программа сама написана на делфи, а скрипт на паскале - решил сюда.
Проблема в следующем: есть один 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.

Нравится

2 комментария

Владимир, поскольку Ваш вопрос не затрагивает линейку программных продуктов Terrasoft, эффективнее будет его рассматривать на профильном форуме (например, на форуме FastReport).
Нам же в данном случае достаточно сложно Вам помочь, так как недостаточно вводной информации и отсутствуют конфигурационные сервисы Terrasoft, используя которые мы можем провести тестирование.

Показать все комментарии