Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-04-2005
Elfoscuro Elfoscuro is offline
Miembro
 
Registrado: mar 2005
Posts: 59
Poder: 20
Elfoscuro Va por buen camino
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;
El código en si es una basura, pero es que estoy empezando con el bloque y está todo dejado a saco (demasiado código redundante y demás). El objetivo es el siguiente: con la cadena que haya, hace un bucle letra a letra, y va pintando el caracter que toque diferenciando si es menor que #32 o está en el margen que le pongo. Si está en ese margen el caracter debe salir subrayado (el margen es A..U, pero sumando 79). Si no lo es, debe salir normal. Si es menor de 32, deberá hacer otras cosas, que de momento no he implementado.

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...
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 14:44:15.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi