Borland Delphi FAQ
Страница 2.



------------------------------------------------------------

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

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

------------------------------------------------------------

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

------------------------------------------------------------
В rxLib есть TrxFolderMonitor.

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

------------------------------------------------------------

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

------------------------------------------------------------
(DS): SelectDirectory, rxLib: TDirectoryEdit.

------------------------------------------------------------

Q-30:  Не перерисовываются окна во время длинного цикла

------------------------------------------------------------
Моя программа довольно долго делает какую-то полезную работу, типа чтения
дерева каталогов или обильных вычислений, и в этот момент почти не работают
остальные программы. Как разрешить им это делать?

Application.ProcessMessages.

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

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

------------------------------------------------------------

Q-31:  Как мне запустить какую-нибудь программу

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

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): Hадо послать программе сообщение WM_QUIT:

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

------------------------------------------------------------

Q-32:  Как сделать так, чтобы при щелчке по кнопке или по TLabel запускался, например, браузер

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

uses ShellApi;

{ ... }

ShellExecute("https://www.company.com", ... );
ShellExecute("mailto: Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script ", ...);

------------------------------------------------------------

Q-33:  Как правильно закрыть и удалить форму?

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

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

------------------------------------------------------------

Q-34:  Мне надо добавить много строк в TListbox или в TCombobox или в TMemo

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

BeginUpdate/EndUpdate.

------------------------------------------------------------

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

------------------------------------------------------------
SetWindowRgn() (Win32).

------------------------------------------------------------

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

------------------------------------------------------------
{$R CURSORS.RES}

const
  crZoomIn = 1;
  crZoomOut = 2;

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

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

------------------------------------------------------------

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

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

------------------------------------------------------------

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

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

------------------------------------------------------------

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

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

 
« Предыдущая статья   Следующая статья »