powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Перекрытие MouseDown
9 сообщений из 9, страница 1 из 1
Перекрытие MouseDown
    #40051949
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наткнулся сейчас на такой код
Код: 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
Перекрытие MouseDown
    #40051954
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

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

Одна проверка на кнопку клавиатуры, вторая - мыши. Они не лишние.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Перекрытие MouseDown
    #40052018
Сергей N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov, где Вы там проверку на кнопку клавиатуры обнаружили? "ssLeft - The left mouse button is held down."
...
Рейтинг: 0 / 0
Перекрытие MouseDown
    #40052078
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Перекрытие MouseDown
    #40052082
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Я правильно понимаю, что вторая проверка лишняя?

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

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

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


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