Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Botón Derecho y TStringGrid (https://www.clubdelphi.com/foros/showthread.php?t=14465)

Wulvay 21-09-2004 18:17:14

Botón Derecho y TStringGrid
 
Hola, soy nuevo en Delphi y estoy haciendo un proyectito para comprender el funcionamiento del lenguaje, ya he podido avanzar bastante a punta de tutoriales, manuales, ayudas, etc. y ahora estoy parado en que necesito seleccionar una celda con el botón derecho del mouse para realizar acciones de un menú contextual sobre la fila completa, el problema es que puedo seleccionar los datos de la fila previamente seleccionada con el botón izquierdo...

puntualmente, necesito saber como hacer que antes de mostrar el menu contextual, se seleccione la celda que estoy marcando.

De antemano, gracias

:confused:

roman 21-09-2004 18:43:17

En el evento OnMouseDown del StringGrid intenta poner esto:

Código Delphi [-]
var
  GridCoord: TGridCoord;

if Button = mbRight then
begin
  // Obtener las coord. de la celda bajo el cursor
  GridCoord := StringGrid1.MouseCoord(X, Y);

  // Seleccionar la celda
  StringGrid1.Col := GridCoord.X;
  StringGrid1.Row := GridCoord.Y;  
end;

// Saludos

Wulvay 21-09-2004 18:49:20

Arigatoo
 
:p Muchas Gracias, lo voy a probar

Wulvay 21-09-2004 19:42:37

Fuciona + o -... se me genera una excepción cuando pincho fuera de las celdas... las filas se generan en forma dinámica segun los registros en la base de datos... y por ahora sólo tengo 2 campos...

voy a ver como manejar esa excepción... ya traté con try/except, pero me sigue sucediendo...

roman 21-09-2004 20:23:08

No sé de dónde viene la excepción que mencionas ya que en lo que pruebo no me sale; quizá de alguna sentencia posterior.

De cualquier manera, en lugar de manejar la excepción yo checaría que las coordenadas que obtengo realmente corresponden a una celda:

Código Delphi [-]
procedure TForm1.StringGrid1MouseDown(
  Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  GridCoord: TGridCoord;

begin
  if Button = mbRight then
  begin
    GridCoord := StringGrid1.MouseCoord(X, Y);

    if
      (GridCoord.X >= StringGrid1.FixedCols) and
      (GridCoord.Y >= StringGrid1.FixedRows)
    then
    begin
      StringGrid1.Col := GridCoord.X;
      StringGrid1.Row := GridCoord.Y;
    end;
  end;
end;

Según he visto, si haces click fuera de las celdas, ambas coordenadas se fijan en -1 de manera que sólo tienes que checar que no toque las filas o columnas fijas.

// Saludos

Wulvay 22-09-2004 00:53:54

Gracias.... acavo de hacer lo mismo y me funciona correctamente... la excepción se produce al pinchar fuera de las celdas, pero dentro del stringgrid ... trata de asignar coordenadas -1 y TGridCoord no las reconoce...

pero ya lo solucioné con un código muy parecido...

Gracias.


La franja horaria es GMT +2. Ahora son las 13:35:39.

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