Почему OnMouseMove стреляет неоднократно, когда мышь не перемещается в D2010?

Я портирую приложение Delphi 5 на D2010, и у меня есть определенная проблема. На одной форме компонент TImage с событием OnMouseMove, это, как предполагается, обновляет маркировку каждый раз, когда мышь отодвинута изображение. Это работало просто великолепно в исходном приложении, но теперь событие OnMouseMove постоянно стреляет каждый раз, когда мышь по изображению, перемещается ли это или нет, который заставляет маркировку мерцать ужасно.

Кто-либо знает то, что вызывает это и как зафиксировать его?

8
задан Mason Wheeler 31 December 2009 в 19:49
поделиться

2 ответа

Мое экстрасенсорное отладочное чувство подсказывает мне, что вы находитесь под Windows, этикетка - это окно подсказки, и вы обновляетесь при каждом мышином движении.

Серьезно, я видел именно эту вещь с окном всплывающей подсказки, когда мы переключились на Vista. Кажется, что более свежие версии окна всплывающих подсказок Windows каким-то образом генерируют сообщения WM_MOUSEMOVE, когда вы их обновляете. Единственным исправлением, которое я смог найти, было только обновление метки, когда текст на самом деле изменяется.

Итак, если вы не на Windows, игнорируйте меня. Но если вы находитесь в Windows, попробуйте обновить текст этикетки только тогда, когда он действительно меняется.

5
ответ дан 5 December 2019 в 17:38
поделиться

Mason, я не могу воспроизвести это новое приложение D2010 (Обновление 4 и 5) VCL Forms на Windows XP SP2. Вот что я сделал:

  • File|New|VCL Forms Application
  • Droppped a TImage and TLabel on the form
  • Picked a random image out of the default images folder (GreenBar.bmp) for the TImage.Picture
  • Double clicked the TImage.OnMouseMove event in the Object Inspector, and added the code:
    procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      Label1.Caption := Format('X: %d Y: %d', [X, Y]);
    end;
  • Ran the application (F9).

Метка показывала "Label1" (подпись по умолчанию, разумеется) до тех пор, пока я не навел курсор мыши на изображение. Затем она корректно обновилась, чтобы показать координаты X и Y. Как только я переместил указатель мыши с изображения, этикетка перестала обновляться.

Похоже, что это что-то в вашем конкретном коде, или что-то специфическое для используемой вами версии Windows, а не Delphi 2010.

1
ответ дан 5 December 2019 в 17:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: