Buenos dias!!
Bueno sigo intentando hacer mas bonitas mis aplicaciones... el tema que traigo hoy a ustedes es que yo quiero mostrar algo de la informacion que traigo en forma de tarjeta (vieron como muestra la informacion de contactos el outlook!!) y dije seguro que el List view sirve, y si me sirve pero(siempre hay un pero...je) la cuetion esta en que no puedo escribir en mas de una linea si que me pinte de un color raro las cosas...
el tema es asi...
Yo pongo en un form un TListView, un boton, un popupmenu y 2 Image List. Lo que hago es lo siguiente:
Primero que nada asigno a las propiedades
Height y
Widht de uno de los imagelist(imagelist1) un tamaño grande 150 y 200, respectivamente, y este imagelist lo asigno en la propiedad
LargeImage del ListView1(este imagelist no contiene ninguna imagen, lo utilizo nomas para poder dibujar sobre el listview un cuadrado lo suficientemente grande para que quepan mis datos).
Eso es lo que hago a nivel diseño, luego lo que coloco en el
evento [color=Red]
CustomDrawItem [color=Black]del ListView1 es lo siguiente:
Código Delphi
[-]procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var IconRect, RectDireccion, RectTelefono, RectEmail, RectTitulo : TRect; begin with Sender as TListView do begin case ViewStyle of vsIcon: begin IconRect := Item.DisplayRect(drIcon); if(cdsSelected in State)then begin Canvas.Font.Style := Canvas.Font.Style + [fsBold]; Canvas.Font.Color := clBlack; Canvas.Font.Name := 'Arial';
RectTitulo := IconRect;
RectTitulo.Left := IconRect.Left + 42;
Canvas.Brush.Color := clSkyBlue;
Canvas.Pen.Style := psDash;
Canvas.FrameRect(RectTitulo);
RectTitulo.Bottom := IconRect.Top + Canvas.TextHeight('Hola mundo');
Canvas.TextRect(RectTitulo, RectTitulo.Left+2,RectTitulo.Top+5, 'Hola mundo');
Canvas.Brush.Color := $FFFFEE;
Canvas.FillRect(IconRect);
end;
if((Item.Index mod 2) = 0)then begin Canvas.Font.Style := Canvas.Font.Style + [fsBold]; Canvas.Font.Color := clBlack; Canvas.Font.Name := 'Arial';
RectTitulo := IconRect;
RectTitulo.Left := IconRect.Left + 42;
Canvas.Brush.Color := clSkyBlue;
Canvas.FrameRect(RectTitulo);
RectTitulo.Bottom := IconRect.Top + Canvas.TextHeight('Titulo 1:')+5;
Canvas.TextRect(RectTitulo, RectTitulo.Left+2,RectTitulo.Top+5, 'Titulo 1:');
RectDireccion := IconRect;
RectDireccion.Left := IconRect.Left + 42;
RectDireccion.Top := IconRect.Top + Canvas.TextHeight('Valor de la dirección:')+20;
SetDCBrushColor(Canvas.Handle, clWhite);
SetDCPenColor(Canvas.Handle, clWhite);
UpdateColors(Canvas.Handle);
RectDireccion.Bottom := RectDireccion.Top + Canvas.TextHeight('Direccion : ');
Canvas.FrameRect(RectDireccion);
Canvas.TextRect(RectDireccion, RectDireccion.Left+2,RectDireccion.Top, 'Dirección : ');
RectTelefono := IconRect;
RectTelefono.Left := IconRect.Left + 42;
RectTelefono.Top := RectDireccion.Top + Canvas.TextHeight('Direccion : ')+10;
SetDCBrushColor(Canvas.Handle, clWhite);
SetDCPenColor(Canvas.Handle, clWhite);
UpdateColors(Canvas.Handle);
RectTelefono.Bottom := RectTelefono.Top + Canvas.TextHeight('Teléfono : ');
Canvas.FrameRect(RectTelefono);
Canvas.TextRect(RectTelefono, RectTelefono.Left+2, RectTelefono.Top, 'Teléfono : ');
RectEmail := IconRect;
RectEmail.Left := IconRect.Left + 42;
RectEmail.Top := RectTelefono.Top + Canvas.TextHeight('Email : ')+10;
SetDCBrushColor(Canvas.Handle, clWhite);
SetDCPenColor(Canvas.Handle, clWhite);
UpdateColors(Canvas.Handle);
RectEmail.Bottom := RectEmail.Top + Canvas.TextHeight('Email : ');
Canvas.FrameRect(RectEmail);
Canvas.TextRect(RectEmail, RectEmail.Left+2, RectEmail.Top, 'Email : ');
end;
Canvas.Brush.Color := clGrayText;
Canvas.FrameRect(IconRect);
ilOthersImages.Draw(Canvas, IconRect.Left, IconRect.Top,0);
Item.Caption := '';
end;
vsSmallIcon: begin end;
vsList: begin end;
vsReport: begin end;
end;
end;
end;
Que es lo que se encarga de dibujar... Lo dibuja hace lo que tiene que hacer... pero el problema mio esta en que si yo quiero que la primera linea de texto que coloco salga resaltada con un fondo.. este sale..
pero se vuelve a repetir en las demas lineas, ejemplo:
TITULO //A esto lo resalto y le coloco un color de fondo azul, por ejemplo.
LINEA 1 //Esto tendria que no salir resaltado ni con un color de fondo, en todo caso el color de fondo seria blanco, lo cual tampoco consigo..
LINEA 2
LINEA 3
En definitiva lo que yo quiero es mostrar una tarjeta tipo outlook, pero no me sale... si alguno conoce algun metodo para realizar esto o alguna otra forma... y si me lo puede decir se lo agradeceria...
Aca les dejo una imagen de lo que me sale actualmente. La unica linea que quiero resaltar es la primera "Titulo 1:". Despues el texto "Direccion", "Telefono", "email", quiero quitar ese maldito fondo azul!!!jejeje
Gracias de antemano!!
saludos