Багрепорт
Проблема была в 3-ей версии, в 4.1 она осталась.
Создаем новый отчет, помещаем на него бэнд с данными 1-го уровня. Ставим в середине бэнда memo1, с левого края memo2 (важен порядок создания). Устанавливаем memo2.
AutoWidth = True, memo1.Align = baLeft. Запускаем отчет и видим, что AutoWidth не сработало. Однако, при прокрутке за пределы экрана и обратно, AutoWidth срабатывает и memo1 прыгает к правому краю memo2.
Багофикс
Нужно разделить процедуры определения ширины текста и вывода memo на экран.
У TfrxCustomMemoView добавляем public метод: procedure SetAutoSize, в который перемещаем часть текста из SetDrawParams:
Код: [no]
procedure TfrxCustomMemoView.SetAutoSize;
var
SaveWidth: Extended;
FDrawText: TfrxDrawText;
begin
if Report <> nil then
FDrawText := Report.FDrawText else
FDrawText := frxDrawText;
if FHighlight.Active then
begin
FDrawText.SetFont(FHighlight.Font);
FColor := FHighlight.Color;
end
else
FDrawText.SetFont(FFont);
FDrawText.SetOptions(FWordWrap, FAllowHTMLTags, FRTLReading, FWordBreak,
FClipped, FWysiwyg, FRotation);
FDrawText.SetGaps(FParagraphGap, FCharSpacing, FLineSpacing);
if not IsDesigning then
if FAutoWidth then
begin
FDrawText.SetDimensions(1, 1, 1, Rect(0, 0, 10000, 10000), Rect(0, 0, 10000, 10000));
FDrawText.SetText(FMemo);
SaveWidth := Width;
Width := FDrawText.CalcWidth + AdjustCalcWidth;
if FHAlign = haRight then
Left := Left + SaveWidth - Width
else if FHAlign = haCenter then
Left := Left + (SaveWidth - Width) / 2;
if Parent <> nil then
Parent.AlignChildren;
end;
end;
[/no]
Проблема была в 3-ей версии, в 4.1 она осталась.
Создаем новый отчет, помещаем на него бэнд с данными 1-го уровня. Ставим в середине бэнда memo1, с левого края memo2 (важен порядок создания). Устанавливаем memo2.
AutoWidth = True, memo1.Align = baLeft. Запускаем отчет и видим, что AutoWidth не сработало. Однако, при прокрутке за пределы экрана и обратно, AutoWidth срабатывает и memo1 прыгает к правому краю memo2.
Багофикс
Нужно разделить процедуры определения ширины текста и вывода memo на экран.
У TfrxCustomMemoView добавляем public метод: procedure SetAutoSize, в который перемещаем часть текста из SetDrawParams:
Код: [no]
procedure TfrxCustomMemoView.SetAutoSize;
var
SaveWidth: Extended;
FDrawText: TfrxDrawText;
begin
if Report <> nil then
FDrawText := Report.FDrawText else
FDrawText := frxDrawText;
if FHighlight.Active then
begin
FDrawText.SetFont(FHighlight.Font);
FColor := FHighlight.Color;
end
else
FDrawText.SetFont(FFont);
FDrawText.SetOptions(FWordWrap, FAllowHTMLTags, FRTLReading, FWordBreak,
FClipped, FWysiwyg, FRotation);
FDrawText.SetGaps(FParagraphGap, FCharSpacing, FLineSpacing);
if not IsDesigning then
if FAutoWidth then
begin
FDrawText.SetDimensions(1, 1, 1, Rect(0, 0, 10000, 10000), Rect(0, 0, 10000, 10000));
FDrawText.SetText(FMemo);
SaveWidth := Width;
Width := FDrawText.CalcWidth + AdjustCalcWidth;
if FHAlign = haRight then
Left := Left + SaveWidth - Width
else if FHAlign = haCenter then
Left := Left + (SaveWidth - Width) / 2;
if Parent <> nil then
Parent.AlignChildren;
end;
end;
[/no]