Включение особенности автозавершения
Но есть одна важная вещь - функция работает только после того, как Вы вызываете OLE-связанную функцию CoInitialize ( или CoInitializeEx). Эта задача выполняется инициализацией секции модуля ComObj.
Вот простой пример, как это использовать:
unit AutoCompleteUnit;
interface
uses Windows, StdCtrls, ComObj;
Const
SHACF_DEFAULT = $0;
SHACF_FILESYSTEM = $1;
SHACF_URLHISTORY = $2;
SHACF_URLMRU = $4;
SHACF_URLALL = (SHACF_URLHISTORY Or SHACF_URLMRU);
SHACF_AUTOSUGGEST_FORCE_ON = $10000000;
SHACF_AUTOSUGGEST_FORCE_OFF = $20000000;
SHACF_AUTOAPPEND_FORCE_ON = $40000000;
SHACF_AUTOAPPEND_FORCE_OFF = $80000000;
function AutoComplete(editField: TEdit; dwFlags: DWORD): Boolean;
implementation
function SHAutoComplete(hwndEdit: HWND; dwFlags: dWord): LongInt;
stdcall; external 'shlwapi.dll';
function AutoComplete(editField: TEdit; dwFlags: DWORD): Boolean;
begin
Result := (SHAutoComplete(editField.Handle, dwFlags) = 0);
end;
end.
Все функции, которые зависят от определенной программы/версии/dll, должны использовать динамическое связывание. Иначе программа не будет запускаться, если необходимая функция недоступна.
Измените код, подобно этому:
unit AutoCompleteUnit;
interface
uses Windows, StdCtrls, ComObj;
Const
SHACF_DEFAULT = $0;
SHACF_FILESYSTEM = $1;
SHACF_URLHISTORY = $2;
SHACF_URLMRU = $4;
SHACF_URLALL = (SHACF_URLHISTORY Or SHACF_URLMRU);
SHACF_AUTOSUGGEST_FORCE_ON = $10000000;
SHACF_AUTOSUGGEST_FORCE_OFF = $20000000;
SHACF_AUTOAPPEND_FORCE_ON = $40000000;
SHACF_AUTOAPPEND_FORCE_OFF = $80000000;
function AutoComplete(editField: TEdit; dwFlags: DWORD): Boolean;
implementation
type TShAutoCompleteFunc = function(hwndEdit: HWND; dwFlags: dWord): LongInt; stdcall;
var SHAutoComplete: TShAutoCompleteFunc;
theDLL: THandle;
function AutoComplete(editField: TEdit; dwFlags: DWORD): Boolean;
begin
if @ShAutoComplete <> nil then
Result := (SHAutoComplete(editField.Handle, dwFlags) = 0)
else
Result := false;
end;
initialization
theDLL := LoadLibrary('shlwapi.dll');
if theDLL <> 0 then
@ShAutoComplete := GetProcAdress(theDLL, 'SHAutoComplete');
finalization
if theDLL <> 0 then FreeLibrary(theDLL);
end.
Комментарии