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. :)
vBulletin v3.6.8, Derechos ©2000-2013, Jelsoft Enterprises Ltd.