Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-04-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 21
Chris Va por buen camino
Lo raro que me suena es que el evento dispare tu código solo cuando no está sobre la rejilla de datos. La rejilla de datos no es un control, de hecho no es nada más que un lienzo donde se dibujan los datos. Las cabeceras de columnas y las partes en blanco también son parte del mismo lienzo.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #2  
Antiguo 12-04-2011
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 22
ElDioni Va por buen camino
Bueno, el error que os ponía antes me lo daba si empezaba a escribir el código que me indicaba Caro a mano, pero si lo copio y pego no me dice nada, sin embargo al compilar no me deja por que me dice que "Method MouseDown not found in base class"
No se que puede estar pasando.

Saludos.
Responder Con Cita
  #3  
Antiguo 12-04-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Chris Ver Mensaje
Lo raro que me suena es que el evento dispare tu código solo cuando no está sobre la rejilla de datos. La rejilla de datos no es un control, de hecho no es nada más que un lienzo donde se dibujan los datos. Las cabeceras de columnas y las partes en blanco también son parte del mismo lienzo.
A ver. Entendámonos. El control, incluída la zona de las celdas, sí recibe el evento del ratón por parte del sistema operativo. Pero es el manejador de este evento del propio control el que decide no transmitir ese evento.

// Saludos
Responder Con Cita
  #4  
Antiguo 12-04-2011
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 22
ElDioni Va por buen camino
Hola, ahora no se muy bien lo que he hecho pero me aparece lo siguiente al compilar: Unsatisfied forward or external declaration:'TDBGrid.MouseDown'.
Voy a preguntar, aunque seguro que ahora me decis: "Pues claro que es por eso, lo tienes que quitar, como no nos lo has dicho antes".
Tenía puesto de un código anterior justo encima del

TForm1 = class(TForm)

la siguiente línea.

THackGrid = class(TDBGrid);

es de un código que saqué del club para hacer lo siguiente:

Código Delphi [-]
procedure TFrmMenuArt.DBGridArticulosExit(Sender: TObject);
begin
//guarda el texto seleccionado de la casilla donde estaba en una variable
//o el texto completo si no había nada seleccionado al salir del grid para
//luego hacer el filtro
try
if THackGrid(DBGridArticulos).InplaceEditor.SelText='' then
  begin
    if dbgridArticulos.Fields[dbgridArticulos.SelectedIndex].AsString<>'' then
      begin
        textofiltro:=dbgridArticulos.Fields[dbgridArticulos.SelectedIndex].AsString;
      end;
  end
else
  begin
    textofiltro:=(THackGrid(DBGridArticulos).InplaceEditor.SelText);
  end;
except
  textofiltro:=dbgridArticulos.fields[dbgridArticulos.selectedIndex].asstring;
end;
CampoFiltro:=dbgridArticulos.Columns[dbgridArticulos.selectedindex].FieldName;
end;
¿es posible que este código que os muestro esté creando conflicto con el nuevo código que me proponía Caro para el tema del MouseDown?
Es que si no es por eso no se porque no me funciona la solución propuesta.

Saludos.
Responder Con Cita
  #5  
Antiguo 12-04-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 21
Chris Va por buen camino
Cita:
Empezado por roman Ver Mensaje
A ver. Entendámonos. El control, incluída la zona de las celdas, sí recibe el evento del ratón por parte del sistema operativo. Pero es el manejador de este evento del propio control el que decide no transmitir ese evento.

// Saludos
¿Entonces hay un condicional o algo por el estilo, que decide no transmitir el evento cuando el Mouse está sobre las celdas de datos? Esto lo digo por lo que anteriormente ha dicho el compañero
Cita:
Empezado por ElDioni Ver Mensaje
ponga lo que ponga, no hace nada a no ser que pulse sobre la barra de titulos del DBGrid o en el espacio, a la derecha, dentro de la grilla, que ya no contiene datos de la tabla
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #6  
Antiguo 12-04-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Chris Ver Mensaje
¿Entonces hay un condicional o algo por el estilo, que decide no transmitir el evento cuando el Mouse está sobre las celdas de datos? Esto lo digo por lo que anteriormente ha dicho el compañero
El código del método de MouseDown en TControl es éste:

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

O sea, que a nivel de TControl, es que se llama al evento definido por el usuario.

Ahora, si pones un punto de ruptura en el código de TCustomDBGrid.MouseDown, notarás que, no importa donde coloques el cursor del ratón sobr el DBGrid, la ejecución se detiene, indicando que el control recibió el evento.

Sin emabargo, si sigues examinando el código, verás que las llamadas a

Código Delphi [-]
inherited MouseDown(...);

están bajo algunos condicionales, a diferencia de MouseUp, donde la llamada a

Código Delphi [-]
inherited MouseUp(...);

ocurre sin ninguna condición.

Al no llamarse al MouseDown de TControl, nunca se llama al evento definidio por el usuario. Y de ahí el comportamiento que describe ElDioni.

// Saludos
Responder Con Cita
  #7  
Antiguo 12-04-2011
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 22
ElDioni Va por buen camino
Bueno, ya he conseguido hacer que funcionara el asunto, ahora corregirme si me equivoco, al poner este código que me ha facilitado Caro, en todos los DbGrids que tengo declarados salta el código que he introducido al hacer el MouseDown, si lo que quiero es que solo afecte a un DbGrid en concreto debería declararlo como TDBGridMio = class(DBGrids.TDBGrid) en lugar de TDBGrid = class(DBGrids.TDBGrid) y declarar mi DBGrid como DBGridOrdenes: TDBGridMio; para que no afecte a los otros DbGrids.
¿es así?.

Saludos
Responder Con Cita
  #8  
Antiguo 12-04-2011
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 22
ElDioni Va por buen camino
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.
Responder Con Cita
  #9  
Antiguo 12-04-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #10  
Antiguo 13-04-2011
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 22
ElDioni Va por buen camino
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;
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Duda con con el evento MouseDown NEG1414 C++ Builder 3 05-10-2008 15:00:40
Espero me ayuden BaRdO JAVA 0 23-08-2007 04:46:31
autorefresh no funciona en query y dbgrid ilichhernandez Conexión con bases de datos 6 08-11-2005 19:32:00
Espero no lleguemos a esto :s __cadetill Humor 7 21-11-2003 11:03:19


La franja horaria es GMT +2. Ahora son las 23:07:56.


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
Copyright 1996-2007 Club Delphi