| Код | program KLOut;
uses Windows, Messages;
const WinCName = 'TOurWnd'; //наш класс окна WinCaption = 'Язык: '; //заголовок Rus = 'Русский!'; Eng = 'Инглиш!';
var OurWnd: HWND; AMsg: TMsg;
//Вот этой ф-цией мы будем обрабатывать наше окно: function OurWndProc(Window: HWnd; AMessage, WParam, LParam: Longint): Longint; stdcall; //Не забывайте stdcall! это частая ошибка начинающих var i:integer; KL: hKL; begin case AMessage of WM_INPUTLANGCHANGE: //Вот, что надо обработать begin SetWindowText(OurWnd, PChar(WinCaption)); KL:= GetKeyboardLayout(0); if (KL shr 16) = $409 then SetWindowText(OurWnd, PChar(WinCaption+Eng)); if (KL shr 16) = $419 then SetWindowText(OurWnd, PChar(WinCaption+Rus)); end; WM_DESTROY: begin PostQuitMessage(0); Result := 0; Exit; end; else Result := DefWindowProc(Window, AMessage, WParam, LParam); end; end;
//теперь зарегистрируем наш класс: procedure MakeOurClass; var OurClass: TWndClass; begin with OurClass do begin style := CS_HREDRAW or CS_VREDRAW; //стиль - перерисовка lpfnWndProc := @OurWndProc; //наша ф-ция обработки cbClsExtra := 0; //Эт нам cbWndExtra := 0; //не нада hInstance := hInstance; hIcon := LoadIcon(0, IDI_APPLICATION); //иконка - стандарт hCursor := LoadCursor(0, IDC_ARROW); //да и такой же курсор hbrBackground := COLOR_BTNFACE; //любимый дельфовый цвет :) lpszMenuName := nil; //главное меню, если надо lpszClassName := PChar(WinCName); //регистрируем имя нашего класса end; //А вот и регистрация! RegisterClass(OurClass); end;
function MakeOurWnd: hWnd; begin // Создаем окно Result := CreateWindow(PChar(WinCName),PChar(WinCaption),WS_OVERLAPPEDWINDOW, // размеры Integer(CW_USEDEFAULT),Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT),Integer(CW_USEDEFAULT), 0, 0, hInstance, nil); end;
begin //Поехали! MakeOurClass; OurWnd:=MakeOurWnd; ShowWindow(OurWnd, SW_SHOWNORMAL); while (GetMessage(AMsg, 0, 0, 0)) do begin TranslateMessage(AMsg); DispatchMessage(AMsg); end; end.
|
|