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

 
 
Herramientas Buscar en Tema Desplegado
  #12  
Antiguo 20-09-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
A ver, prueba con esto:

Código Delphi [-]
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
  if GoingForward or GoingBackward then
  begin
    if StrToIntDef(StringGrid1.Cells[ACol, ARow], 0) = 0 then
    begin
      if GoingBackward then
        keybd_event(VK_SHIFT, 0, 0, 0);

      keybd_event(VK_TAB, 0, 0, 0);
      keybd_event(VK_TAB, 0, KEYEVENTF_KEYUP, 0);

      if GoingBackward then
        keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
    end;
  end;

  GoingForward := false;
  GoingBackward := false;
end;

procedure TForm1.StringGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  GoingForward := false;
  GoingBackward := false;

  if Key = VK_LEFT then
  begin
    keybd_event(VK_SHIFT, 0, 0, 0);
    keybd_event(VK_TAB, 0, 0, 0);
    keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
    keybd_event(VK_TAB, 0, KEYEVENTF_KEYUP, 0);

    Key := 0;
  end;

  if Key = VK_RIGHT then
  begin
    keybd_event(VK_TAB, 0, 0, 0);
    keybd_event(VK_TAB, 0, KEYEVENTF_KEYUP, 0);

    Key := 0;
  end;

  if Key in [VK_PRIOR, VK_UP] then
  begin
    GoingBackward := true;
  end;

  if Key in [VK_NEXT, VK_DOWN] then
  begin
    GoingForward := true;
  end;

  if Key = VK_TAB then
  begin
    if ssShift in Shift then
      GoingBackward := true
    else
      GoingForward := true;
  end;
end;

GoingBackward y GoingForward son variables boolenas delcaradas en el formulario.

En principio, con esto queda tal como quieres y se impide lo de la selección con el ratón (aunque no he hecho una prueba exhaustiva).

Aún así, el resultado puede ser confuso para el usuario, sobre todo con las teclas de avanzar o retroceder página, pues el "ciclado" puede dejarlos en un lugar para nada esperado.

¡Ah! Me olvidaba: en el ejemplo, para simplificar, la verificación de si la celda es editable se hace contra el contenido en sí de la celda (0 o 1).

// Saludos
Responder Con Cita
 


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
Detectar pulsación de teclas Ctrl, Alt y Shift y teclas virtuales (de función,...) rrf Varios 11 09-08-2017 13:24:21
El programa se queda "colgado" mientras copia y luego "despierta" NeWsP OOP 5 10-03-2010 22:05:40
Como hacer que se vea "Si" en vez de "TRUE" en un DBGrid lu9eui C++ Builder 2 07-08-2007 04:03:13
Necesito llamar a métodos de clases "hija" desde su clase "padre" Flecha OOP 17 20-04-2007 00:03:53


La franja horaria es GMT +2. Ahora son las 17:18:40.


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