В примере строковой переменной отчета 'City' присваивается значение 'Bombey'. Подразумевается, что есть готовый отчет с данной переменной. Поместите компонент TReport на форму и установите требуемые свойства для вызова печати отчета. Напишите обработчик OnClick для кнопки Button1 на форме (кнопка — для простоты):

procedure TForm1.Button1Click(Sender: TObject); 

begin 

  Report1.InitialValues.Clear; 

  Report1.InitialValues.Add('@City='); 

  Report1.Run; 

end;

2. Как получить русские буквы в DBD?

Имя шрифта для отображения русских букв берется из файла PDOXWIN.INI секция [Properties] строка SystemFont. Если очень хочется, то можно исправить имя 'PDOXWIN.INI' на 'DBD.INI' в файле DBSRV.DLL (он лежит там же где и DBD.EXE) по смещению $E9D8 (не забудьте после 'DBD.INI' поставить шестнадцатеричный ноль), и в секции [Properties] файла DBD.INI добавить строку типа

SystemFont = Courier New Cyr

По умолчанию имя фонта для отображения русских букв — Arial.

Действительно, если у Вас Pan Euro или русская версия Windows95, то DBD не будет показывать шрифты Cyr в Preferences/General/Default system font.

Решить эту проблему можно двумя способами:

1. записать в каталог WINDOWS/FONTS шрифты Arial Cyr от русских Windows и сделать ShutDown. После загрузки Arial Cyr будет доступен для выбора.

2. поменять шрифт в Registry вручную например на MS Sans Serif - HKEY_CURRENT_USER/SOFTWARE/Borland/DBD/7.0/Preferences/Properties ключ SystemFont.

3. Как печатать отчеты из приложения Delphi без использования ReportSmith?

1. Лучше всего использовать специализированные генераторы отчетов в виде компонентов, например QuickReport или Ace Reporter.

2. Можно использовать печать формы, например: Form1.Print.

3. Можно использовать свойство Canvas объекта Printer.

4. Как узнать количество точек на дюйм для принтера?

VertPixelsPerInch := GetDeviceCaps(Printer.Handle, LogPixelsX);

HorzPixelsPerInch := GetDeviceCaps(Printer.Handle, LogPixelsY);

5. Как определить, приложение запущено из под Delphi IDE или как отдельный файл?

Для этого следует проверить существование определенных окон:

Delphi 1.0

function DelphiLoaded: Boolean; 

  function WindowExists(ClassName, WindowName: string): Boolean; 

  var 

    PClassName, PWindowName: PChar; 

    AClassName, AWindowName: array [0..63] of Char; 

  begin 

    if ClassName = '' then PClassName := nil 

    else PClassName := StrPCopy(@AClassName[0], ClassName); 

    if WindowName = '' then PWindowName := nil 

    else PWindowName := StrPCopy(@AWindowName[0], WindowName); 

    Result :=  FindWindow(PClassName, PWindowName) <> 0; 

  end

begin 

  Result := WindowExists('TPropertyInspector', 'Object Inspector'

        and WindowExists('TMenuBuilder', 'Menu Designer'

        and WindowExists('TApplication', 'Delphi'

        and WindowExists('TAlignPalette', 'Align'

        and WindowExists('TAppBuilder', ''); 

end

Delphi 2.0

function DelphiLoaded: Boolean; 

  function WindowExists(ClassName, WindowName: string): Boolean; 

  begin 

    Result :=  FindWindow(PChar(ClassName), PChar(WindowName)) <> 0; 

  end

begin 

  Result := WindowExists('TPropertyInspector', 'Object Inspector'

        and WindowExists('TMenuBuilder', 'Menu Designer'

        and WindowExists('TApplication', 'Delphi'

        and WindowExists('TAlignPalette', 'Align'

        and WindowExists('TAppBuilder', ''); 

end

Другой вариант для Delphi 1.0, работает только в EXE файлах (не в DLL).

function InIDE: Boolean; 

begin 

Перейти на страницу:

Похожие книги