Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.03;
Скачать: CL | DM;

Вниз

OnChanging в TreeView   Найти похожие ветки 

 
][ncognito   (2004-09-15 01:01) [0]

Проблема такая:
У 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 04:48) [1]

][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;


 
][ncognito   (2004-09-15 09:23) [2]

Ближе всего вариан B.
Т.е. при "работе с левой кнопкой мыши" всё работает на УРА, но если кликнуть правой, то всё ломается :(

Т.е. если в событии OnTreeChanging AllowChange устанавливается в false, то по идее куда я мышкой ни щёлкни по дереву, выделенным останется мой "зафиксированный" элемент (Node). Всё это прекрасно работает, если я щёлкаю левой кнопкой. Но щёлкни я правой, то выделяется тот элемент по которому я кликнул, а не должон!!!


 
Defunct ©   (2004-09-15 09:27) [3]

> Т.е. при "работе с левой кнопкой мыши" всё работает на УРА, но если кликнуть правой, то всё ломается :(

>> C. Оно генерируется всегда, за исключением моментов, когда нажимается правая кнопка мыши.

If Button = mbRight then
Try
tvInvTree.GetNodeAt(X, Y).Selected:=True
Except
End;



Страницы: 1 вся ветка

Текущий архив: 2004.10.03;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.032 c
4-1093878635
Дима
2004-08-30 19:10
2004.10.03
Как передать в программу нажатие ПРАВОГО Ctrl


3-1094101624
46_55_41_44
2004-09-02 09:07
2004.10.03
Как можно узнать на какую запись в гриде наведена мышь?


1-1095255534
Gemini
2004-09-15 17:38
2004.10.03
Ширина кнопки


4-1093536327
SH@RK
2004-08-26 20:05
2004.10.03
Как отследить где и почему моя прога завершает свою работу ?


3-1094220146
Thunder
2004-09-03 18:02
2004.10.03
Импорт txt в таблицу БД