Конференция "Media" » ошибка Access Violation при обращении к mousemove [D7, WinXP]
 
  • Festil (05.02.10 23:51) [0]
    Работаю с jpeg изображением. Задача - открыть файл. Вывести на экран. Далее настроить обработчик событий при движении мыши на битмапе рисовались вертикальные линии, а именно, при нажатии кнопки и при перемещении рисовались линии, а при отпускании завершалось все. (как рисование окружности в paint).

    При первом обращении к mousemove все нормально работает, а уже при следующем - выскакивает ошибка Access Violation
    Может я криво обращаюсь с изображением, возможно, раз косяк получается.


    procedure TView1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
     Y: Integer);
     var
      p:Tpoint;
      xNew,yNew:integer;
      k:Tbitmap;
      RX:integer;
      kk:integer;
    begin
    xNew:=X-View1.Left;
    yNew:=Y-View1.Top;
    CorX.Caption:=inttostr(xNew);
    CorY.Caption:=inttostr(yNew);
    if Flag then begin
    Image1.Picture.Bitmap.Canvas.Refresh;
    RX:=X-View1.Left-X0;
    Image1.Picture.Bitmap.Canvas.Pen.Color:=clRed;
    for kk:=0 to Image1.Picture.Height-1 do
    begin
     Image1.Picture.Bitmap.Canvas.Pixels[X-View1.Left,kk]:=clRed;
     Image1.Picture.Bitmap.Canvas.Pixels[X-View1.Left-2*RX,kk]:=clRed;
     end;

    //Image1.Picture.Bitmap.Canvas.MoveTo(X-View1.Left-2*RX,0);
    //Image1.Picture.Bitmap.Canvas.LineTo(X-View1.Left-2*RX,Image1.Picture.Height);
    //Image1.Picture.Bitmap.Canvas.MoveTo(X-View1.Left,0);
    //Image1.Picture.Bitmap.Canvas.LineTo(X-View1.Left,Image1.Picture.Height);
    // Image1.Picture.Bitmap.Canvas.MoveTo(X-View1.Left,Y-View1.Top);
    inc(FGH); Label1.Caption:=Inttostr(FGH);
    Image1.Picture.Bitmap.Free;
    Image1.Picture.Bitmap:=mm;
                    end;

    end;

    procedure TView1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
     var k:Tbitmap;
    begin
    x0:=X;
    Flag:=true;
    // ShowMessage(inttostr(Y));
    end;

    procedure TView1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
    begin
    Flag:=false;
    end;

  • Сергей М. © (06.02.10 16:40) [1]

    > Image1.Picture.Bitmap.Free;
    > Image1.Picture.Bitmap:=mm;


    Вот эти телодвижения прокомментируй подробно ..
  • Festil (06.02.10 16:50) [2]
    Это я пытался заменить битмап на ранее сохраненный(в процедуре загрузки jpeg через opendialog)

    mm:Tbitmap;

    а в процедуре открытия

    mm:=Image1.Picture.Bitmap;

    ps
    после нескольких попыток пришел к решению, так как битмап затирается ненужными линиями, то в процедуре mousemove прописать процедуру реопена файла
    var jpeg:Tjpegimage;
       bmp:Tbitmap;
    begin
    jpeg:=Tjpegimage.Create;
    bmp:=TBitmap.Create;
    jpeg.LoadFromFile(im1);
    bmp.assign(jpeg);
    View1.Image1.Picture.Bitmap:=bmp;
    with View1.Image1.Picture.Bitmap.Canvas do
      begin
       Pen.Color:=clblue;
       MoveTo(0,v1);
       LineTo(View1.Image1.Width,v1);
       MoveTo(0,v2);
       LineTo(View1.Image1.Width,v2);
    Pen.Color:=clred;
    MoveTo(XX1,0);
    LineTo(XX1,View1.Image1.Picture.Height);
    MoveTo(XX2,0);
    LineTo(XX2,View1.Image1.Picture.Height);
    Pen.Color:=clyellow;
    MoveTo(YY1,0);
    LineTo(YY1,View1.Image1.Picture.Height);
    MoveTo(YY2,0);
    LineTo(YY2,View1.Image1.Picture.Height);
         end;

    jpeg.Free;
    bmp.Free;
    end;

  • Сергей М. © (06.02.10 17:47) [3]
    Ну-ну
  • mr.il (10.02.10 06:38) [4]
    Почитай предыдущую тему, а потом про рисование на канвасе (в этой ветке или  в "играх").
  • mr.il (10.02.10 06:39) [5]
    Забыл что после ответа тема уходит вверх. Вот тут почитай для начала
    http://pda.delphimaster.net/?id=1209049023&n=7
  • Festil (11.02.10 19:04) [6]
    mr.il, спасибо.
 
Конференция "Media" » ошибка Access Violation при обращении к mousemove [D7, WinXP]
Есть новые Нет новых   [134430   +2][b:0][p:0.002]