Конференция "Media" » Не корректная отрисовка Image1.Canvas.DrawFocusRect
 
  • Сергей (11.07.13 12:58) [0]
    На форме лежит TPageControl, на нем TImage, в котором загружена картинка. Вызов MyImage.Canvas.DrawFocusRect(обработчики висят на TImage) на обработчиках событий мыши приводит к не правильной прорисовке "резинового" прямоугольника. Примеры из инета не приводят к желаемому результату. Может кто-то сталкивался с подобным ? Спасибо.
  • MBo © (11.07.13 14:44) [1]
    TImage - не лучший инструмент для отображения меняющихся картинок.

    А в остальном - кода мы не видели...
  • Сергей (11.07.13 17:28) [2]
    Не берусь спорить. Код такой :

    procedure TfrmPage.DrawRect(R: TRect);
    begin
    ImageObj.Picture.Bitmap.Canvas.DrawFocusRect(R);
    end;

    procedure TfrmPage.ImageObjMouseDown(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
    begin
    if Button = mbLeft then begin
     DrawRect(Rect(X,Y,X,Y));
     XB := X;
     YB := Y;
     XE := X;
     YE := Y;
     Drag:=True;
    end;
    end;

    procedure TfrmPage.ImageObjMouseMove(Sender: TObject; Shift: TShiftState; X,
     Y: Integer);
    begin
    If not Drag then exit;
     DrawRect(Rect(XB,YB,XE,YE));
     DrawRect(Rect(XB,YB,X,Y));
     XE:=X;
     YE:=Y;
    end;

    procedure TfrmPage.ImageObjMouseUp(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
    begin
    If not Drag then Exit;
    DrawRect(Rect(XB,YB,XE,YE));
    Drag:=false;
    end;
  • MBo © (11.07.13 17:37) [3]
    на MouseUp не нужно рисовать, только флаг Drag сбросить
  • Сергей (11.07.13 17:43) [4]
    Сбросить можно. Но прямоугольник изначально рисуется не там. Почему ?
  • MBo © (11.07.13 17:50) [5]
    в DrawRect
    Image.Canvas.DrawFocusRect(R);
    и у меня всё работает
  • Сергей (11.07.13 18:16) [6]
    Пробовал. Не там рисуется. В инете читал, что дрова видюхи виноваты. Такое может быть ? Если так, то как определить будет прога работать корректно на иных компах ?
  • MBo © (11.07.13 19:46) [7]
    >Не там рисуется
    А где?

    >дрова видюхи виноваты. Такое может быть ?
    Не сталкивался
  • MBo © (11.07.13 19:47) [8]
    на форме или на PaintBox нормально работает?
  • Сергей (11.07.13 20:11) [9]
    >А где?
    Ниже курсора.
    >на форме или на PaintBox нормально работает?
    Если на форме только TImage, то Form.Canvas.DrawFocusRect(НЕ Image.Canvas.DrawFocusRect) работае абсолютно корректно.
  • MBo © (11.07.13 23:55) [10]
    ну тогда надо избавляться от TImage
  • Сергей (12.07.13 12:01) [11]
    Спасибо за ответы. Замена TImage на TcxImage(из DevExpress) решила означенную проблему, но, как водится, породила новые. Их решением занимаюсь самостоятельно(пока :-) ).
  • brother © (12.07.13 18:34) [12]
    костыль на костыль?
  • Сергей (12.07.13 23:18) [13]
    >костыль на костыль?
    Очень на то похоже :-)
  • zewwer © (11.10.13 17:45) [14]
    не знаю я постоянно пользуюсь TImage, и мне вполне нравится..

    ____________
    http://www.studiodicapelli.ru/
 
Конференция "Media" » Не корректная отрисовка Image1.Canvas.DrawFocusRect
Есть новые Нет новых   [118428   +11][b:0][p:0.001]