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
procedure TDiente.Dibujar_Puntos(Color: Talphacolor; Grosor_linea: Single; Nro_diente: String); var I: integer; c: TalphaColor; x,y: single; r: integer; registros: Integer; puntos : array of Tptos; begin with dmdatos.qDiente do begin close; sql.Clear; sql.Add('Select coordx, coordY, status, color from dientes where diente = ''' + Nro_Diente +''''); open; if not eof then begin registros := recordcount +1; FetchOptions.RowsetSize := registros; FetchAgain; FetchAll; SetLength(puntos, registros); //0 registros for I := 0 to recordcount - 1 do begin puntos[i].icoordx:= Fieldbyname('CoordX').AsSingle; puntos[i].icoordy := Fieldbyname('CoordY').AsSingle; next; end; end; end; try Limpiar; idiente.properties.Picture.Canvas.BeginScene; idiente.properties.Picture.Canvas.Fill.Color := Color; idiente.properties.Picture.Canvas.Stroke.Color := Color; Idiente.properties.Picture.Canvas.Stroke.Thickness := Grosor_linea ; for i := low(puntos) to high(puntos) do begin x := puntos[i].icoordx; y := puntos[i].icoordy; idiente.properties.Picture.Canvas.DrawLine(PointF(x,y),PointF(x,y), 100); end; // aqui explota mi aplicacion cuando llamo por segunda vez a este metodo idiente.properties.Picture.Canvas.EndScene; except on E: Exception do begin ShowMessage('ocurrio un error: ' + E.Message); end; end; //liberamos memoria puntos := nil; end;
Attached Files
Edited by el-mono, 14 September 2024 - 06:28 PM.