Читать «Виртуальная библиотека Delphi» онлайн - страница 143

Unknown

          ShowMessage('Ошибка   вывода отчета');

end;

end.

Следует помнить, что строковые параметры, передаваемые в функции Print Engine API, представляют собой тип данных PChar, а не стандартные строки, используемые в Pascal, поэтому для передачи таких параметров, как, например, имя отчета, следует осуществить преобразование типов с помощью функции StrPCopy. Для успешной компиляции подобных приложений файл CRPE32.PAS должен находиться в том же каталоге, что и разрабатываемое приложение, либо в каталоге Delphi\Lib.

2. Использование VCL-компонента и комплекта поставки (для этого следует установить его в палитру компонентов Delphi). Естественно, этот компонент инкапсулирует те же самые функции Print Engine API. Существуют также аналогичные компоненты третьих фирм (например, компонент от SupraSoft Ltd., http://www.suprasoft.com).

3. Использование элемента управления Crystal Reports ActiveX. Этот элемент управления может быть установлен в палитру компонентов Delphi. Он обладает набором свойств и методов, более или менее сходным с соответствующим VCL-компонентом из комплекта поставки Crystal Reports Professional.

5. Использование Crystal Reports как сервера автоматизации. В справочной системе Crystal Reports имеется подробное описание иерархии вложенных объектов и их методов (и внушительный набор примеров для Visual Basic, аналоги которых несложно создать и на Pascal). Ниже приведен пример соответствующего кода:

procedure TForm1.Button1Click(Sender: TObject);

var r,rep: Variant;

begin

     rep:=CreateOleObject('Crystal.CRPE.Application');

     r:=rep.OpenReport('d:\Report2.rpt');

     r.RecordSelectionFormula := '{items.ItemNo} = '+Edit1.Text;

     r.Preview;

     r:=Unassigned;

     rep:=Unassigned;

end;

6. Можно также сделать отчет в виде исполняемого файла и вызвать его из приложения. Но в этом случае в отчет не удастся передать параметры.

Delphi VCL FAQ

Вопрос:

Как разместить прозрачную надпись на TBitmap?

Пример:

procedure TForm1.Button1Click(Sender: TObject);

var

 OldBkMode : integer;

begin

 Image1.Picture.Bitmap.Canvas.Font.Color := clBlue;

 OldBkMode := SetBkMode(Image1.Picture.Bitmap.Canvas.Handle,TRANSPARENT);

 Image1.Picture.Bitmap.Canvas.TextOut(10, 10, 'Hello');

 SetBkMode(Image1.Picture.Bitmap.Canvas.Handle,OldBkMode);

end;

Вопрос:

Можно ли обратиться к колонке или строке grid'а по заголовку?

Ответ:

В следующем примере приведены две функции: GetGridColumnByName() и GetGridRowByName(), которые возвращают колонку или строку, имеющую заданный заголовок (caption).

Пример:

procedure TForm1.FormCreate(Sender: TObject);

begin

 StringGrid1.Rows[1].Strings[0] := 'This Row';

 StringGrid1.Cols[1].Strings[0] := 'This Column';

end;

function GetGridColumnByName(Grid : TStringGrid; ColName : string): integer;