Ver Mensaje Individual
  #1  
Antiguo 28-03-2008
underwater underwater is offline
Miembro
 
Registrado: oct 2007
Ubicación: Argentina
Posts: 23
Reputación: 0
underwater Va por buen camino
canvas y TEXTOUT

Hola a todos...

en mi afan de poder darle un poco mas de diseño a mis aplicaciones recurro a vosotros...je
Mi problema es el siguiente... Yo puse en un form un List View en el cual quise dibujar los items que alli cargo... Lo que quise hacer es una especie de tarjeta en la que se muestran datos como :

NOMBRE (Aparece centrado en la cabecera del item...)
"Direccion : "
"Telefono : "
"Email : "

Esos son los datos que queria mostrar en el List View. y bueno agarre el metodo "CustomDrawItem" del ListView. Ahi empece bien.. Pude a traves del CANVAS escribir cada uno de estos datos, y lo hice pude mostrar todo como una tarjeta los datos que yo queria mostrar. El codigo que utilice fue el siguiente :

Código Delphi [-]
var 
  MiRect: TRect; 
begin 
  with Sender as TListView do 
    begin 
      if(Assigned(Item))then 
                begin 
          case ViewStyle of 
            vsIcon: begin 
                         MiRect  :=  Item.DisplayRect(drIcon);                      
                         if(Item.SubItems.Count>0)then 
                           begin 
                             Canvas.Font.Color :=  clBlue; 
                                Canvas.TextOut(MiRect.Left+40,'Nombre');                                  Canvas.TextOut(MiRect.Left+10,                                              MiRect.Top+Canvas.TextHeight(Item.SubItems[3])+25,'Direccion'); 
                             Canvas.TextOut(MiRect.Left+10,                             MiRect.Top+Canvas.TextHeight( Item.SubItems[3])+45,'Telefono'); 
                           end; 

                         Canvas.Brush.Color  :=  clSkyBlue; 
                         Canvas.FrameRect(MiRect); 

                         Item.Caption  :=  ''; 
                         ilLargeImages.ImageType  :=  itImage; 
                         ilLargeImages.Draw(Canvas,MiRect.Left,MiRect.Top,1); 
                       end; 
                        vsSmallIcon:  begin 
                              end; 
            vsList: begin 
                      end; 
            vsReport: begin 
                            MiRect  :=  Item.DisplayRect(drSelectBounds); 
                            Canvas.Brush.Color  :=  $00FFFDF4; 
                            Canvas.FrameRect(MiRect); 
                          end; 
          end; 
               end; 
      end;


En el codigo se ve agregado cuando selecciono un item para que cambie de color, algo mas que pude agregar ...

Mi problema surgio cuando quise hacer que cambie de color una linea escrita a traves del metodo del canvas "Canvas.TextOut(MiRect.Left+40, MiRect.Top+5,'Dirección');"
Lo que quise hacer, basicamente, es lograr hacer que el "titulo" (en este caso lo que cargo como NOMBRE), aparezca en negrita y con un color, por ejemplo azul; y que los demas datos ("Direccion : ", "Telefono : ", "Email : ") aparezcan en NORMAL, y en Rojo. Lo que hice en el codigo fue algo asi :

Código Delphi [-]
    Canvas.Font.Color :=  clBlue;//Aca seteo un color de font 
       Canvas.Font.Style  := Canvas.Font.Style + [fsBold]; //Coloco negrita 
       Canvas.TextOut(MiRect.Left+40, MiRect.Top+5,'NOMBRE'); 
       Canvas.Font.Color :=  clRed;//Aca intento cambiar el color del font 
       Canvas.Font.Style  := Canvas.Font.Style - [fsBold];  //Quito negrita 
       Canvas.TextRect(MiRect2, MiRect2.Left+40,         MiRect2.Top+Canvas.TextHeight(Item.SubItems[1])+10,'Dirección');

Pero bueno, no se si el canvas del ListView no permite hacer estas pruebas de colores...por que no hubo forma de que me cambiara de color. Me ponia los dos TEXTOS, con el mismo color (el primero de ellos, azul).

Mi duda es la siguiente... es posible hacer esto?? o sea cambiar de color la fuente en un linea y cambiarla en otra... por que no pude hacer que ande...y me volvio loco... :S..je

bueno gracias de antemano..

Saludos a todos y buenn finde
Responder Con Cita