<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=UTF-8">
<META NAME="GENERATOR" CONTENT="GtkHTML/3.28.1">
</HEAD>
<BODY>
Te envio un ejemplo de dibujar tres columnas al desplegar un ComboBox. El truco está en guardar el valor de las tres columnas en el mismo item pero con un separador (en el ejemplo el punto y coma).<BR>
<BR>
Después implementamos nuestra propia función de dibujado de columnas para que muestre las tres columnas. Para ello metemos en el evento OnDrawItem del ComboBox. Espero te sea de utilidad.<BR>
Un saludo.<BR>
<BR>
<BR>
Rutina de pintado:<BR>
procedure TFormulario.ComboBoxDrawItem( Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState );<BR>
var<BR>
sValor, sTodo: string;<BR>
i, iPos: Integer;<BR>
rc: TRect;<BR>
AnchoColumna: array[0..3] of Integer;<BR>
begin<BR>
ComboBox.Canvas.Brush.Style := bsSolid;<BR>
ComboBox.Canvas.FillRect( Rect );<BR>
<BR>
// Las columnas deben ir separadas por un ;<BR>
sTodo := ComboBox.Items[Index];<BR>
<BR>
// Establecemos el ancho de las columnas<BR>
AnchoColumna[0] := 0;<BR>
AnchoColumna[1] := 100; // Ancho de la columna 1<BR>
AnchoColumna[2] := 200; // Ancho de la columna 2<BR>
AnchoColumna[3] := 300; // Ancho de la columna 3<BR>
<BR>
// Leemos el texto de la primera columna<BR>
iPos := Pos( ';', sTodo );<BR>
sValor := Copy( sTodo, 1, iPos - 1 );<BR>
<BR>
for i := 0 to 3 do<BR>
begin<BR>
// Dibujamos la primera columna<BR>
rc.Left := Rect.Left + AnchoColumna[i] + 2;<BR>
rc.Right := Rect.Left + AnchoColumna[i+1] - 2;<BR>
rc.Top := Rect.Top;<BR>
rc.Bottom := Rect.Bottom;<BR>
<BR>
// Escribimos el texto<BR>
Combobox.Canvas.TextRect( rc, rc.Left, rc.Top, sValor );<BR>
<BR>
// Dibujamos las líneas que separan las columnas<BR>
if i < 3 then<BR>
begin<BR>
Combobox.Canvas.MoveTo( rc.Right, rc.Top );<BR>
Combobox.Canvas.LineTo( rc.Right, rc.Bottom );<BR>
end;<BR>
<BR>
// Leemos el texto de la segunda columna<BR>
sTodo := Copy( sTodo, iPos + 1, Length( sTodo ) - iPos );<BR>
iPos := Pos( ';', sTodo );<BR>
sValor := Copy( sTodo, 1, iPos - 1 );<BR>
end;<BR>
end;<BR>
<BR>
<BR>
Rutina que añade los items al combobox:<BR>
with Combobox.Items do<BR>
begin<BR>
Add( 'JOSE;SANCHEZ;GARCIA;' );<BR>
Add( 'MARIA;PEREZ;GOMEZ;' );<BR>
Add( 'ANDRES;MARTINEZ;RUIZ;' );<BR>
end;<BR>
<BR>
<BR>
rutina de asignación de evento de pintado al combobox:<BR>
procedure TFormulario.FormCreate(Sender: TObject);<BR>
begin<BR>
// Le decimos al ComboBox que lo vamos a pintar nosotros<BR>
Combobox.Style := csOwnerDrawFixed;<BR>
end;<BR>
<BR>
<BR>
<BR>
El mié, 03-03-2010 a las 10:52 -0500, Fredy Gonzales escribió:
<BLOCKQUOTE TYPE=CITE>
<PRE>
Amigos,
Alguien sabe como agregar dos colunmas a un comboBox, pero que cuando se
desplieque enseñe las dos y cuando esta sin desplegar solo muestre la
primera.
Esto es posible.
Gracias.
FG
_______________________________________________
Lazarus-es mailing list
<A HREF="mailto:Lazarus-es@lists.lazarus.freepascal.org">Lazarus-es@lists.lazarus.freepascal.org</A>
<A HREF="http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es">http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es</A>
</PRE>
</BLOCKQUOTE>
<BR>
<TABLE CELLSPACING="0" CELLPADDING="0" WIDTH="100%">
<TR>
<TD>
<BR>
<HR NOSHADE LENGTH="200">
<BR>
<BR>
<B><FONT SIZE="1">ARTEX TRADING S.A.</FONT></B><BR>
<FONT SIZE="1">JOSÉ ANTONIO CUELLO PRINCIPAL</FONT><BR>
<BR>
<BR>
</TD>
</TR>
</TABLE>
</BODY>
</HTML>