Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Crear DateTimePickerd en TStringGrid (https://www.clubdelphi.com/foros/showthread.php?t=93127)

GerTorresM 25-05-2018 19:13:35

Crear DateTimePickerd en TStringGrid
 
Hola a tod@s

El tema que me ocupa hoy es el siguiente, quiero meter algunos de los datos de una consluta en el stringGrid, asì mismo en una columna del mismo necesito imprementar un TDateTimePicker y en la siguiente en check list, a partir de los valores del TimeDatePickerd desarrollar una nueva actividad


Agradezco de antemano el tiempo

duilioisola 27-05-2018 23:50:30

Recuerdo haber hecho algo parecido.
La idea general es tener el componente creado y con la propiedad Visible = False.
Al moverte por las celdas vas poniendo la propiedad top, left y width, según corresponda para que quepa en la celda.
Si la celda pertenece a una columna que contiene fechas, haces visible el componente, inicializándolo con la fecha de la celda.
En el OnChange del componente actualizas la fecha de la celda.

Recuerdo que lo saqué de una web, pero no he podido encontrarla... hay ejemplos con TCheckbox...

Para que puedas empezar:
https://www.tek-tips.com/viewthread.cfm?qid=945593

Neftali [Germán.Estévez] 28-05-2018 10:00:41

Aquí en el foros tienes algún hilo hablando del mismo problema (en este que te adjunto más adelante, en concreto con un TEdit), pero posiblemente el procedimiento a implementar sea el mismo si cambias el tipo de control.


https://www.clubdelphi.com/foros/showthread.php?t=13862

duilioisola 28-05-2018 13:29:07

Este es un ejemplo:
  • Tengo un StringGrid con varias filas y columnas (5x5 en mi ejemplo).
  • La columna 3 contiene fechas
  • Si entro en la columna 3 muestro un DateTimePicker para pedir la fecha de esa celda.
  • Al modificar el DateTimePicker se modifica el valor de la celda

Código Delphi [-]
type
  TFMPruebas = class(TForm)
[...]
     sgPrueba: TStringGrid;
     dtpPrueba: TDateTimePicker;
[...]
     procedure sgPruebaSelectCell(Sender: TObject; ACol, ARow: integer; var CanSelect: boolean);
     procedure dtpPruebaChange(Sender: TObject);
  private
     { Private declarations }
     // En la clase declaro estas variables en la parte privada
     ColumnaSeleccionada : integer;
     FilaSeleccionada : integer;
[...]
end;

procedure TFMPruebas.FormCreate(Sender: TObject);
begin
  inherited;
  // Inicialmente el componente debe estar invisible
  dtpPrueba.Visible := False;
[...]
end;

procedure TFMPruebas.sgPruebaSelectCell(Sender: TObject; ACol, ARow: integer; var CanSelect: boolean);
var
  r : TRect;
begin
  // Posicion de la columna seleccionada en el StringGrid
  r := sgPrueba.CellRect(ACol, ARow);

  with dtpPrueba do
  begin
     // Guardo la fila-columna en la que estoy
     FilaSeleccionada := ARow;
     ColumnaSeleccionada := ACol;

     // Si estoy en la columna que contiene fechas, hago visible el DateTimePicker
     if (ACol = 3) then
     begin
        Left := sgPrueba.Left + sgPrueba.CellRect(ACol, ARow).Left + 2;
        Top := sgPrueba.Top + r.Top + 2;
        Width := r.Right - r.Left - 2;
        Height := r.Bottom - r.Top;

        Visible := True;
        // Trato de convertir el texto de la celda en fecha. Si no puedo, utilizo la fecha de hoy
        try
           Date := StrToDate(sgPrueba.Cells[ACol, ARow])
        except
           Date := Today;
        end;
     end
     else
        Visible := False;
  end;
end;

procedure TFMPruebas.dtpPruebaChange(Sender: TObject);
begin
  // Modifico el valor de la celda, con el texto de la fecha
  sgPrueba.Cells[ColumnaSeleccionada, FilaSeleccionada] := DateToStr(dtpPrueba.Date);
end;


La franja horaria es GMT +2. Ahora son las 15:56:09.

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