Часто задаваемые вопросы по Borland Delphi 1.0 Delphi 1.0 Вопросы общего характера
1. Какие существуют варианты поставки Delphi 1.0? Версия Delphi 1.0 имеет два варианта: Delphi Desktop и Delphi Client/Server. Версия Delphi 1.0 Desktop включает:
** Версия ReportSmith из Delphi Desktop специально обнаруживает и исключает из списка возможных соединений любой ODBC драйвер к удаленному серверу данных. Да, вы не ослышались. Даже если вы купили ODBC драйвер третьей фирмы, и даже если вы можете прекрасно общаться с этим драйвером из Delphi, ReportSmith еще не будет с ним работать. Если вы хотите сделать это без покупки Delphi Client/Server , вы может купить ReportSmith/SQL отдельно за $300 (и тем не менее приобретете ReportSmith версии 2.0, а не 2.5, как в поставке Delphi Client/Server) . На данный момент версия Delphi 1.0 фирмой Borland отдельно не поставляется
и имеется только в составе старших версий продукта.
Delphi может создавать EXE- и DLL-файлы для Windows 3.1. Естественно, Вы может также создавать VBX, но для этого нужно знать соглашения по написанию DLL в формате VBX. Имеется информация о написании VBX для Borland Pascal for Windows, которая с небольшими изменениями подходит и для Delphi. Delphi не создает EXE-файлы для DOS.
Что касается визуальных компонент, то все они, включая меню, допускают надписи (Caption) и ввод киррилицей; "горячие клавиши" тоже могут быть русские, например комбинация Alt-Ф для пункта меню &Файл (конечно, должен быть включен драйвер русской клавиатуры). Для работы с таблицами нужно в утилите конфигурации BDE установить:
Поскольку используются разные версии Windows (Eng, Rus, Win-OS2, Win95, WinNT), способы могут быть как разными, так и общими (Windows есть Windows). Сначала опишем действия, необходимые для русификации Windows:
В русских Windows можно совершенно безболезненно удалить (при помощи Control Panel/Fonts) шрифты, имеющие в названии окончание CE (напр. Arial CE) - это сербо-хорватские шрифты, которые вам вряд-ли когда понадобятся (русских букв там нет). Далее, возможные варианты работы с русскими буквами в редакторе Delphi. Нельзя в Windows выставлять TrueType fonts only - редактор использует только FixedFonts, в результате Delphi просто не будет работать.
4. Какую модель данных использует Delphi? Delphi использует смешанную (mixed) модель памяти, но она очень похожа на модель large в C.С++:
5. Можно ли использовать в приложении ресурсы, созданные в BPW 7.0? Все ресурсы, созданные в других приложениях, можно подключить и использовать
в Delphi с помощью директивы компилятора {$R ...} и процедур
Windows API. Кроме того, меню из файла ресурсов и графические файлы *.BMP,
*.ICO и *.WMF можно импортировать в приложение Delphi на этапе разработки.
В настоящее время компанией Borland поставляется программный продукт RAD
Pack for Delphi, где в состав поставки входит эксперт, позволяющий преобразовывать
ресурсы из BP7.0 в формы Delphi.
Для создания программы, работающей как Screen Saver:
7. Как Delphi обрабатывает функции обратного вызова Windows (сallback)? Точно так же как C: вы можете получить указатель (far pointer)
на вашу callback процедуру (не забыть при этом обьявить ее с директивой
компилятора {$F+}, либо спецификатором far) и передать
этот указатель в Windows. Это все.
1. Есть ли в Delphi эквивалент массива элементов управления из Visual Basic? Hет. Компоненты Delphi не имеют свойства Index, подобное VB. Однако, имеются три основные причины, почему вы хотите использовать их в VB, и для каждой из них есть решение в Delphi. Причина 1. Вы хотите использовать один обработчик события для разных компонент на форме. Это просто. Все, что вы должны сделать - это выбрать тот же самый обработчик для каждой визуальной компоненты. Это лучше, чем в случае с массивом компонент, потому что вы можете одну и ту же процедуру-обработчик события присвоить различным типам компонент; например, кнопка на форме и пункт меню могут вызывать ту же самую функцию для обработки события OnClick. Причина 2. Вы хотите динамически создавать и уничтожать визуальные компоненты во время выполнения программы. Это также довольно просто в Delphi . Предположим, что на форме есть кнопка, и, каждый раз когда она нажимается, вы хотите создавать другую кнопку. Следующий пример показывается, как это делать:
var NewButton: TButton; begin NewButton := TButton.Create(Self); NewButton.Parent := Self; end; Предположим, что вы решили написать игру вроде Реверси в Delphi. Вам нужно разместить 100 объектов TShape на форме, в виде квадрата 10x10. Конечно, размещать каждый элемент вручную на экране - задача трудоемкая и неинтересная, при этом, в декларации формы появляется 100 строк кода, которые, в общем-то, не нужны. Вместо этого можно завести массив вроде
Если же вы не используете такие большие массивы, т.е., например хотите
одинаково реагировать на нажатие 3-5 кнопок с незначительным различием
для каждой из них, то можно использовать свойство Tag.
Допустим, вы написали на Delphi DLL и в нем объявили функцию
begin StrPCopy(lpStr, oDataMap.VendorName); Result := StrLen(lpStr); end;
sVendorName = Mid$(lpVar, 1, nSize) 3. Конвертация TBasicString (VBX) в string. Я использую VBX и испытываю проблемы с конвертацией TBasicString в string. Как это сделать? Существует две функции -
1. Ошибка инициализации BDE ($2C09). Когда я пытаюсь запустить приложение из Delphi, то получаю ошибку EDatabaseError и сообщение 'An error occurred while attempting to initialize the Borland Database Engine (Error $2C09)' Добавьте SHARE.EXE
в AUTOEXEC.BAT или добавьте DEVICE=VSHARE.386 в раздел [386Enh] файла SYSTEM.INI
и перезагрузитесь.
У меня есть Quattro Pro 6.0 и IDAPI в сети. После установки Delphi и нового IDAPI поверх сетевого IDAPI при запуске Quattro Pro с другой машины я получаю ошибку 'Could not load Language Driver'. Добавьте раздел [Borland Language Drivers] в WIN.INI файл для указания каталога языкового драйвера. Пример:
LDPATH=C:\IDAPI\LANGDRV 3. Что значит ошибка IDAPI $2C08? 'Cannot load IDAPI01.DLL'. Убедитесь, что в файле WIN.INI правильно прописаны пути:
DLLPATH=C:\IDAPI CONFIGFILE01=C:\IDAPI\IDAPI.CFG 4. Отличается ли локальный InterBase, встроенный в Delphi 1.0, от InterBase для других платформ, в частности, от InterBase для Windows NT? 16-Разрядный Local InterBase не поддерживает:
Можно ли поставить локальный InterBase на файл-сервере и, таким образом, получить доступ к нему из многих приложений? Работать не будет.
И не пытайтесь. Для этой цели вам нужен нормальный многопользовательский
InterBase.
Delphi поддерживает только VBX 1.0. Это значит что VBX для работы с
данными 'не работает' с Delphi. В общем случае, все, что работает с Microsoft
Visual C++, должно работать в Delphi. Кроме того, некоторые VBX достаточно
хорошо написаны, так что их можно использовать в Delphi и без обращения
к возможностям работы с данными.
1. Можно ли использовать OWL в Delphi? Можно, если уже существуют свои разработки с использованием OWL. Однако следует обратить внимание, не используются ли слова class, try, except и ряда других - в Delphi они являются зарезервированными. Если же опыта использования OWL не было, то вряд ли имеет смысл использование этой библиотеки - в Delphi существуют свои, более удобные средства для работы с Windows. Компиляция приложений, написанных на BP7 с использованием OWL. Компилятор Delphi способен компилировать приложения, написанные на OWL Borland Pascal 7.0. Для компиляции таких приложений в среде Delphi необходимо сделать следующее:
Идентификатор 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;).
Используйте GlobalAlloc и GlobalLock из модуля WinProcs.
Поставьте FixPack, или сделайте Upgrade на OS/2 Warp 3 FullPack.
Да, стандартный метод TClipboard.AsText ограничивает текст размером строки - 255 байт. Для получения текста длиной более 255 байт можно использовать, например следующую процедуру:
var Buffer: PChar; MyHandle: THandle; TextLength : Integer; begin MyHandle := Clipboard.GetAsHandle(CF_TEXT); Buffer := GlobalLock(MyHandle); try Result := nil; if Buffer <> 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 в Borland Pascal - #5 Pascal
Magazine. Обзор VCL WinG появится в новом Delphi Magazine. Отошлите письмо
с вашим почтовым адресом на 70630.717@compuserve.com для получения бесплатной
копии этих журналов (наверняка из России это не сработает.
1. Каковы ограничения на стандартные компоненты Delphi? Все компоненты, использующие TList для сохранения информации, имеют верхний предел 16368 единиц. Hапример, TTabControl может содержать до 16368 закладок и Delphi Component Palette может содержать до 16368 страниц. Многие из стандартных компонент Delphi являются надстройкой над стандартными управляющими элементами Windows. Windows 3.1 налагает свои собственные ограничения на эти компоненты. Hапример: TComboBox или TListbox могут содержать до 5440 единиц, а TMemo или TEdit (и соответствующие компоненты) - до 32k текста. Ресурсы Windows 3.1 ограничивают компонент TNotebook 570 страницами.
(Трудно получить более 500 хендлов /handles/ окон в любом приложении Windows).
Превышение этих границ вызывает ошибку или послужит причиной странного
поведения Windows.
Почему в документации написано, что TMemo может редактировать тексты до 256К, а на деле получается не более 32К? В документации ошибка.
32К - это ограничение Windows. В Windows все стандартные редакторы используют
общий буфер в 32К, компонент TMemo использует другую технику, позволяющую
каждому TMemo иметь буфер в 32К. В Windows 95 эта проблема решена.
Компонент TGauge - просто пример, и ничего более. В нем отсутствует даже намек на оптимизацию перерисовок. Если вы посмотрите на код процедуры SetProgress, то увидите
Refresh;
if Abs(FCurValue-FLastDrawn) >= FDisplayDelta then
где FDisplayDelta что-то вроде (FMaxValue-FMinValue) div Width (идеально было-бы учитывать реальный размер экрана. 1. Распространение приложений Delphi, использующих Local InterBase. Для распространения таких приложений, в соответствии с лицензионным соглашением вы должны перенести следующие файлы: Главные модули (X:\IBLOCAL\BIN)
FILEIO.DLL GDS.DLL GBAK.DLL INTL.DLL IUTLS.DLL JRD.DLL REMOTE.DLL STACK.DLL
ISC4.GDB ISC_LIC.DAT
WISQL.HLP SQLREF.HLP IBMGR.EXE SVRMGR.HLP COMDIAG.EXE COMDIAG.INI COMDIAG.HLP BLINT04.HLP
[Interbase]
Естественно, если путь к локальному InterBase отличается от IBLOCAL, то вы должны изменить его на нужный. Для установки BDE вручную скопируйте содержимое каталога IDAPI (с подкаталогом языковых драйверов), и создайте в WIN.INI следующие секции:
DLLPATH=X:\IDAPI CONFIGFILE01=X:\IDAPI\IDAPI.CFG [Borland Language Drivers]
Возникает неясность - как добавить драйвер INTRBASE в IDAPI.CFG? Получается, что его необходимо переносить, и затем настраивать псевдонимы на новые каталоги. Иначе драйвер локального InterBase не попадет в IDAPI.CFG [Назад][Содержание][Вперед] |
Delphi32 | Delphi32 - Всё о Дельфи. WWW.delphi32.narod.ru |