Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   MouseDown en DbGrid no funciona como espero (https://www.clubdelphi.com/foros/showthread.php?t=73272)

ElDioni 12-04-2011 18:57:22

He estado probando lo que les he comentado ahora mismo y al compilar me sale un mensaje diciendo que el DbGridOrdenes debería ser del tipo TDBGrid pero que es del tipo TDBGridMio y me dice que si lo quiero corregir, le digo que no pero me sigue sin funcionar el código del MouseDown.
Ahora no puedo seguir con el tema, mañana la daré otra vuelta a ver si le saco punta.

Hasta mañana y gracias por sus respuestas.

Saludos.

roman 12-04-2011 19:02:22

El método que propuso Caro, servirá sólo para el Grid donde hayas puesto el código. Si quieres usarlo para otros grids entonces lo imejor sería hacer un nuevo componente que redefina el método tal como lo expone Caro, instalarlo en la paleta de componentes y utilizarlo en lugar del estándar.

// Saludos

ElDioni 13-04-2011 08:59:45

Buenos días,

roman se me tiene que estar pasando algo porque si yo pongo el código tal cual me lo puso Caro me afecta a todos los DBGrids que tengo creados en el formulario, no tengo, ni siquiera, que ponerles código en el evento MouseDown, directamente al hacer MouseDown se lanza el código que me puso Caro:

Código Delphi [-]
procedure TDBGrid.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  showmessage('Hola');
  inherited MouseDown(Button, Shift, X, Y);
end;

roman 13-04-2011 15:30:18

El código de Caro no afectará a DBGrids en otros formularios pero sí a todos los que haya en ese formulario.

Lo que puedes hacer es usar el método redefinido, no para ejecutar tu código, sino para lanzar el evento:

Código Delphi [-]
procedure TDBGrid.MouseDown(
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if Assigned(OnMouseDown) then
    OnMouseDown(Self, Button, Shift, X, Y);

  inherited;
end;

Así, sólo los DBGrid a los que asignes el evento OnMouseDown ejecutarán el código que desees.

// Saludos

ElDioni 14-04-2011 09:27:29

Buenos días,
muchas gracias, de esta forma que me comentas si que funciona solo en el dbgrid que le pongo el código, pero lo he tenido que poner así
Código Delphi [-]
procedure TDBGrid.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin

  inherited;
  if Assigned(OnMouseDown) then
    OnMouseDown(Self, Button, Shift, X, Y);

end;

Si yo ponía en el mousedown de mi dbgrid el siguiente código
Código Delphi [-]
showmessage(FrmMenuArt.QueryOrdenes.fieldbyname('NOrden').AsString);
me mostraba el nº de orden en el que estaba y no en el que había hecho el mousedown al ponerlo como te comento si me lo hace bien.

De nuevo gracias a todos por su tiempo me han ayudado mucho.

Saludos.


La franja horaria es GMT +2. Ahora son las 10:25:31.

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