我使用的LoadKeyboardLayout功能加載和激活鍵盤佈局是這樣的:如何在後臺線程中使用LoadKeyboardLayout?
procedure TfrmMain.eSearchEnter(Sender: TObject);
begin
LoadKeyboardLayout('00000429', KLF_ACTIVATE);
end;
它完美,但它凍結1-2秒的活性形式,因爲這種變化需要一定的時間。爲了防止這一點,我搬到這個代碼到後臺線程這樣的:
type
FLangChangeThread = class(TThread)
private
FLang: string;
protected
procedure Execute; override;
public
property Lang: string read FLang write FLang;
end;
implementation
procedure FLangChangeThread.Execute;
begin
if FLang = 'EN' then
LoadKeyboardLayout('00000409', KLF_ACTIVATE)
else
if FLang = 'FA' then
LoadKeyboardLayout('00000429', KLF_ACTIVATE);
end;
這個後臺線程我那麼這種方式運行:
procedure TfrmMain.ChangeWritingLanguage(ALang: string);
begin
with FLangChangeThread.Create(True) do
begin
FreeOnTerminate := True;
Lang := ALang;
Resume;
end;
end;
procedure TfrmMain.eSearchEnter(Sender: TObject);
begin
ChangeWritingLanguage('FA');
end;
的問題是,它不」按預期更改鍵盤佈局。 我已經調試了代碼,所有的行都被拒絕了。只是LoadKeyboardLayout功能還沒有完成它的工作。
我怎樣才能使LoadKeyboardLayout函數從後臺線程工作?
謝謝,我應該猜!我如何解決這個問題? –
我檢查了結果,它永遠不會返回NUL。我如何將此功能應用於主動控制(如TEdit)? –
如果您要更改流程的鍵盤佈局(我想你會這樣做,因爲它需要很長時間,因此您使用的工作線程,是嗎?),嘗試將「KLF_ACTIVATE」標誌與'KLF_SETFORPROCESS'一個。 – TLama