Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
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 28-10-2005
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 25
Crandel Va por buen camino
El ShortCut del botón esta dado por la letra que sigue al simbolo & que esta en la propiedad Caption del botón. Simplemente elimina el &.
__________________
[Crandel]
Responder Con Cita
  #2  
Antiguo 28-10-2005
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 Crandel
Simplemente elimina el &.
Pero esto es un poco drástico ¿no? Tal como describe la situación, debería funcionar bien; si el foco no está en el botón, el shortcut debería generarse sólo mediante ALT.

// Saludos
Responder Con Cita
  #3  
Antiguo 31-10-2005
fdelamo fdelamo is offline
Miembro
 
Registrado: oct 2005
Ubicación: Sotoca de Tajo - Guadalajara (ESP)
Posts: 86
Poder: 21
fdelamo Va por buen camino
Cita:
Empezado por roman
Pero esto es un poco drástico ¿no? Tal como describe la situación, debería funcionar bien; si el foco no está en el botón, el shortcut debería generarse sólo mediante ALT.

// Saludos
Hola Roman, Crandel,

Como dice Roman esto sería muy drástico. Crandel, lo que sugieres me resultaría muy costoso, el control no es un stringgrid (es un grid derivado del TCustomGrid, aunque el stringgrid se comporta igual), y ese componente lo uso en, no se, quizá 200 pantallas del programa (y todos o casi todos los botaones tienen una tecla de acceso rápido). Lo que ocurre es que los usuarios han solicitado esta funcionalidad, ya que para buscar alguna fila en el grid así es mucho más cómodo que buscarla con los cursores o ratón (y tienen razón), y al tocar el componente, me he dado cuenta que ocurría esto.

Por esa razón no quiero tocar el código del programa para solucionar este problema, lo quisiera hacer desde el código del componente. He probado a asignar a la variable por referencia "Char" (creo que se llama así) un valor 0, pero da igual, se ejecuta el código del botón.

Si se os ocurre algo ya me contaréis, de todas formas gracias por vuestra atención, y yo seguiré investigando, a ver si descubro algo.

Un saludo
Responder Con Cita
  #4  
Antiguo 11-11-2005
fdelamo fdelamo is offline
Miembro
 
Registrado: oct 2005
Ubicación: Sotoca de Tajo - Guadalajara (ESP)
Posts: 86
Poder: 21
fdelamo Va por buen camino
¿Solución encontrada?

Hola a todos,

Creo que he encontardo una solución, aunque seguramente no sea la mejor, ya que lo he hecho por medio de hooks.

Lo que hago es crear un hook de teclado, para capturar las teclas pulsadas.

Os explico con el código:

Variables que me hacen falta, yo las he puesto globales en la unidad
Código Delphi [-]
var
  HookKbd: HHook; //Identificador del Hook creado
  EsSegundaVez: Boolean; //Para solo procesarlo una vez, el caso es que para
                         //cade tecla lo captura dos veces ¿el Down y el Up?

En la parte del Create del componente:
Código Delphi [-]
  HookKbd := 0; //Inicializamos
  //Con el IDE da un error y cierra el programa y el IDE ¿por que?
  if not((FindWindow('TAppBuilder',nil) > 0) and
     (FindWindow('TPropertyInspector',nil) > 0) and
     (FindWindow('TAlignPalette',nil) > 0)) then
  begin
    //Comprobamos la version de windows (en 98 no tira)
    Version.dwOSVersionInfoSize:=SizeOf(Version);
    GetVersionex(Version);
    if Version.dwPlatformId <> VER_PLATFORM_WIN32_WINDOWS then
    begin
      //Creamos el Hook
      HookKbd := SetWindowsHookEx(WH_KEYBOARD, @KbdHook, HInstance, 0);
      EsSegundaVez := False; //Inicializacion
    end;
  end;

En el destroy del componente:

Código Delphi [-]
 
  //Liberamos el Hook
  if HookKbd <> 0 then UnhookWindowsHookEx(HookKbd);

y la función KbdHook:

Código Delphi [-]
 
function KbdHook(Code: Integer; WParam, LParam: DWORD): HHook;
var
  tmpClase: array[0..30] of Char; //Aqui guardaremos el nombre de la clase 
                                  //del control que tiene el foco
begin
  //Averiguamos el nombre de la clase del control que tiene el foco
  GetClassName(GetFocus, tmpClase, 30);

  //Controlamos que no esté pulsado el ALT o CONTROL
  //Que el foco esté en un control de la clase del Grid ('TMiGrid')
  //Y que se pulse un caracter alfanumérico
  if ((HiWord(GetKeyState(VK_MENU)) = 0) and
     (HiWord(GetKeyState(VK_CONTROL)) = 0) and
     (tmpClase = 'TMiGrid') and
     (Chr(WParam) in ['A'..'Z', '0'..'9', 'Ñ', 'ñ'])) then
  begin
    //No se exactamente por qué, pero cada caracter lo capta dos veces
    if EsSegundaVez then
    begin
      EsSegundaVez := False;
      Result := 1; //Si ponemos 0, sigue ejecutando el siguiente hook (por lo menos el del shortcut del botón)
      Exit;
    end;
    EsSegundaVez := True;
    //Mandamos el mensaje del KeyDown al control que tiene el foco
    //Este ya no lo captura el shortcut del boton
    SendMessage(GetFocus, WM_KEYDOWN, WParam, LParam);
    Result := 1; //Si ponemos 0, sigue ejecutando el siguiente hook (por lo menos el del shortcut del botón)
  end
  else
  begin
    //Llamamos al siguiente Hook, es decir no hacemos nada
    Result := CallNextHookEx(HookKbd, Code, wParam, lParam);
  end;
end;

Y eso es todo, seguramente el código se puede mejorar (por ejemplo solo crear un Hook independientemente de los controles que haya), pero es un primer intento.

Por mi parte nada más, sólo que si tenéis alguna sugerencia, duda o comentario aquí estoy.

Un saludo,

Kiko
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


La franja horaria es GMT +2. Ahora son las 08:55:22.


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