Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ¿Se puede usar PickList con TStringGrid? (https://www.clubdelphi.com/foros/showthread.php?t=75602)

Casimiro Notevi 06-09-2011 12:23:36

¿Se puede usar PickList con TStringGrid?
 
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.
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...

Código Delphi [-]
...
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:
Código Delphi [-]
 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. :)


La franja horaria es GMT +2. Ahora son las 06:37:51.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi