Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   capturar click en la columna de titulo StringGrid (https://www.clubdelphi.com/foros/showthread.php?t=29347)

poliburro 19-01-2006 16:11:15

capturar click en la columna de titulo StringGrid
 
Pues sip, quisiera poder capturar el vento de click en la columna de titulo de el StringGrid al estilo del evento OnTitleClick del DbGrid.

si alguien pudiera echarme la mano,

Muchas gracias desde ya.

Neftali [Germán.Estévez] 19-01-2006 17:01:37

Puedes utilizar el evento OnMouseDown y consultar el parámetro Y. Algo así:

Código Delphi [-]
procedure TForm1.StringGrid1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if (Y <= StringGrid1.DefaultRowHeight) then begin
    MessageDlg('Pulsando en el título...', mtInformation, [mbOK], 0);
  end;
end;

...siguiente pregunta. ¿Y cómo saber la columna?

Utiliza el parámetro X y la propiedad ColWidths[Index] del TStringGrid
.

poliburro 19-01-2006 20:25:24

pues leyendo la documentación del componente encontre el método mousecoord y me quedo así procedure TForm1.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Var Valor :String; LGcCoord: TGridCoord; //Define las cordenadas del mouse en el grid begin LGcCoord := TCustomGrid(StringGrid1).MouseCoord(x,y); GiCol := LGcCoord.X; //Establece la columna seleccionada GiRow := LGcCoord.Y; //Establece la fila seleccionada if (GiRow = 0) And (Button = mbleft) And (GiCol -1) then Begin with stringgrid1 do Begin GCelda := CellRect(GiCol,0); Valor := Cells[GiCol, 0]; Canvas.Font := Font; Canvas.Brush.Color := clBtnFace; Canvas.FillRect(GCelda); Canvas.TextRect(GCelda, GCelda.Left + 2, GCelda.Top + 2, Valor); DrawEdge(Canvas.Handle, GCelda, 10, 2 or 4 or 8); DrawEdge(Canvas.Handle, GCelda, 2 or 4, 1); End; End; End; procedure TForm1.StringGrid1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Var Valor :String; begin if (GiRow = 0) And (Button = mbleft) And (GiCol -1) then Begin with stringgrid1 do Begin Valor := Cells[Gicol, 0]; Canvas.Font := Font; Canvas.Brush.Color := clBtnFace; Canvas.FillRect(GCelda); Canvas.TextRect(GCelda, GCelda.Left + 2, GCelda.Top + 2, Valor); DrawEdge(Canvas.Handle, GCelda, 4, 4 or 8); DrawEdge(Canvas.Handle, GCelda, 4, 1 or 2); GCelda := stringgrid1.CellRect(1, 1); End; End; end;

fabianbbg 19-01-2006 20:46:53

Una etiqueta por alla por favor...

roman 19-01-2006 20:51:38

Yo no entiendo; cuando oprimen el botón "Enviar respuesta", ¿qué no se percatan de que no quedó correcamente formateado?

// Saludos

maeyanes 19-01-2006 21:17:10

La opción "Preview Post" es muy útil en estos casos...

poliburro 19-01-2006 22:31:07

no se enojen, es que estaba usando firefox
 
Código Delphi [-]
procedure TForm1.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
 Var
  Valor :String;
  LGcCoord: TGridCoord; //Define las cordenadas del mouse en el grid
begin
  LGcCoord := TCustomGrid(StringGrid1).MouseCoord(x,y);
  GiCol := LGcCoord.X; //Establece la columna seleccionada
  GiRow := LGcCoord.Y; //Establece la fila seleccionada
  if (GiRow = 0) And (Button = mbleft) And (GiCol <> -1) then
    Begin
      with stringgrid1 do
        Begin
          GCelda := CellRect(GiCol,0);
          Valor := Cells[GiCol, 0];
          Canvas.Font := Font;
          Canvas.Brush.Color := clBtnFace;
          Canvas.FillRect(GCelda);
          Canvas.TextRect(GCelda, GCelda.Left + 2, GCelda.Top + 2, Valor);
          DrawEdge(Canvas.Handle, GCelda, 10, 2 or 4 or 8);
          DrawEdge(Canvas.Handle, GCelda, 2 or 4, 1);
        End;
     End;
End;
procedure TForm1.StringGrid1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
 Var
  Valor :String;
begin
  if (GiRow = 0) And (Button = mbleft) And (GiCol <> -1) then
    Begin
      with stringgrid1 do
        Begin
          Valor := Cells[Gicol, 0];
          Canvas.Font := Font;
          Canvas.Brush.Color := clBtnFace;
          Canvas.FillRect(GCelda);
          Canvas.TextRect(GCelda, GCelda.Left + 2, GCelda.Top + 2, Valor);
          DrawEdge(Canvas.Handle, GCelda, 4, 4 or 8);
          DrawEdge(Canvas.Handle, GCelda, 4, 1 or 2);
          GCelda := stringgrid1.CellRect(1, 1);
        End;
    End;
end;

Neftali [Germán.Estévez] 20-01-2006 10:15:08

Cita:

Empezado por poliburro
...no se enojen, es que estaba usando firefox

Y digo yo, "Que tendrá que ver el tocino con la velocidad..."
Yo utilizo FireFox desde hace mucho tiempo y cuando las cosas se ven bien, se ven bien en todos sitios y cuandose ven mal, se ven mal en todos sitios.

Sólo nos queda que las faltas de ortografía tambié van a ser culpa de Firefox...:D

Un saludo -sin acritud-.

Casimiro Notevi 20-01-2006 10:39:25

Cita:

Empezado por Neftali
Sólo nos queda que las faltas de ortografía tambié van a ser culpa de Firefox...:D
Un saludo -sin acritud-.

¿Será por eso que se ven tantas faltas de ortografía?, ya me extrañaba a mí, resulta que es el navegador que interfiere en lo que se escribe y cambia los caracteres :(

poliburro 21-01-2006 05:40:58

Pero si que son enojones mis amigos, haber me explico: resulta que estaba navegando en FireFox cuando pegué mi código y al parecer el navegador no hizo caso del clic que hice en el icono que agrega las etiquetas que formatean código delphi.

Ahora bien, como tenia algo de prisa y quise compartir mi solución, presione el botón de "Enviar Respuesta" en lugar de hacer la vista previa.

Espero disculpen las molestias. Por lo general trato de evitar estos debates.

Neftali [Germán.Estévez] 23-01-2006 12:12:21

No fue enojo, no te preocupes, fue un comentario a tu comentario... :D

Un saludo.


La franja horaria es GMT +2. Ahora son las 06:21:40.

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