"Виртуальная библиотека Delphi" - читать интересную книгу автора

Object Pascal и Windows API

1. Можно ли использовать OWL в Delphi?

Можно, если уже существуют свои разработки с использованием OWL. Однако следует обратить внимание, не используются ли слова class, try, except и ряда других — в Delphi они являются зарезервированными. Если же опыта использования OWL не было, то вряд ли имеет смысл использование этой библиотеки — в Delphi существуют свои, более удобные средства для работы с Windows.

Компиляция приложений, написанных на BP7 с использованием OWL.

Компилятор Delphi способен компилировать приложения, написанные на OWL Borland Pascal 7.0. Для компиляции таких приложений в среде Delphi необходимо сделать следующее:

1. Откройте главный файл приложения пунктом меню File|Open Project

2. Добавьте в список используемых модулей uses модуль Messages в тех файлах, где использовался модуль WinTypes. Модуль Messages должен быть указан ранее модуля OWindows, ODialogs или любого другого OWL-модуля.

3. При помощи пункта меню Options|Project Dialog добавьте путь x:\DELPHI\SOURCE\RTL70 к пути поиска модулей данного проекта. Этот каталог должен содержать файлы OWL, измененные для компиляции в Delphi.

Если Вы забыли указать использование модуля Messages, то Вы при компиляции получите сообщение 'Unknown identifier'. Указание Messages после модуля OWindows вызовет сообщение 'Header does not match previous definition'.

Идентификатор Result теперь используется особым образом внутри тела функций, поэтому их внимательно посмотрите, где этот идентификатор может встречаться. Недопустимо использование перекрывающихся диапазонов в операторе case.

Изменилась реализация StrDispose. Если Вы распределяете память для строки при помощи GetMem, то освобождение этой области памяти при помощи StrDispose вызовет ошибку выполнения 'Runtime error 203'. Для распределения памяти для строк следует использовать функции StrAlloc или StrNew. Объекты OWL не ориентированы на обработку исключительных ситуаций, т.е. при возникновении таких ситуаций не происходит отката инициализации объектов. Мы не рекомендуем использование исключения в приложениях с OWL.

Компилятор теперь производит поиск модулей, ресурсов и OBJ файлов по пути, указываемому в каталогах OPTIONS|Project. Путь 'EXE and TPU directory' больше не поддерживается. EXE-файлы могут создаваться в 'Output directory', а файлы DCU всегда создаются в том каталоге, где находятся соответствующие файлы PAS. Новые модули WinTypes и Messages могут быть скомпилированы BP7. Для этого не требуется включения дополнительных директив $IFDEF (зато там есть $IFDEF WIN32;).


2. Как можно зааллокировать блоки памяти больше, чем 64 Кбайт?

Используйте GlobalAlloc и GlobalLock из модуля WinProcs.


3. GPF в ToolHelp.DLL в Win-OS/2 2.1.

Поставьте FixPack, или сделайте Upgrade на OS/2 Warp 3 FullPack.


4. Как получить из Clipboard текст большого размера?

Да, стандартный метод TClipboard.AsText ограничивает текст размером строки - 255 байт. Для получения текста длиной более 255 байт можно использовать, например следующую процедуру:

procedure GetLargeText: PChar

var

  Buffer: PChar;

  MyHandle: THandle;

  TextLength : Integer;

begin

  MyHandle := Clipboard.GetAsHandle(CF_TEXT);

  Buffer := GlobalLock(MyHandle);

  try

    Result := nil;

    if Buffer lt;gt; nil then

    begin

    { теперь у нас данные типа PChar -gt; мы можем работать

      с ними как с обычной Null-terminated строкой }

      TextLength := StrLen(Buffer);

      GetMem(Result, TextLength+1);

      StrCopy(Buffer, Result);

    end;

  finally

    GlobalUnlock(MyHandle);

  end;

end;


5. Проблемы Delphi с WinG.

Я слышал, что у Delphi проблемы с WinG, однако кто-то их решил?

Да, Майк Скотт (Mike Scott, [email protected]) даже написал коммерческий вариант VCL-компонентов, использующих WinG для Delphi:

WinG Sprite Kit.

Набор компонентов, осуществляющих доступ к WinG из Delphi. Включает компоненты TWinGCanvas для рисования TWinGDC и TWinGBitmap, TWinGSurface, которые можно поместить на форму и спрайтовый компонент, который можно помещать на них.

$99 EEP

Существует статья по использованию WinG в Borland Pascal — #5 Pascal Magazine. Обзор VCL WinG появится в новом Delphi Magazine. Отошлите письмо с вашим почтовым адресом на [email protected] для получения бесплатной копии этих журналов (наверняка из России это не сработает.