Fr4: Av And Others

отредактировано 20:54 Раздел: FastReport 4.0
01) frxExportImage.pas - EMF AV

procedure TfrxEMFExport.StartPage(Page: TfrxReportPage; Index: Integer);
...
begin
...
FMetafile := TMetafile.Create;
FDiv := EMF_DIV;
FMetafileCanvas.Brush.Color := clWhite; // AV - обращение до создания
...
FMetafileCanvas := TMetafileCanvas.Create(FMetafile, 0);

02) frxClass.pas - Поддержка графических форматов D2010
// из темы: http://fast-report.com/ru/forum/index.php?showtopic=7274
function TfrxPictureView.LoadPictureFromStream(s: TStream; ResetStreamPos: Boolean): Hresult;
...
if not bOK then
begin
if (s.Size-pos) >= SizeOf(ICOHeader) then
begin
// try icon header
s.ReadBuffer(ICOHeader, SizeOf(ICOHeader));
s.Position := pos;
if ICOHeader.wType in [RC3_STOCKICON, RC3_ICON] then
NewGraphic := TIcon.Create;
end;
end;
{+}
{$IFDEF Delphi14}
//http://fast-report.com/ru/forum/index.php?showtopic=7274
if not bOK then
begin
NewGraphic := TWICImage.Create;
bOK := True;
end;
{$ENDIF Delphi14}
{+.}
end;

if NewGraphic <> nil then
begin
FPicture.Graphic := NewGraphic;
NewGraphic.Free;
FPicture.Graphic.LoadFromStream(s);
Result := S_OK;
end
else
begin
FPicture.Assign(nil);
Result := E_INVALIDARG;
end;
// workaround pngimage bug
{$IFDEF PNG}
if FPicture.Graphic is TPngObject then
PictureChanged(nil);
{$ENDIF}
end;

03) frxDBSet.pas - AV. See {+}new/modified code{+.}
TfrxDataSet - при смене DataSet/DataSource - могут быть AV из-за несоответствия полей. В коде FR предусмотрены соответствующие предупреждения, но похоже в процессе развития забыли проверки на nil.

function TfrxDBDataset.GetDisplayText(Index: String): WideString;
...
var
i: Integer;
s: WideString;
begin
s := '';
if not FInitialized then
Open;
if DataSetActive then
if Fields.Count = 0 then
s := FDS.FieldByName(Index).DisplayText
else
begin
i := Fields.IndexOf(Index);
{+}
if (i <> -1) and Assigned(Fields.Objects) then
{+.}
...

function TfrxDBDataset.GetValue(Index: String): Variant;
var
i: Integer;
v: Variant;
begin
if not FInitialized then
Open;
i := Fields.IndexOf(Index);
{+}
if (i <> -1) and Assigned(Fields.Objects) then
{+.}

04) frxDesgn.pas. See {+}new/modified code{+.}

procedure TfrxDesignerForm.DoTopmosts(Enable: Boolean);
var
fStyle: UINT;

procedure SetFormStyle(Control: TWinControl);
begin
if Control is TToolBar then
if Control.Floating then
Control := Control.Parent
else
Exit;
{+} // при отладке тут часто возникает исключение о невозможности ...
try
SetWindowPos(Control.Handle, fStyle, 0, 0, 0, 0, SWP_NOMOVE or
SWP_NOSIZE or SWP_NOACTIVATE or SWP_NOOWNERZORDER);
except
end;
{+.}
end;
...

05) frxDesgn.pas - код привязан к количеству элементов в списке. Лучше его привязать к 2-м последним элементам.

procedure TfrxDesignerForm.ScaleCBClick(Sender: TObject);
var
s: String;
dx, dy: Integer;
begin
if ScaleCB.ItemIndex = {+}ScaleCB.Items.Count-2{6{+.} then
s := IntToStr(Round((ScrollBox.Width - 40) / (TfrxReportPage(FPage).PaperWidth * 96 / 25.4) * 100))
else if ScaleCB.ItemIndex = {+}ScaleCB.Items.Count-1{7{+.} then


06) масштаб в дизайнере/вьювере нельзя задать вручную

07) frxrcDesgn.xml
нет Русского/Украинского ресурса
<StrRes Name="4729" Text="Templates path :"/>

08) Exceptions
Не удобно отлаживать приложения из-за невозможности фильтровать исключения FR, т.к. для них не предусмотрено своё имя.
ввведите плиз свой тип исключаний EFastReport - тогда будет удобно в отладчике отключать исключения FR.

В barcode перобразование строки к числу лучше сделать без возможности системного Exception. А то при подвязке к DataSet - от количества exception-ов можно повеситься- лучше сделать через TryStrToInt.

09) frxPreview.pas
Для класса TfrxPreview просьба открыть доступ к полю FRunning:
property Running: Boolean read FRunning;
Необходимость - создание панели кнопок как в отдельном просмотрщике.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.