FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Y seguimos con los string de colores...
Hola...
He estado jugueteando con los TListBox y he intentado hacer una cosa, solo una, y me han salido un montón de cosas indeseadas, y me está volviendo loco. Joer, no puede ser que con tan poco código falle tanto... Esto parece el RMCobol87 ;-) Bueno, empiezo: TListBox, nombre BASIC_List, Fuente Arial, Style=lbOwnerDrawFixed (he probado también con el variable, pero como no entiendo la diferencia entre ambos, y el resultado es el mismo, como que he pasado de él y lo he dejado así). El código asociado es el siguiente: Código:
procedure TForm1.BASIC_ListDrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); var Str,Str2:string; f:byte; ARect:TRect; Ancho_Letra,Ancho_de_Antes:integer; begin f:=0; Str:=BASIC_List.Items[Index]; //BASIC_List.Canvas.TextRect(Rect, 0, 0, ''); while f<length (Str) do begin if (Str[f]<#32) or (Str[f] in [#144..#164]) then begin case ord(Str[f]) of 144..164:begin Ancho_Letra:=BASIC_List.Canvas.TextWidth(Str[f]); Str2:=copy(Str,0,f); Ancho_de_Antes:=BASIC_List.Canvas.TextWidth(Str2); BASIC_List.Canvas.Font.Style:=[fsUnderline,fsItalic]; ARect:=Rect; ARect.Left:=ARect.Left+Ancho_de_Antes+1; ARect.Right:=ARect.Right+Ancho_de_Antes+Ancho_Letra+1; BASIC_List.Canvas.TextRect(aRect, ARect.Left, aRect.Top, chr(ord(Str[f])-79)); end; else begin //De momento nada end; end; inc (f); end else begin Ancho_Letra:=BASIC_List.Canvas.TextWidth(Str[f]); Str2:=copy(Str,0,f); Ancho_de_Antes:=BASIC_List.Canvas.TextWidth(Str2); BASIC_List.Canvas.Font.Style:=[]; ARect:=Rect; ARect.Left:=ARect.Left+Ancho_de_Antes+1; ARect.Right:=ARect.Right+Ancho_de_Antes+Ancho_Letra+1; BASIC_List.Canvas.TextRect(aRect, ARect.Left, aRect.Top, Str[f]); inc(f); end; end; end; Pues bien, el resultado es el que hay en la figura1 (adjunta, espero). Me sale un merder que no veas. Si le pongo una fuente de tamaño fijo (Curier New), sale como la figura2 (adjunta también, espero). Sale ¿perfecto? Pues no. La línea larga de CBBBBBBBBBBBBB... sale en cursiva, pero no en subrayado. Es decir, que en Arial se subraya, pero en Curier no... y las dos fuentes funciona el subrayado (lo he hecho en otros códigos y ha funcionado bien). Lo del poner la cursiva era para ver si es que no me estaba cogiendo ningún estilo, pero vi que no era así... En los dos casos, además, el texto sale desplazado un caracter a la derecha (debería salir pegado al borde como en todos los TListBox), lo que hace que al mover le ratón, con el botón izquierdo pulsado, arriba y abajo, salga una especie de caja de puntitos en el primer caracter, que es un resto de la barra oscura que sale al pulsar sobre una linea, barra que podeis ver como sale... Yo flipo. Joer, que el código es bastante sencillo. ¿Cómo puedo cometer tantos errores? Y eso que aun no he empezado a cambiar el color del fondo... NOTA: No me deja subir JPGs de más de ¿1k? al foro. Os describo un poco el resultado: la figura 1 salen las letras, pero solo unos dos o tres pixels. A continuación y montada sobre la anterior, la letra siguiente. La única letra que se ve entera es la última de la línea. Las demás salen cortadas... Y en la segunda figura sale bien, pero como digo más arriba lo que debería salir subrayado no sale (sale solo en cursiva), y al principio de la línea sale un resto en forma de C, pero cuadrada, que es un resto de la barra de selección. De todas formas, si no lo entendeis, decidme donde puedo poner las dos imágenes (46k y 67k). Saludos del elfo al que le crecen los enanos... |
|
|
|