Я портирую приложение Delphi 5 на D2010, и у меня есть определенная проблема. На одной форме компонент TImage с событием OnMouseMove, это, как предполагается, обновляет маркировку каждый раз, когда мышь отодвинута изображение. Это работало просто великолепно в исходном приложении, но теперь событие OnMouseMove постоянно стреляет каждый раз, когда мышь по изображению, перемещается ли это или нет, который заставляет маркировку мерцать ужасно.
Кто-либо знает то, что вызывает это и как зафиксировать его?
Мое экстрасенсорное отладочное чувство подсказывает мне, что вы находитесь под Windows, этикетка - это окно подсказки, и вы обновляетесь при каждом мышином движении.
Серьезно, я видел именно эту вещь с окном всплывающей подсказки, когда мы переключились на Vista. Кажется, что более свежие версии окна всплывающих подсказок Windows каким-то образом генерируют сообщения WM_MOUSEMOVE, когда вы их обновляете. Единственным исправлением, которое я смог найти, было только обновление метки, когда текст на самом деле изменяется.
Итак, если вы не на Windows, игнорируйте меня. Но если вы находитесь в Windows, попробуйте обновить текст этикетки только тогда, когда он действительно меняется.
Mason, я не могу воспроизвести это новое приложение D2010 (Обновление 4 и 5) VCL Forms на Windows XP SP2. Вот что я сделал:
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin Label1.Caption := Format('X: %d Y: %d', [X, Y]); end;
Метка показывала "Label1" (подпись по умолчанию, разумеется) до тех пор, пока я не навел курсор мыши на изображение. Затем она корректно обновилась, чтобы показать координаты X и Y. Как только я переместил указатель мыши с изображения, этикетка перестала обновляться.
Похоже, что это что-то в вашем конкретном коде, или что-то специфическое для используемой вами версии Windows, а не Delphi 2010.