Vale. No he entendido nada. De todas formas, tampoco funcionaba bien... hay un fallo en un if... "if (fthen begin" me peta. Creo que te has comido el resto de la comparación del IF al Cortar-Pegar.
De todas formas, olvidad todo lo anterior. He remodelado el código completamente (eso de ir probando no mola... debería empezar a programar siempre bien, y no ir arreglando luego... si es que soy de dejao...

). Este es el nuevo código:
Código:
procedure TForm1.BASIC_ListDrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var
Str:string;
f,Ancho_Letra:integer;
ARect:TRect;
chrs:Char;
begin
f:=1;
Str:=BASIC_List.Items[Index];
ARect:=Rect;
BASIC_List.Canvas.TextRect(Rect,0,0,'');
while f<=length (Str) do
begin
chrs:=Str[f];
if (chrs<chr(32)) or ((chrs>=chr(144)) and (chrs<=chr(164))) then
begin
if (chrs>=chr(144)) and (chrs<=chr(164)) then
begin
chrs:=chr(ord(Chrs)-79);
BASIC_List.Canvas.Font.Style:=[fsBold,fsUnderline,fsItalic];
end
else
begin
//De momento nada
end;
end
else
begin
BASIC_List.Canvas.Font.Style:=[];
end;
Ancho_Letra:=BASIC_List.Canvas.TextWidth(chrs);
ARect.Right:=ARect.Left+Ancho_Letra;
BASIC_List.Canvas.TextRect(ARect, ARect.Left, ARect.Top, chrs);
ARect.Left:=ARect.Left+Ancho_Letra;
inc(f);
end;
end;
Vale. Con esto he solucionado bastantes cosas. Ahora ya da igual que la fuente sea fija o proporcional. Ya no me machaca letras. Con respecto al recuadro que señala la línea, lo he solucionado con "BASIC_List.Canvas.TextRect(Rect,0,0,'');", que me dibuja el rectángulo completo antes de hacer nada, por lo que luego ya no quedan partes del canvas sin dibujar (que era lo que me generaba la basurilla residual al mover el cursor).
En cuanto a lo de que la condición siempre era falsa, la verdad es que no se a que te refieres. La condición se cumplía perfectamente, entraba al bloque (comprobado con showmessages y puntos de ruptura), y lo ejecutaba casi sin problemas. De hecho, el único problema que tenía ahí, lo sigo teniendo con la nueva versión del código. Es el único que me queda:
¿Porqué si uso la fuente arial, me salen las letras subrayadas, negrita y cursiva (solo los chr entre 144 y 164), mientras que si pongo la curier new (que es la que al final se tiene que quedar) solo sale en negrita y cursiva?
Ambas fuentes tienen todas las posibilidades. Si en lugar de estilos, uso colores, va bien, los pinta de un color diferente al resto. Pero parece que el subrayado se le atraganta al joio TListBox...
A ver si podeis echarme una mano en esto... ¿puede ser que al dibujar el TextRect me esté comiendo la parte de abajo y por eso no salga? Es una tontería mu gorda, lo se, pero es que no se que $&$%&$%&$%&$%& puede ser...
Saludos del elfo