на главную | войти | регистрация | DMCA | контакты | справка | donate |      

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я


моя полка | жанры | рекомендуем | рейтинг книг | рейтинг авторов | впечатления | новое | форум | сборники | читалки | авторам | добавить



Разное

1. Передача переменной в отчет ReportSmith.

Следующий код показывает, как передать переменную в отчет.

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

procedure TForm1.Button1Click(Sender: TObject); 

begin 

  Report1.InitialValues.Clear; 

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

  Report1.Run; 

end;


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

Виртуальная библиотека Delphi

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

SystemFont = Courier New Cyr

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

Виртуальная библиотека Delphi

Действительно, если у Вас 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

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

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

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

function InIDE: Boolean; 

begin 

  Result := Bool(PrefixSeg) and Bool(PWordArray(MemL[DSeg:36])^[8])); 

;end   


6. Что нужно предусмотреть при разработке приложения, которое будет работать при различном разрешении дисплея?

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

1. Если вы не собираетесь делать форму масштабируемой, установите свойство Scaled=False и дальше не читайте.

2. В противном случае Scaled=True.

 1. Установите AutoScroll=False. AutoScroll = True означает 'не менять размер окна формы при выполнении' что не очень хорошо выглядит, когда содержимое формы размер меняет.

 2. Установите шрифты в форме на самые распространенные TrueType шрифты, например Arial, Times New Roman, Courier. Если вдруг выбранного шрифта не окажется на пользовательском компьютере, то Windows выберет альтернативный шрифт из того же семейства. Этот шрифт может не совпадать по размерус исходным, что вызовет проблемы.

 3. Установите св-во Position в любое значение, отличное от poDesigned. poDesigned оставляет форму там, где она была во время дизайна, и, например, при разрешении 1280x1024 форма может оказаться в левом верхнем углу и совершенно за экраном при 640x480.

 4. Оставляйте по крайней мере 4 точки между компонентами, чтобы при смене положения границы на одну позицию компоненты не "наезжали" друг на друга.

 5. Для однострочных меток TLabel с выравниванием alLeft или alRight установите AutoSize=True. Иначе AutoSize=False. Убедитесь, что достаточно пустого места у TLabel для изменения ширины фонта — 25% пустого места многовато, зато безопасно. При AutoSize=False Убедитесь, что ширина метки правильная, при AutoSize=True убедитесь, что есть свободное место для роста метки.

 7. Для многострочных меток (word-wrapped labels), оставьте хотя бы одну пустую строку снизу.

 8. Будьте осторожны при открытии проекта в среде Delphi при разных разрешениях. Свойство PixelsPerInch меняется при открытии формы. Лучше тестировать приложения при разных разрешениях, запуская готовый скомпилированный проект, а редактировать его при одном разрешении. Иначе это вызовет проблемы с размерами. Не изменяйте свойство PixelsPerInch самостоятельно!

 9. В общем, нет необходимости тестировать приложение для каждого разрешения в отдельности, но стоит проверить его на 640x480 с маленькими и большими шрифтами и на более высоком разрешении перед продажей.

 10. Уделите пристальное внимание принципиально однострочным компонентам типа TDBLookupCombo. Многострочные компоненты всегда показывают только целые строки, а TEdit покажет урезанную снизу строку. Каждый компонент лучше сделать на несколько точек больше. Даже при выполнении перечисленных инструкций, у вас могут возникнуть проблемы при переходе, например от Large fonts к Small fonts в Windows 95 при одном и том же разрешении. Бороться с этим помогают специально для этого разработанные компоненты. Если же вы решите самостоятельно изменять размеры компонентов, лежащих на форме, то вам могут помочь методы TCanvas.TextWidth и TCanvas.TextHeight.


7. Конвертация ICO в BMP.

Виртуальная библиотека Delphi

Я создают toolbar, у меня есть иконки, но нет картинок в виде bitmap. Помогите!

Виртуальная библиотека Delphi

Для преобразования файлов из одного формата в другой лучше всего иметь что-нибудь вроде HiJaak, который может преобразовывать форматы напрямую. Однако, будем считать, что у вас нет ничего, кроме Windows и Delphi. Следующая процедура может использоваться чтобы преобразовывать иконку в формат Windows Bitmap:

1. Покажите на экране иконку. Не имеет значения, как вы это сделаете.

2. Нажмите Alt-PrintScreen, чтобы скопировать текущее окно в буфер Clipboard.

3. Загрузите Paintbrush и сделайте Edit/Paste.

4. Выберите нужный кусок изображения и сделайте Edit/Copy. Перейдите к пункту Options/Image Attributes и установите размер области 32x32 точки.

5. Снова сделайте Edit/Paste.

6. Сохраните результат как BMP файл.

Лучше всего для редактирования и создания ресурсов (икон, картинок и т.п.) подходит Resource Workshop. Он включен в состав пакетов Borland Pascal 7.0 или Borland C++ 4.5, а также интегрирован в Borland C++ 5.0.

Виртуальная библиотека Delphi

В Delphi 1.0 есть специальный файл (X:\DELPHI\BIN\WORKOPT.DOS) который необходимо поместить в каталог, где находится Workshop — в этом случае последний будет "понимать" ресурсы, создаваемые Delphi 1.0 (например *.DCR).


8. Когда используется свойство Glyph, как узнать, какой цвет прозрачный?

Delphi всегда принимает, что цвет пикселя в левом нижнем углу картинки является фоновым цветом и должен отображаться на экране как прозрачный. Это нигде не документировано, но если у вас есть исходники VCL, вы можете посмотреть код в BUTTONS.PAS .


9. Как отобразить bitmap в 256 цветах?

Виртуальная библиотека Delphi

Как подгрузить 256 цветный bitmap из ресурса и отобразить его в нормальной палитре?

Виртуальная библиотека Delphi

Обычно это делается следующим образом. Код Вадима Пузанова (Красноярск).

Image1.Bitmap.Handle := LoadBitmap(hInstance, 'BMP_NAME');

LoadBitmap загружает только картинку, без палитры. Если палитра у картинки отличается от системной, то ее надо устанавливать "вручную". Могут возникнуть проблемы, если на одной форме расположены две картинки с разными палитрами.

procedure XLoadBitmap(Instance: THandle; BitmapName: PChar; var HB: HBitmap; var HP: Palette); 

var 

  DC: HDC; 

  BI: PBitMapInfo; 

  Pal: PLogPalette; 

  I: Integer; 

  ResIdHandle: THandle; 

  ResDataHandle: THandle; 

  Bitmap: HBitmap; 

  C: HWnd; 

  OldPalette, Palette: HPalette; 

begin 

  Bitmap := 0; 

  Palette := 0; 

  HB := 0; 

  HP := 0; 

{ Получить ресурс из модуля } 

  ResIDHandle := FindResource(Instance, BitmapName, RT_BITMAP); 

  if ResIDHandle <> 0 then 

  begin 

    ResDataHandle := LoadResource(Instance, ResIDHandle); 

    if ResDataHandle <> 0 then  

    begin 

      BI := LockResource(ResDataHandle); 

      if BI <> nil then 

      begin 

      { 256-цветный битмап? } 

        if BI^.bmiHeader.biBitCount = 8 then 

        begin 

        { Создать палитру } 

          GetMem(Pal, SizeOf(TLogPalette) + 256*SizeOf(TPaletteEntry)); 

          for I := 0 to 255 do with Pal^.palPalEntry[I] do 

          begin 

            peRed  := BI^.bmiColors[I].rgbRed; 

            peGreen:= BI^.bmiColors[I].rgbGreen; 

            peBlue := BI^.bmiColors[I].rgbBlue; 

            peFlags:= 0; 

          end

          Pal^.palNumEntries := 256; 

          Pal^.palVersion := $300; 

          Palette := CreatePalette(Pal^); 

          FreeMem(Pal, SizeOf(TLogPalette) + 256 * SizeOf(TPaletteEntry)); 

        { Привести цвета палитры в системные } 

          DC := CreateDC('Display', nil, nil, nil); 

          OldPalette := SelectPalette(DC, Palette, False); 

          UnrealizeObject(Palette); 

          RealizePalette(DC); 

        { Создать битмап } 

          BitMap:= CreateDIBitmap(DC, BI^.bmiHeader, CBM_INIT, 

            @PByteArray(BI)^[SizeOf(TBitMapInfo) + SizeOf(TRGBQuad) * 256 - 4], BI^, DIB_RGB_COLORS); 

        { Освободить ресурсы } 

          UnlockResource(ResDataHandle); 

          FreeResource(ResDataHandle); 

          SelectPalette(DC, OldPalette, False); 

          DeleteDC(DC); 

        end else  

        begin 

        { Не 256-цветный битмап } 

          UnlockResource(ResDataHandle); 

          FreeResource(ResDataHandle); 

          BitMap := LoadBitmap(Instance, BitmapName); 

        end

        HB := Bitmap; 

        HP := Palette; 

      end

    end

  end

end

procedure TForm1.FormCreate(Sender: TObject); 

var 

  HB: HBitmap; 

  HP: HPalette; 

begin 

  XLoadBitmap(hInstance, 'PHOTO', HB, HP); 

  Image1.Picture.Bitmap.Handle  := HB; 

  Image1.Picture.Bitmap.Palette := HP; 

end


10. Если я хочу рассылать EXE файл, созданный в Delphi, какие еще файлы нужно посылать с ним?

Hикакие. Все компилируется в .EXE файл. Конечно, если вы разработали другие файлы (HLP, данные и т.д. ), или если вы используете VBX/OCX файлы, тогда вы должны распространять и их заодно. Если вы используете файлы VBX, то в поставку нужно также включать BIVBX11.DLL.

Если приложение использует функции BDE, вы также должны включать Borland DataBase Engine.


Object Pascal и Windows API | Виртуальная библиотека Delphi | Полезные хитрости