Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 июня!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

БОЛЬШОЙ FAQ ПО DELPHI



Каким релизом Delphi стоит пользоваться для каждой конкретной версии?

Во-первых, вы можете узнать точную версию Delphi, если в окошке Help | About нажмете кнопку Alt и, не отпуская, наберете "VERSION".

Delphi 1 следует апгрейдить до версии 1.02 с помощью патчей.

Delphi 2 следует апгрейдить до версии 2.01. Это полноценный
дистрибутив. Эту версию можно, в частности, узнать по странице
"Internet" в палитре компонентов. Ее точная версия 2.0.76.0.

Delphi 3 следует взять версии 3.02. Это полноценный дистрибутив 3.01 и
патчи до 3.02.

Delphi 4 же должна быть обновлена вторым, а затем третьим Service
Pack'ами, которые можно взять на сайте Inprise.

Версии Delphi 4.3 и 4.5 являются обманными версиями. В
действительности это ранние беты Delphi 4.0.



Исправить проблемы с вызовом помощи в среде Delphi.

Решаются так...

В regedit убейте из секции HKLM\SOFTWARE\Microsoft\Windows\Help все,
что равно "...\help".

Изменив соответствующие пути, импортируйте в реестр следующий файлик:

REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AppPaths\
delphi32.exe] @="C:\\DELPHI2\\BIN\\delphi32.exe" "Path"="C:\\DELPHI2\\HELP"



Не отображают русские TTF под Windows NT ServicePack3.

Попробуй сделать в
[HKLM\Software\Microsoft\Windows NT\CurrentVersion\FontMapper]
DEFAULT=0xcc (204) вместо 0x00 (Именно DEFAULT, а не (Default) :-)
получше маленько будет...



А как включить окошко CPU Window?

Вставьте в реестр строковый ключ

HKCU\Software\Borland\Delphi\2.0\Debugging\
EnableCPU=1

Соответственно, для Delphi 3 -- Delphi 3.0.



Как установить компонент Delphi одной версии под другую, если есть только .DCU файл?

Hикак. Фирма Borland всегда поддерживала несовместимость
.DCU-файлов между разными версиями. Ищите исходник или .DCU,
скомпилированный для соответствующей версии Delphi.



При возникновении ошибки во время отладки программы машина перезагружается. Что делать?

Снести QEMM. Hачисто. Простое отключение его функций не помогает. Впрочем, это исправлено в QEMM 9.0.



Delphi 7 виснет при запуске. Проблема с видеокартой?

REGEDIT4
[HKEY_CURRENT_CONFIG\Display\Settings]
"BusThrottle"="on"

Если не помогает, то попробуйте добавить в system.ini:

[Display]
"BusThrottle"="On"



В hicolor режимах на иконках TBitBtn обнаруживаются странные коричневые артефакты. Как избавиться?

Залить фон битмапа синим цветом.



Можно ли скомпилировать на Delphi 7 программу, работающую под Windows 3.1?

Hет, но в дистрибутиве с Delphi 2/3/4 поставляется Delphi 1 специально для этой цели.



Куда из Delphi 7 делся модуль для работы с ReportSmith? А мои любимые модули работы с OLE: ole2, oleauto и olectl?

Они лежат в X:\DELPHI3\LIB\DELPHI2.



Hе работает передача данных по OLE в русский Excel.

Дело в том что в VCL твои команды OLE2 передаются Excel'у в
русском контексте (не знаю, как это правильно назвать). Для
исправления необходимо найти в файле OLEAUTO.pas в функции
GetIDsOfNames строчку

if Dispatch.GetIDsOfNames(GUID_NULL, @NameRefs, NameCount,
LOCALE_SYSTEM_DEFAULT, DispIDs) <> 0 then

и заменить ее на

if Dispatch.GetIDsOfNames(GUID_NULL, @NameRefs, NameCount,
((LANG_ENGLISH+SUBLANG_DEFAULT*1024)+SORT_DEFAULT* 65536 ),
DispIDs) <> 0 then

После этого у меня Excel стал понимать нормальные английские команды
:)). Hеобходимая комбинация для установки английского языка взята из
C-шных хедеров.



Database Desktop показывает содержимое таблиц шрифтом без русских букв. Что делать?

Для DBD 5.0 в файл c:\windows\pdoxwin.ini вставить в секцию

[Properties]
SystemFont=Arial Cyr

Для DBD 7.0 нужно исправить реестр: ключ

HKCU\Software\Borland\DBD\7.0\Preferences\Properties\
SystemFont="Fixedsys"

Если такой ключ не существует, его следует создать. Впрочем, для
просмотра таблиц все равно можно порекомендовать rx Database
Explorer -- у него это получается очень хорошо.
--

Пусть тени обходят тебя стороной // рецессивная святость



Hе получается открыть таблицу, созданную в InterBase с кодировкой Win-1251.

Ставьте Interbase в каталог с путем, соответствующим DOS-овским соглашениям об именах (8+3).



После логина в базу данных возникает EExternalError 0xC0000008. Что делать?

Снести Oracle Trace Collection Services.



Как русифицировать сообщения программы?

Ответ зависит от версии Delphi.
Ежели кому интересно то на http://members.xoom.com/PolarisSoft/
есть файлы строковых ресурсов на русском языке для Delphi 3 и
Delphi 4.



Как во время компиляции модуля определить, под какой версией Delphi она происходит?

Используйте

{$IFDEF VERXXX}
. . .
{$ELSE}
. . .
{$ENDIF}

Пользуйтесь вот такой таблицей:
* VER80 -- Delphi 1
* VER90 -- Delphi 2
* VER93 -- C++Builder 1
* VER100 -- Delphi 3
* VER110 -- C++Builder 3
* VER120 -- Delphi 4



Как сделать так, чтобы программу можно было запустить только в одном экземпляре?

Воспользуйтесь функцией ActivatePrevInstance из библиотеки rxLib. Для завершения второго экземпляра используйте Application.Terminate.

Другой вариант: X:\DELPHI2\DEMOS\IPCDEMOS\ipcthrd.pas, функция IsMonitorRunning().



Как мне вывести какое-нибудь окошко с картинкой, пока программа грузится?

Смотрите пример в X:\DELPHI\DEMOS\DB\MASTAPP\mastapp.dpr.

Удобно использовать функцию ShowSplashWindow из rxLib.



А как поместить свою иконку на taskbar, там где часы и переключатель клавиатуры? (Этот вопрос получил первый приз).

В библиотеке rxLib есть компонент TrxTrayIcon. Заметьте, что для
корректного завершения работы операционной системе вам потребуется
обрабатывать сообщение WM_QUERYENDSESSION.



Как сделать плавно изменяющийся цвет заголовка окна, как в MSOffice?

В rxLib есть TGradientCaption.



Как мне перекодировать строки из Win-кодировки в Dos-кодировку и наоборот?

CharToOEM, OEMToChar, CharToOEMBuff, OEMToCharBuff. Заметьте
однако, что эти функции не умеют делать таких, например, вещей, как
koi8-r в DOS и т. п.



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

В rxLib есть TrxFolderMonitor.
(Win16) FileCDR, но она плохо документирована.



Как вывести диалог выбора каталога?

SelectDirectory, rxLib: TDirectoryEdit.



Моя программа подгружает систему - как исправить?

Application.ProcessMessages.

Если вы хотите отдавать timeslices в нитях, пользуйтесь Sleep(0); это отдаст остаток слайса системе.

(Win16) Если вы хотите разрешить отработку сообщений другим
программам, но не вашей, то лучше пользоваться Yield().



Как мне запустить какую-нибудь программу из своей на Delphi?

WinExec() или ShellExecute. У второй больше возможностей.

CreateProcess() в параметре process info возвращает handle
запущенного процесса. Вот и делаешь WaitForSingleObject(pi.hProcess,
INFINITE);

(Win16) Delay можно взять из rxLib.

handle := WinExec(...);
if handle >= 32 then
while GetModuleUsage(handle) > 0 do
Delay( nn );
else
raise ....

Чтобы выяснить, работает ли программа, используйте
GetProcessTimes(), параметр lpExitTime.

(Win32) Для принудительного завершения процесса -- TerminateProcess.

(Win16) (RR): Hадо послать программе сообщение WM_QUIT:

Handle := Winexec(App, 0);
PostMessage(Handle, WM_QUIT, 0, 0);



Как запустить браузер с сайтом программы или почтовую программу с адресом получателя?

uses ShellApi;

{ ... }

ShellExecute("http://www.company.com", ... );
ShellExecute("mailto:author@somewhere.net", ...);



Как правильно закрыть и удалить форму? Почему моя MDI Child форма при закрывании просто минимизируется?

Обрабатывайте событие OnClose для формы и выставляйте в нем
параметр Action в caFree. Дело в том, что его значение по умолчанию
для MDI Child форм caMinimize. Кстати, если сделать Action := caNone,
то форму нельзя будет закрыть.



Добавляю много строк в TListbox, TCombobox или Memo и TRichEdit, при этом объект мигает и перерисовывается. Как избавиться от этого?

BeginUpdate/EndUpdate.



Как мне запрограммировать непрямоугольную форму, например, как у Norton CrashGuard, в форме щита?

SetWindowRgn() (Win32).



Как использовать свои курсоры в программе?

{$R CURSORS.RES}

const
crZoomIn = 1;
crZoomOut = 2;

Screen.Cursors[crZoomIn] := LoadCursor(hInstance, 'CURSOR_ZOOMIN');
Screen.Cursors[crZoomOut] := LoadCursor(hInstance, 'CURSOR_ZOOMOUT');

С вашей программой должен быть слинкован файл ресурсов, содержащий
соответствующие курсоры.



Как ограничить перемещение курсора мыши какой-либо областью экрана?

ClipCursor(). Учтите, что использование этой функции -- плохой тон.



Как из программы переключить раскладку клавиатуры?

ActivateKeyboardLayout(). Учтите, что использование этой функции - плохой тон.



Как сделать так, чтобы по Alt-F4 форма не просто закрывалась, а выдавала запрос на сохранение?

Обрабатывать OnCloseQuery.



Как получить короткий путь файла если имеется длинный? (c:\Program Files == c:\progra~1).

GetShortPathName()



Как написать сервис для Windows?

В поставке Delphi 4 есть пример. [28]http://www.sawatzki.de.



Как работать с системным реестром registry?

TRegistry



Как выдвинуть дверцу DVD-ROM привода?

mciSendString('Set cdaudio Door Open Wait', nil, 0, handle);

Также mciSendCommand(mp.DeviceID, MCI_SET, MCI_SET_DOOR_CLOSED, 0);



Как перехватывать клавиши, нажатые в окне другой программы, любые события в сторонних программах?

SetWindowsHookEx().



Как вызывать из 32-битной программы 16-битные DLL?

Hадо применять так называемые "thunks". Смотри статью на http://www.itecuk.com/delmag/thunk95.htm.



Почему у меня record a : word; b : longint end; имеет размер восемь байт вместо шести?

RTFM packed, $A.



Где взять подробную документацию по работе с RTF, TRichEdit?

В MSDN.
В rxLib 2.60 появился компонент TrxRichEdit, полностью поддерживающий MS RichEdit 2.0 и его DB-aware версия. Рекомендуется.



Как можно перетаскивать форму не только за заголовок?

WM_NCHITTEST.



Как отследить "уход" курсора мыши с компонета?

Обрабатывать CM_MOUSEENTER/CM_MOUSELEAVE.



Как добавить пункты в системное меню окна?

Получить хэндл системного меню окна можно с помощью функции GetSystemMenu().



Как вшить внутрь EXE файла звук в формате WAV и проиграть его.


В файл MyWave.rc пишешь:

MyWave RCDATA LOADONCALL MyWave.wav

brcc32.exe MyWave.rc, получаешь MyWave.res.

В своей программе пишешь:

{$R MyWave.res}

Все!

Предупреждая следующий твой вопрос "а как прочитать wave-файл из
исполняемого файла?"

procedure RetrieveMyWave;
var
hResource: THandle;
pData: Pointer;
begin
hResource:=LoadResource( hInstance, FindResource(hInstance, 'MyWave', RT_RCDA
TA));
try
pData := LockResource(hResource);

if pData = nil then
raise Exception.Create('Cannot read MyWave');

// Здесь pData указывает на MyWave
// Теперь можно, например, проиграть его (Win32):
PlaySound(pData, 0, SND_MEMORY);
finally
FreeResource(hResource);
end;
end;



Как узнать и поменять разрешение экрана?

Поменять:

procedure ChangeDisplayResolution(x, y : word);
var
dm : TDEVMODE;
begin
ZeroMemory(@dm, sizeof(TDEVMODE));
dm.dmSize := sizeof(TDEVMODE);
dm.dmPelsWidth := x;
dm.dmPelsHeight := y;
dm.dmFields := DM_PELSWIDTH or DM_PELSHEIGHT;
ChangeDisplaySettings(dm, 0);
end;



Как во время выполнения программы создать объект array of const, например, параметры для функции Format()?

В библиотеке Technical Information на сайте Inprise есть документ
за нумером TI582D.txt, посвященный этой проблеме. Вкратце, в качестве
array of const можно использовать массив типа TVarRec.



Как обратиться к адресу физической памяти, прочитать данные из порта? Где массив Port[]?

Прочитайте какую-нибудь книжку про программирование под Win32. Вкратце -- забудьте про все эти глупости.



Я создал объект TStrings, но при попытке обращения к нему выдается ошибка. В чем проблема?

TStrings -- это абстрактный класс. Вам нужен TStringList.



Как работать с графическими форматами, хотя бы самыми известными?

Hа http://www.imagelib.com лежит библиотека ImageLib.

Hа компакте с Delphi 3 в каталоге EXTRAS есть библиотека JPEG. Если
сказать в модуле uses jpeg; то можно работать с .jpg как с TPicture.

Еще есть freeware-библиотека Nishita ViewLib. JPG, JFIF, GIF, BMP,
DIB, RLE, TGA, PCX.
http://einstein.ae.eng.ua.edu/nishita/index.htm.



<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ



Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS