PDA

Ver la Versión Completa : ¿Se puede usar PickList con TStringGrid?


Casimiro Notevi
06-09-2011, 12:23:36
Pues eso, ¿es posible?.
Si no se puede, entonces, ¿qué otro componente Grid se puede usar que permita poner varias columnas y filas fijas... y que permita PickList?.
A ser posible sin asociarlo a ningún DataSet, igual que el TStringGrid.

ecfisa
06-09-2011, 12:55:17
Hola amigo.

Revisa si esto te puede servir, no lo he probado todavia pero el código aparece en varios sitios, te pongo dos enlaces por las dudas.

Enlace1 (http://www.delphi3000.com/articles/article_3670.asp?SK=)
Enlace2 (http://delphi.cjcsoft.net/viewthread.php?tid=47965)


Un saludo.:)

Casimiro Notevi
06-09-2011, 12:59:30
Gracias, voy a probarlo :)
Aunque realmente quería poder usar alguno de los componentes que ya trae delphi.

ecfisa
06-09-2011, 13:17:25
Hola Antonio.

Entonces ( si te animas :) ) probá este engendro que acabo de teclear...


...
procedure TForm1.FormShow(Sender: TObject);
var
i: Integer;
begin
ComboBox1.Visible:= False;
for i:= 1 to 10 do ComboBox1.Items.Add(IntToStr(i));
ComboBox1.ItemIndex:= -1;
end;

procedure TForm1.ComboBox1Exit(Sender: TObject);
begin
StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row]:= ComboBox1.Text;
ComboBox1.ItemIndex:= -1;
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if (gdSelected in State)and(ACol=1) then
begin
ComboBox1.Left:= Rect.Left + TStringGrid(Sender).Left + 2;
ComboBox1.Top:= Rect.Top + TStringGrid(Sender).Top + 2;
ComboBox1.Height:= Rect.Bottom - Rect.Top;
ComboBox1.Width:= Rect.Right - Rect.Left;
ComboBox1.Visible:= True;
end
else
ComboBox1.Visible:= False;
end;
...

Lo hice al vuelo y seguramente tengas que retocarlo un poco.... o al menos ojalá te dé alguna idea.

Un saludo. :)

Casimiro Notevi
07-09-2011, 11:28:28
Gracias, probaré y a ver con qué me quedo :)

ecfisa
07-09-2011, 14:15:41
Hola.

Hay una superposición de colores que afea el efecto, se soluciona agregando:

if (gdSelected in State)and(ACol=1) then
begin
StringGrid1.Canvas.Brush.Color:= clWindowte; // Color fondo StringGrid
StringGrid1.Canvas.FillRect(Rect);
ComboBox1.Left:= Rect.Left + TStringGrid(Sender).Left + 2;
ComboBox1.Top:= Rect.Top + TStringGrid(Sender).Top + 2;
...

Pero el comportamiento no es exáctamente como el de PickList...

Saludos. :)