www.demi-s.narod.ru

Delphi
Статьи:

· Интерфейс

· WinAPI

· Компоненты

· Базы данных

· ShellAPI



WinAPI


Как выбрать первый пункт в ListView с использованием клавиши TAB

В этом примере у нас имеется два компонента ListView. Первый компонент по имени ListView1 содержит два события:

procedure TForm1.ListView1Enter(Sender: TObject);
begin
  HookHandle := SetWindowsHookEx(WH_KEYBOARD, @MsgHook, 0, GetCurrentThreadID);
end;

procedure TForm1.ListView1Exit(Sender: TObject);
begin
  UnHookWindowsHookEx(HookHandle);
end;

Второй компонент по имени ListView2 активизируется процедурой MsgHook:

function MsgHook(Code: Integer; WParam: WPARAM; LParam: LPARAM): Integer; stdcall;
const
  KeyTAB: Integer = 983041;
begin
  if (Code = HC_ACTION) then
  begin
    if LParam = KeyTAB then
    begin
      frmMain.lsvCCM.SetFocus;
      SendMessage(Form1.ListView2.Handle, WM_KEYDOWN, VK_DOWN, 1);
      Result := -1;
      Exit;
    end;
  end;
    Result := CallNextHookEx(HookHandle, Code, WParam, LParam);
end;

На OnEnter работает так же:

with ListViewX do
  if Items.Count > 0 then
    if SelCount = 0 then
      Items[0].Selected := True;
      ListView1.Items.Item[0].Focused :=True;

Hosted by uCoz