Карусель тем сервиса MYBB2.Ru
Ссылка на тему: http://softland.1bbs.info/viewtopic.php?t=3

FAQ по Delphi: Вопросы, связанные с конкретными версиями Delphi

 
FAQ по Delphi:



Вопросы, связанные с конкретными версиями Delphi Q: Каким именно релизом Delphi вообще стоит пользоваться для каждой конкретной версии? A: Во-первых, вы можете узнать точную версию 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. Q: Как исправить проблемы с вызовом помощи при одновременно стоящих Delphi 1 и Delphi 2? A: (AP): Решаются так... В regedit убейте из секции HKLMSOFTWAREMicrosoftWindowsHelp все, что равно "...help". Изменив соответствующие пути, импортируйте в реестр следующий файлик: REGEDIT4 [HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows CurrentVersionAppPaths delphi32.exe> @="C:\DELPHI2\BIN\delphi32.exe" "Path"="C:\DELPHI2\HELP" Q: Delphi 2 и 3 не отображают русские TTF под Windows NT WorkStation + ServicePack#3. A: (AlPe): Попробуй сделать в [HKLMSoftwareMicrosoftWindows NTCurrentVersionFontMapper> DEFAULT=0xcc (204) вместо 0x00 (Именно DEFAULT, а не (Default) :-) получше маленько будет... Q: А как включить окошко CPU Window? A: Вставьте в реестр строковый ключ HKCUSoftwareBorlandDelphi2.0Debugging EnableCPU=1 Соответственно, для Delphi 3 -- Delphi 3.0. Q: Как установить компонент от Delphi одной версии под Delphi другой версии, если имеется только .DCU файл? A: Никак. Фирма Borland всегда поддерживала несовместимость .DCU-файлов между разными версиями. Ищите исходник или .DCU, скомпилированный для соответствующей версии Delphi. Q: При возникновении ошибки во время отладки программы машина перезагружается. Что делать? A: Снести QEMM. Начисто. Простое отключение его функций не помогает. Впрочем, это исправлено в QEMM 9.0. Q: Delphi 4 виснут при запуске. Видеокарта S3 Virge. REGEDIT4 [HKEY_CURRENT_CONFIGDisplaySettings> "BusThrottle"="on" Эта проблема устранена в Delphi 4sp3. Q: При работе программ на Delphi 1 под Windows 95 в hicolor-режимах на иконках TBitBtnов обнаруживаются странные коричневые артефакты. Как от них избавиться? A: (AB): Залить фон битмапа синим цветом. Q: Можно ли скомпилировать на Delphi 2/3/4 программу, работающую под Windows 3.1? A: (NP): Нет, но в дистрибутиве с Delphi 2/3/4 поставляется Delphi 1 специально для этой цели. Q: Куда из Delphi 3 делся модуль для работы с ReportSmith? А мои любимые модули работы с OLE: ole2, oleauto и olectl? Они лежат в X:DELPHI3LIBDELPHI2. Q: Не работает передача данных по OLE в русский Excel. A: (SM): Дело в том что в 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 стал понимать нормальные английские команды ). Необходимая комбинация для установки английского языка взята из C-шных хедеров. Q: Database Desktop показывает содержимое таблиц шрифтом без русских букв. Что делать? A: Для DBD 5.0 в файл c:windowspdoxwin.ini вставить в секцию [Properties> SystemFont=Arial Cyr Для DBD 7.0 нужно исправить реестр: ключ HKCUSoftwareBorlandDBD7.0PreferencesProperties SystemFont="Fixedsys" Если такой ключ не существует, его следует создать. Впрочем, для просмотра таблиц все равно можно порекомендовать rx Database Explorer -- у него это получается очень хорошо. Q: Hе получается открыть таблицу, созданную в InterBase с DEFAULT CHARACTER SET WIN1251. Оно говорит, что "WIN1251 undefined". A: (AA): Ставьте Interbase в каталог с путем, соответствующим DOS-овским соглашениям об именах (8+3). Q: WindowsNT 4.0 + Delphi 2.01 C/S + Oracle Client 7.3 + Oracle Server 7.3. После логина в базу данных возникает "EExternalError 0xC0000008". Что делать? A: (IA, SK): Снести Oracle Trace Collection Services. Q: Как русифицировать сообщения программы? A: Ответ зависит от версии Delphi. Ежели кому интересно то на http://members.xoom.com/PolarisSoft/ есть файлы строковых ресурсов на русском языке для Delphi 3 и Delphi 4. Q: Как во время компиляции модуля определить, под какой версией Delphi она происходит? A: Используйте {$IFDEF VERXXX} . . . {$ELSE} . . . {$ENDIF} Пользуйтесь вот такой таблицей: VER80 -- Delphi 1 VER90 -- Delphi 2 VER93 -- C++Builder 1 VER100 -- Delphi 3 VER110 -- C++Builder 3 VER120 -- Delphi 4 (Sergey Anvarov, 2:5012/27.204) Вопросы, однозначно сводящиеся к использованию rxLib Q: Как сделать так, чтобы программу можно было запустить только в одном экземпляре? A: Воспользуйтесь функцией ActivatePrevInstance из библиотеки rxLib. Для завершения второго экземпляра используйте Application.Terminate. (AS): Другой вариант: X:DELPHI2DEMOSIPCDEMOSipcthrd.pas, функция IsMonitorRunning(). Q: Как мне вывести какое-нибудь окошко с картинкой, пока программа грузится? A: Смотрите пример в X:DELPHIDEMOSDBMASTAPPmastapp.dpr. Удобно использовать функцию ShowSplashWindow из rxLib. Q: А как поместить свою иконку на taskbar, там где часы и переключатель клавиатуры? (Этот вопрос получил первый приз). A: В библиотеке rxLib есть компонент TrxTrayIcon. Заметьте, что для корректного завершения работы операционной системе вам потребуется обрабатывать сообщение WM_QUERYENDSESSION. Q: Как сделать плавно изменяющийся цвет заголовка окна, как в MSOffice95? В rxLib есть TGradientCaption. Q: Как мне перекодировать строки из Win-кодировки в Dos-кодировку и наоборот? A: CharToOEM, OEMToChar, CharToOEMBuff, OEMToCharBuff. Заметьте однако, что эти функции не умеют делать таких, например, вещей, как koi8-r в DOS и т. п. Q: Как отловить события создания или удаления файлов другими программами? В rxLib есть TrxFolderMonitor. (Win16) FileCDR, но она плохо документирована. Q: Как вывести диалог выбора каталога? A: (DS): SelectDirectory, rxLib: TDirectoryEdit. Вопросы, возникающие от неумения читать книжки Q: Моя программа довольно долго делает какую-то полезную работу, типа чтения дерева каталогов или обильных вычислений, и в этот момент почти не работают остальные программы. Как разрешить им это делать? A: Application.ProcessMessages. (AA): Если вы хотите отдавать timeslices в нитях, пользуйтесь Sleep(0); это отдаст остаток слайса системе. (Win16) Если вы хотите разрешить отработку сообщений другим программам, но не вашей, то лучше пользоваться Yield(). Q: Как мне запустить какую-нибудь программу? А как подождать, пока эта программа не отработает? Как выяснить, работает ли программа или уже завершилась? Как принудительно закрыть выполняющуюся программу? A: WinExec() или ShellExecute. У второй больше возможностей. (SO): CreateProcess() в параметре process info возвращает handle запущенного процесса. Вот и делаешь WaitForSingleObject(pi.hProcess, INFINITE); (AA): (Win16) Delay можно взять из rxLib. handle := WinExec(...); if handle >= 32 then while GetModuleUsage(handle) > 0 do Delay( nn ); else raise .... (AM): Чтобы выяснить, работает ли программа, используйте GetProcessTimes(), параметр lpExitTime. (Win32) Для принудительного завершения процесса -- TerminateProcess. (Win16) (RR): Надо послать программе сообщение WM_QUIT: Handle := Winexec(App, 0); PostMessage(Handle, WM_QUIT, 0, 0); Q: Как сделать так, чтобы при щелчке по кнопке или по TLabel запускался, например, браузер с сайтом программы или почтовая программа с определенным адресом получателя? uses ShellApi; { ... } ShellExecute("http://www.company.com", ... ); ShellExecute("mailto:author@somewhere.net", ...); Q: Как правильно закрыть и удалить форму? Почему моя MDI Child форма при закрывании просто минимизируется? A: Обрабатывайте событие OnClose для формы и выставляйте в нем параметр Action в caFree. Дело в том, что его значение по умолчанию для MDI Child форм caMinimize. Кстати, если сделать Action := caNone, то форму нельзя будет закрыть. Q: Мне надо добавить много строк в TListbox или в TCombobox или в TMemo или в TRichEdit, при этом сам объект постоянно мигает, перерисовываясь. Как избавиться от этого? A: BeginUpdate/EndUpdate. Q: Как мне запрограммировать непрямоугольную форму, например, как у Norton CrashGuard, в форме щита? A: SetWindowRgn() (Win32). Q: Как использовать свои курсоры в программе? A: {$R CURSORS.RES} const crZoomIn = 1; crZoomOut = 2; Screen.Cursors[crZoomIn> := LoadCursor(hInstance, CURSOR_ZOOMIN); Screen.Cursors[crZoomOut> := LoadCursor(hInstance, CURSOR_ZOOMOUT); С вашей программой должен быть слинкован файл ресурсов, содержащий соответствующие курсоры. Q: Как ограничить перемещение курсора мыши какой-либо областью экрана? A: ClipCursor(). Учтите, что использование этой функции -- плохой тон. Q: Как из программы переключить раскладку клавиатуры? A: ActivateKeyboardLayout(). Учтите, что использование этой функции -- плохой тон. Q: Как сделать так, чтобы по Alt-F4 форма не просто закрывалась, а выдавала запрос на сохранение? A: Обрабатывать OnCloseQuery. Q: Как получить короткий путь файла если имеется длинный? ("c:Program Files" ==> "c:progra~1"). A: GetShortPathName() Q: Как написать сервис для Windows NT? A: В поставке Delphi 4 есть пример. http://www.sawatzki.de. Q: Как работать с registry? A: TRegistry Q: Как выдвинуть дверцу CD-ROMа? A: mciSendString(Set cdaudio Door Open Wait, nil, 0, handle); Также mciSendCommand(mp.DeviceID, MCI_SET, MCI_SET_DOOR_CLOSED, 0); Q: Как перехватывать клавиши, нажатые в окне другой программы? И вообще, любые события, поступающие другим программам? A: SetWindowsHookEx(). Q: Как вызывать из 32-битной программы 16-битные DLL? A: Надо применять так называемые "thunks". Смотри статью на http://www.itecuk.com/delmag/thunk95.htm. Q: Почему у меня record a : word; b : longint end; имеет размер восемь байт вместо шести? A: RTFM packed, $A. Q: Где взять подробную документацию по работе с RTF, TRichEdit? A: В MSDN. В rxLib 2.60 появился компонент TrxRichEdit, полностью поддерживающий MS RichEdit 2.0 и его DB-aware версия. Рекомендуется. Q: Как можно перетаскивать форму не только за заголовок? A: WM_NCHITTEST. Q: Как отследить "уход" курсора мыши с компонета? A: Обрабатывать CM_MOUSEENTER/CM_MOUSELEAVE. Q: Как добавить пункты в системное меню окна? A: Получить хэндл системного меню окна можно с помощью функции GetSystemMenu(). Q: Можно ли сделать так, чтобы в исполняемом файле программы находился какой-нибудь звук в формате .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_RCDATA)); try pData := LockResource(hResource); if pData = nil then raise Exception.Create(Cannot read MyWave); // Здесь pData указывает на MyWave // Теперь можно, например, проиграть его (Win32): PlaySound(MyWave, 0, SND_MEMORY); finally FreeResource(hResource); end; end; Q: Как узнать и поменять разрешение экрана? Поменять: 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; Q: Как во время выполнения программы создать так называемый "array of const", например, параметры для функции Format()? A: В библиотеке Technical Information на сайте Inprise есть документ за нумером TI582D.txt, посвященный этой проблеме. Вкратце, в качестве array of const можно использовать массив типа TVarRec. Как обратиться к определенному адресу физической памяти? А как прочитать значение из порта? Где мой любимый массив Port[>? Прочитайте какую-нибудь книжку про программирование под Win32. Вкратце -- забудьте про все эти глупости. Библиотеки, инструменты и т. п. Отдельный F.A.Q. по библиотекам и инструментам третьих фирм ведется Михаилом Чернышевым и регулярно публикуется им в RU.DELPHI, а также находится на http://delphi.da.ru. Q: Как работать с графическими форматами, хотя бы самыми известными? A: На 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. Q: Как работать с файлами архивов, хотя бы самыми распространенными? A: Воспользуйтесь библиотекой ExceedZip 3.0 (http://www.exceedsoft.com). Q: Как использовать DirectX в своей программе? A: Модули для работы с DirectX находятся на Delphi Super Page, в пакете DelphiX. Также на http://www.geocities.com/SiliconValley/1142/ лежит модули для работы с DirectSound. Информацию по программированию DirectX можно взять на MSDN и в книге Чарльза Калверта "Delphi 2: Энциклопедия пользователя". Учтите существование эхи RU.DIRECTX.

Ссылка на тему: http://softland.1bbs.info/viewtopic.php?t=3



Внимание! Если вы считаете, что темы с вашего форума не должны присутствовать в карусели тем или в карусели присутствует содержимое, нарушающее нормы общепринятой морали, либо действующего законодательства - напишите нам на abusereport@mybb2.ru
 

создать форум