-
Есть TTreeView с чекбоксами (то есть со стилем TVS_CHECKBOXES). Приходит ли ему какое-нибудь сообщение, когда пользователь меняет состояние одного из чекбоксов? Как это надежно отследить?
-
Нет, не приходит 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
Caption := Node.Text + ' Changed ' + IntToStr(GetTickCount mod 1000);
end;
end;
end;
end;
-
-
Чекбокс еще по пробелу можно отключить, этот момент тоже нужно учитывать.
-
> Rouse_ © (10.10.14 10:57) [3]
Да. Я сначала как раз через HitTest и сделал, но юзеры хитрее меня. Можно конечно еще и пробел отдельно отслеживать, но вдруг универсальный официальный способ есть. Видимо нет.
-
>Чекбокс еще по пробелу можно отключить, этот момент тоже нужно учитывать. В этом случае и WM_NOTIFY (что предложено в [2]) не приходит, только последовательность WM_KEYDOWN - CHAR - PAINT - KEYUP
|