Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Перекрытие MouseDown / 9 сообщений из 9, страница 1 из 1
09.03.2021, 15:15
    #40051949
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перекрытие MouseDown
Наткнулся сейчас на такой код
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
type
  TMyScrollDraw = class(TScrollBox)
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
      x, y: integer); override;
  end;

procedure TMyScrollDraw.MouseDown(Button: TMouseButton; Shift: TShiftState;
  x, y: integer);
begin
  if ssLeft in Shift then begin
    if Button = mbLeft then begin
      .....
    end;
  end;
  inherited;
end;

Я правильно понимаю, что вторая проверка лишняя? Иди могут быть варианты?

С уважением, Vasilisk
...
Рейтинг: 0 / 0
09.03.2021, 15:22
    #40051954
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перекрытие MouseDown
_Vasilisk_,

Ctrl+Mouse, Shift+Mouse... Не?
...
Рейтинг: 0 / 0
09.03.2021, 15:27
    #40051956
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перекрытие MouseDown
_Vasilisk_Я правильно понимаю, что вторая проверка лишняя?

Одна проверка на кнопку клавиатуры, вторая - мыши. Они не лишние.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
09.03.2021, 17:15
    #40052018
Сергей N
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перекрытие MouseDown
Dimitry Sibiryakov, где Вы там проверку на кнопку клавиатуры обнаружили? "ssLeft - The left mouse button is held down."
...
Рейтинг: 0 / 0
09.03.2021, 19:15
    #40052078
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перекрытие MouseDown
DarkMaster
Ctrl+Mouse, Shift+Mouse... Не?
Dimitry Sibiryakov
Одна проверка на кнопку клавиатуры, вторая - мыши. Они не лишние.
Еще раз
_Vasilisk_
Код: pascal
1.
if ssLeft in Shift then begin

http://docwiki.embarcadero.com/Libraries/Sydney/en/System.Classes.TShiftStatessLeft - The left mouse button is held down.
Хотя с другой стороны, если почитать описание метода MouseDown http://docwiki.embarcadero.com/Libraries/Sydney/en/Vcl.Controls.TControl.MouseDownShift indicates which shift keys (Shift, Ctrl, or Alt) were down when the user pressed the mouse buttonто получается, что ssLeft - это какая-то недокументированая фича, у которой растут ноги из WM_LBUTTONDOWN
...
Рейтинг: 0 / 0
09.03.2021, 19:27
    #40052082
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перекрытие MouseDown
_Vasilisk_
Я правильно понимаю, что вторая проверка лишняя?

Ты правильно понимаешь, что это подозрительный участок кода, который следует разобрать на предмет происходящего и, возможно, переписать попонятнее. Но проверка не обязательно лишняя и могут быть варианты, см. рисунок
...
Рейтинг: 0 / 0
09.03.2021, 19:49
    #40052084
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перекрытие MouseDown
softwarer
Ты правильно понимаешь, что это подозрительный участок кода, который следует разобрать на предмет происходящего и, возможно, переписать попонятнее.
Там код этого метода писали последовательно три человека, с интервалом 5 лет. Так что с вероятностью 99% людям просто влом было разбираться.

Как я понял, то такая проверка имеет смысл когда нужно исключить зажатую правую кнопку.
...
Рейтинг: 0 / 0
09.03.2021, 19:54
    #40052085
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перекрытие MouseDown
_Vasilisk_
Как я понял, то такая проверка имеет смысл когда нужно исключить зажатую правую кнопку.

Одна проверка срабатывает, если при зажатой левой кнопке щёлкнули правой, другая - нет. Если код в точности такой (то есть обе проверки защищают одно и то же), то внешнюю можно убрать, оставив только Button = mbLeft.
...
Рейтинг: 0 / 0
09.03.2021, 19:59
    #40052086
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перекрытие MouseDown
softwarer
Если код в точности такой
Там кода на пять экранов и вторая проверка находится на третьем. Скорее всего это остатки какого-то рефракторинга
softwarer
внешнюю можно убрать, оставив только Button = mbLeft.
Так и сделал
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Перекрытие MouseDown / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]