Tôi đang sử dụng LoadKeyboardLayout chức năng để nạp và kích hoạt bố trí bàn phím theo cách này:Làm thế nào để sử dụng LoadKeyboardLayout trong một chủ đề nền?
procedure TfrmMain.eSearchEnter(Sender: TObject);
begin
LoadKeyboardLayout('00000429', KLF_ACTIVATE);
end;
Nó hoạt động hoàn hảo, nhưng nó bị đóng băng các hình thức hoạt động trong 1-2 giây, vì sự thay đổi này mất một thời gian. Để ngăn chặn điều này, tôi đã chuyển mã này vào một sợi nền như thế này:
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;
sợi nền này tôi sau đó chạy theo cách này:
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;
Vấn đề là, rằng nó doesn' t thay đổi bố trí bàn phím như mong đợi. Tôi đã gỡ lỗi mã và tất cả các dòng đã bị loại bỏ; chỉ chức năng LoadKeyboardLayout đã không thực hiện được công việc của mình.
Làm cách nào để tôi có thể thực hiện chức năng LoadKeyboardLayout từ chuỗi nền?
Cảm ơn, tôi nên đoán! làm thế nào tôi có thể sửa lỗi này? –
Tôi đã được kiểm tra kết quả, và nó không bao giờ trả về NUL. làm thế nào tôi có thể áp dụng chức năng này để kiểm soát hoạt động (như một TEDit)? –
Nếu bạn định thay đổi bố trí bàn phím cho quy trình (những gì tôi đoán bạn làm, chuỗi công nhân bạn đã sử dụng vì phải mất một thời gian dài, phải không?), Hãy thử kết hợp cờ 'KLF_ACTIVATE' với 'KLF_SETFORPROCESS'. – TLama