5. Что насчет VBX-компонентов для работы с данными?
Delphi поддерживает только VBX 1.0. Это значит что VBX для работы с данными 'не работает' с Delphi. В общем случае, все, что работает с Microsoft Visual C++, должно работать в Delphi. Кроме того, некоторые VBX достаточно хорошо написаны, так что их можно использовать в 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 байт можно использовать, например следующую процедуру:
procedureGetLargeText: PChar
var
Buffer: PChar;
MyHandle: THandle;
TextLength : Integer;
begin
MyHandle := Clipboard.GetAsHandle(CF_TEXT);
Buffer := GlobalLock(MyHandle);
try
Result := nil;
ifBuffer <> nil then
begin
{ теперь у нас данные типа PChar -> мы можем работать
с ними как с обычной 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, 100140.2420@compuserve.com) даже написал коммерческий вариант VCL-компонентов, использующих WinG для Delphi:
WinG Sprite Kit.
Набор компонентов, осуществляющих доступ к WinG из Delphi. Включает компоненты TWinGCanvas для рисования TWinGDC и TWinGBitmap , TWinGSurface , которые можно поместить на форму и спрайтовый компонент, который можно помещать на них.
Читать дальше