PDA

Ver la Versión Completa : canvas y TEXTOUT


underwater
28-03-2008, 17:28:57
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 :

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 :

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