Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   canvas y TEXTOUT (https://www.clubdelphi.com/foros/showthread.php?t=54737)

underwater 28-03-2008 17:28:57

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

cHackAll 28-03-2008 19:43:21

No estoy seguro, pero probablemente funcione si primero defines el estilo y luego el color con SetTextColor(Canvas.Handle, clRed);

Saludos

underwater 31-03-2008 21:44:55

si funciona!!! :D:D:D... esa funcion no la tenia.. habia ademas muchas mas que me ayudan!! Gracias por el empujon ...:p

Saludos


La franja horaria es GMT +2. Ahora son las 04:45:27.

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