Причина 2. Вы хотите динамически создавать и уничтожать визуальные компоненты во время выполнения программы.
Это также довольно просто в Delphi. Предположим, что на форме есть кнопка, и, каждый раз когда она нажимается, вы хотите создавать другую кнопку. Следующий пример показывается, как это делать:
procedureTForm1.Button1Click(Sender: TObject);
var
NewButton: TButton;
begin
NewButton := TButton.Create(Self);
NewButton.Parent := Self;
end;
Причина 3. Вам действительно требуется доступ к компонентам по номеру.
Предположим, что вы решили написать игру вроде Реверси в Delphi. Вам нужно разместить 100 объектов TShape на форме, в виде квадрата 10×10. Конечно, размещать каждый элемент вручную на экране — задача трудоемкая и неинтересная, при этом, в декларации формы появляется 100 строк кода, которые, в общем-то, не нужны. Вместо этого можно завести массив вроде
Board: array[1..10, 1..10] ofTShape; Далее в программе нужно создать каждый из этих объекты, вызвав TShape.Create(FormXX) ; указать вручную начальные установки для них. Кроме того, в свойстве Parent каждого объекта из массива нужно указать ту панель ( TPanel ) или форму, на которой они располагаются. Это нужно для правильной перерисовки объектов.
Если же вы не используете такие большие массивы, т.е., например хотите одинаково реагировать на нажатие 3-5 кнопок с незначительным различием для каждой из них, то можно использовать свойство Tag.
2. Как использовать DLL, написанные в Delphi, например в Visual Basic?
Допустим, вы написали на Delphi DLL и в нем объявили функцию
functionDataFileType(lpStr: PChar): Integer; export;
begin
StrPCopy(lpStr, oDataMap.VendorName);
Result := StrLen(lpStr);
end;
в Visual Basic Вы должны подключить ее как:
Declare Function DataFileType Lib "File.dll" (ByVal lpStr As String) As Integer
а в программе на VB использовать следующим образом:
nSize = DataFileType(lpVar)
sVendorName = Mid$(lpVar, 1, nSize)
3. Конвертация TBasicString (VBX) в string.
Я использую VBX и испытываю проблемы с конвертацией TBasicString в string. Как это сделать?
Существует две функции —
• BStrPCopy — принимает Basic string и конвертирует в string
• SetBStr — принимает stringи возвращает Basic string Действительно, ссылок на эти функции нет в документации, но имена этих функций можно "обнаружить" в VBXCTRL.DCU.
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 и перезагрузитесь.
2. Ошибка при загрузке языкового драйвера.
У меня есть Quattro Pro 6.0 и IDAPI в сети. После установки Delphi и нового IDAPI поверх сетевого IDAPI при запуске Quattro Pro с другой машины я получаю ошибку 'Could not load Language Driver' .
Добавьте раздел [Borland Language Drivers] в WIN.INI файл для указания каталога языкового драйвера. Пример:
[Borland Language Drivers]
LDPATH=C:\IDAPI\LANGDRV
3. Что значит ошибка IDAPI $2C08?
'Cannot load IDAPI01.DLL' . Убедитесь, что в файле WIN.INI правильно прописаны пути:
[IDAPI]
DLLPATH=C:\IDAPI
CONFIGFILE01=C:\IDAPI\IDAPI.CFG
4. Отличается ли локальный InterBase, встроенный в Delphi 1.0, от InterBase для других платформ, в частности, от InterBase для Windows NT?
16-Разрядный Local InterBase не поддерживает:
• функции, определяемые пользователем.
• BLOB фильтры
• сигнализатор событий (event alerters)
• запись через журнал (Write Ahead Log (WAL)
• тип данных массив (Array Datatype)
• 'отключение' и 'включение' базы данных (database shutdown or restart)
• ведение теневой базы данных (database shadowing)
Все остальные функции поддерживаются, но структура хранения базы на диске не совпадает.
Можно ли поставить локальный InterBase на файл-сервере и, таким образом, получить доступ к нему из многих приложений?
Работать не будет. И не пытайтесь. Для этой цели вам нужен нормальный многопользовательский InterBase.
Читать дальше