![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
OnChanging в TreeView [D6, WinXP]
][ncognito © (2004-09-15 01:01:00)Проблема такая:
У TreeView есть 2 события TreeChanging и MouseDown.
первое служит для того, чтоб в некоторых случаях (при выделении конкретного элемента и ещё одного условия) отключалось выделение (AllowChange:=false)
второе служит для того, чтоб можно было правой кнопкой выделить элемент ( RightClickSelect не помогает )
Но при скрещивании этих событий OnChanging перестаёт работать :((
Вот исходник:
procedure TfmMain.tvInvTreeChanging(Sender: TObject; Node: TTreeNode; var AllowChange: Boolean);
begin
if IsCardChanged=true then
MessageDlg('Save changes?',mtConfirmation, [mbYes, mbNo, mbCancel], 0) = mrCancel
then AllowChange:=false;
end;
procedure TfmMain.tvInvTreeMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
TheNode : TTreeNode;
begin
if Button = mbRight then
begin
TheNode:=tvInvTree.GetNodeAt(X, Y);
if (TheNode is TTreeNode) then
tvInvTree.Select(TheNode);
end;
end;
Defunct (2004-09-15 09:27:00) [1]> Т.е. при "работе с левой кнопкой мыши" всё работает на УРА, но если кликнуть правой, то всё ломается:(
>> C. Оно генерируется всегда, за исключениеммоментов, когда нажимается правая кнопка мыши.
If Button = mbRight then
Try
tvInvTree.GetNodeAt(X, Y).Selected:=True
Except
End;
][ncognito (2004-09-15 09:23:00) [2]Ближе всего вариан B.
Т.е. при "работе с левой кнопкой мыши" всё работает на УРА, но если кликнуть правой, то всё ломается :(
Т.е. если в событии OnTreeChanging AllowChange устанавливается в false, то по идее куда я мышкой ни щёлкни по дереву, выделенным останется мой "зафиксированный" элемент (Node). Всё это прекрасно работает, если я щёлкаю левой кнопкой. Но щёлкни я правой, то выделяется тот элемент по которому я кликнул, а не должон!!!
Defunct (2004-09-15 04:48:00) [3]][ncognito (15.09.04 01:01)
Вопрос запутанный..
Попробую нормально сформулировать ваш вопрос..
У вас в программе есть TreeView, у которого обрабатывается 2 события TreeChanging и MouseDown.
первое (OnTreeChanging) служит для того, чтоб в некоторых случаях (при выделении конкретного элемента и ещё одного условия) отключалось выделение (AllowChange:=false)
второе (OnMouseDown) служит для того, чтоб можно было правой кнопкой выделить элемент ( RightClickSelect не помогает )
Проблема такая:
при обработке второго события, первое перестаёт правильно обрабатываться.
А теперь мои вопрос:
Что именно происходит с OnTreeChanging?
A. Событие перестает генерироваться?
B. Оно генерируется, но при этом tvInvTree.Select(TheNode) все равно срабатывает даже при AllowChange=false.
C. Оно генерируется всегда, за исключением моментов, когда нажимается правая кнопка мыши.
[A,B] - Проблема не связяна с обработчиком OnMouseDown (либо код приведен не полностью.
[C] - поможет следующая конструкция:
If Button = mbRight then
Try
tvInvTree.GetNodeAt(X, Y).Selected:=True
Except
End;