Конференция "WinAPI" » Изменение состояния чекбокса
 
  • Kerk © (10.10.14 00:13) [0]
    Есть TTreeView с чекбоксами (то есть со стилем TVS_CHECKBOXES). Приходит ли ему какое-нибудь сообщение, когда пользователь меняет состояние одного из чекбоксов? Как это надежно отследить?
  • MBo © (10.10.14 07:38) [1]
    Нет, не приходит

    procedure TForm1.TreeView1MouseUp(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
    var
     HTI: TTVHitTestInfo;
     Node: TTreeNode;
    begin
     Node := Nil;
     if Button = mbLeft then begin
       HTI.pt.X := X;
       HTI.pt.Y := Y;
       if TreeView_HitTest(TreeView1.Handle, HTI) <> nil then begin
         Node := TreeView1.Items.GetNode(HTI.hItem);
         if TVHT_ONITEMSTATEICON = (HTI.flags and TVHT_ONITEMSTATEICON) then begin
           //узнать состояние - TVM_GETITEM
           Caption := Node.Text + ' Changed ' + IntToStr(GetTickCount mod 1000);
         end;
       end;
     end;
    end;

  • TTreeview (10.10.14 08:07) [2]
    How To Know When the User Clicks a Check Box in a TreeView Control
    http://support.microsoft.com/kb/261289/en-us
    не?
  • Rouse_ © (10.10.14 10:57) [3]
    Чекбокс еще по пробелу можно отключить, этот момент тоже нужно учитывать.
  • Kerk © (10.10.14 11:42) [4]

    > Rouse_ ©   (10.10.14 10:57) [3]

    Да. Я сначала как раз через HitTest и сделал, но юзеры хитрее меня. Можно конечно еще и пробел отдельно отслеживать, но вдруг универсальный официальный способ есть. Видимо нет.
  • MBo © (10.10.14 11:58) [5]
    >Чекбокс еще по пробелу можно отключить, этот момент тоже нужно учитывать.
    В этом случае и WM_NOTIFY (что предложено в  [2]) не приходит, только последовательность WM_KEYDOWN - CHAR - PAINT - KEYUP
 
Конференция "WinAPI" » Изменение состояния чекбокса
Есть новые Нет новых   [134427   +34][b:0][p:0.001]