Ben yüklemek ve klavye düzenini bu şekilde aktive etmek LoadKeyboardLayout fonksiyonunu kullanıyorum: Mükemmel çalışıyor, ancak bu değişiklik biraz zaman alır çünkü, 1-2 saniye aktif formu donarArka plan iş parçacığında LoadKeyboardLayout nasıl kullanılır?
procedure TfrmMain.eSearchEnter(Sender: TObject);
begin
LoadKeyboardLayout('00000429', KLF_ACTIVATE);
end;
. Bu önlenmesi için, böyle bir arka plan iş parçacığı için bu kodu taşıdığınız:
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;
Sonra bu şekilde çalıştırıyorum Bu arka plan iş parçacığı: Bu kötü kokan o,
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;
sorundur Klavye düzenini beklendiği gibi değiştirin. Kodu ayıklandım ve tüm satırları exleauted; Sadece LoadKeyboardLayout işlevi işini yapmadı.
LoadKeyboardLayout işlevini arka plan iş parçacığından nasıl çalıştırabilirim?
sayesinde sanırım olmalı! Bunu nasıl düzeltebilirim? –
Sonucu kontrol ettim ve hiçbir zaman NUL değerini döndürmedi. Bu işlevi aktif kontrollere nasıl uygulayabilirim (bir TEdit gibi)? –
Süreç için klavye düzenini değiştirecekseniz (ne yaptığınızı tahmin edersiniz, uzun zamandır kullandığınız iş parçacığı uzun sürüyor, değil mi?), 'KLF_ACTIVATE' bayrağı birleştirmeyi deneyin. KLF_SETFORPROCESS biriyle. – TLama