Ver Mensaje Individual
  #1  
Antiguo 02-10-2007
modulay modulay is offline
Miembro
 
Registrado: feb 2006
Posts: 46
Reputación: 0
modulay Va por buen camino
Runtime error relacionado con Canvas

Ando usando un componente visual que emula un lcd alfanumérico,en concreto se llama rasterlabel

http://www.lohninger.com/examples_part3.html

En mi aplicación,actualizo el texto que dicho componente muestra de una forma bastante intensiva,coincidiendo con eventos de ratón producidos sobre otros controles del form.El tema es que todo marcha bien,pero muy de vez en cuando me tira el siguiente error:

http://img250.imageshack.us/my.php?image=canvasab6.jpg

La rutina encargada de actualizar el contenido del componente (del cual hay 4 instancias: clcd1linea1,clcd1linea2,clcd2linea1,clcd2linea2) es esta:

Código Delphi [-]
procedure TForm1.actualizaclcd(const linea,pos,dimension: integer; const cad: string);

var
    cadlcd1,cadlcd2,cadaux : string;
    i : integer;
begin

    if linea = 1 then begin
       cadlcd1 := Copy(clcd1linea1.text, 0, length(clcd1linea1.Text));
       cadlcd2 := Copy(clcd2linea1.text, 0, length(clcd2linea1.Text));
    end
    else begin
       cadlcd1 := Copy(clcd1linea2.text, 0, length(clcd1linea2.Text));
       cadlcd2 := Copy(clcd2linea2.text, 0, length(clcd2linea2.Text));
    end;

    if pos < 28 then begin
       if pos + dimension <= 28 then begin // SOLO LCD 1
          cadlcd1 := stuffstring(cadlcd1,pos + 1,dimension,cad);
       end
       else begin // AMBOS LCD
          cadaux := copy(cad,28 - pos + 1,dimension - (28 - pos));
          cadlcd1 := stuffstring(cadlcd1,pos + 1,28 - pos,cad);
          cadlcd2 := stuffstring(cadlcd2,1,dimension - (28 - pos),cadaux);
       end;
    end
    else begin // SOLO LCD 2
       cadaux := copy(cad,0,dimension);
       cadlcd2 := stuffstring(cadlcd2,pos - 28 + 1,dimension,cadaux);
    end;
    fcriticalsectionout.Acquire;
    try
       if linea = 1 then begin
         clcd1linea1.Text := cadlcd1;
         clcd2linea1.Text := cadlcd2;
       end
       else begin
         clcd1linea2.Text := cadlcd1;
         clcd2linea2.Text := cadlcd2; // AQUI ES DONDE ME MARCA EL ERROR
       end;
    finally
    //
    end;
    fcriticalsectionout.leave;

end;

La parte del semáforo y el "try" la añadí para probar a ver si se solucionaba el tema,pero sigue igual,tanto con esa parte como sin ella.
Si elimino la sentencia donde tira el error,lo tira en la anterior,o sea,el mismo caso pero con otra instancia del mismo componente.
¿A qué puede deberse esto? ¿qué pruebas puedo ir haciendo para intentar acotar el fallo?
El hecho por el que uso este componente es porque necesito visualizar cadenas de texto cuyos caracteres ocupen todos el mismo ancho en pixeles.Si alguien sabe de algún Tlabel, Tedit o alguno similar con esta característica me podría resultar más rentable que buscarle solución directa al problema del rasterlabel.
Gracias mil.
Saludos.

Última edición por modulay fecha: 02-10-2007 a las 14:31:44.
Responder Con Cita