Jump to content


Photo

Canvas.EndScene problema


  • Please log in to reply
No replies to this topic

#1 el-mono

el-mono

    Advanced Member

  • Miembros
  • PipPipPip
  • 149 posts

Posted 14 September 2024 - 06:26 PM

Sobre un Timage permito dibujar a mano alzada para luego capturar los puntos y almacenarlos en una Base de Datos.

 

Luego consulto la base de datos para dibujar los puntos capturados en otro Timage, mediante el método que pegare a continuación.

El problema que tengo es que la primera vez el Timage se dibuja de maravilla, pero la segunda vez que deseo volver a ejecutar el método para refrescar el componente Timage me arroja un Access Violation en la línea :  idiente.properties.Picture.Canvas.EndScene;


delphi
  1. procedure TDiente.Dibujar_Puntos(Color: Talphacolor; Grosor_linea: Single; Nro_diente: String);
  2. var
  3. I: integer;
  4. c: TalphaColor;
  5. x,y: single;
  6. r: integer;
  7. registros: Integer;
  8. puntos : array of Tptos;
  9. begin
  10.  
  11. with dmdatos.qDiente do
  12. begin
  13. close;
  14. sql.Clear;
  15. sql.Add('Select coordx, coordY, status, color from dientes where diente = ''' + Nro_Diente +'''');
  16. open;
  17. if not eof then
  18. begin
  19. registros := recordcount +1;
  20. FetchOptions.RowsetSize := registros;
  21. FetchAgain;
  22. FetchAll;
  23. SetLength(puntos, registros); //0 registros
  24. for I := 0 to recordcount - 1 do
  25. begin
  26. puntos[i].icoordx:= Fieldbyname('CoordX').AsSingle;
  27. puntos[i].icoordy := Fieldbyname('CoordY').AsSingle;
  28. next;
  29. end;
  30. end;
  31. end;
  32.  
  33. try
  34. Limpiar;
  35. idiente.properties.Picture.Canvas.BeginScene;
  36. idiente.properties.Picture.Canvas.Fill.Color := Color;
  37. idiente.properties.Picture.Canvas.Stroke.Color := Color;
  38. Idiente.properties.Picture.Canvas.Stroke.Thickness := Grosor_linea ;
  39.  
  40. for i := low(puntos) to high(puntos) do
  41. begin
  42. x := puntos[i].icoordx;
  43. y := puntos[i].icoordy;
  44. idiente.properties.Picture.Canvas.DrawLine(PointF(x,y),PointF(x,y), 100);
  45. end;
  46.  
  47. // aqui explota mi aplicacion cuando llamo por segunda vez a este metodo
  48. idiente.properties.Picture.Canvas.EndScene;
  49. except on E: Exception do
  50. begin
  51. ShowMessage('ocurrio un error: ' + E.Message);
  52. end;
  53.  
  54. end;
  55.  
  56. //liberamos memoria
  57. puntos := nil;
  58. end;

Attached Files


Edited by el-mono, 14 September 2024 - 06:28 PM.

  • 0




IP.Board spam blocked by CleanTalk.