Ver Mensaje Individual
  #2  
Antiguo 20-09-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Casimiro Notevi
Perfecto, si nos movemos con la tecla TAB o con la tecla SHIFT+TAB, funciona perfecto, tanto hacia delante como hacia atrás, se salta las celdas que en el array están a false y sólo se posiciona en las que están a true.
Aunque cuando va hacia atrás no debería de funcionar, viendo el código del evento SelectCell se ve que debería de avanzar, no retroceder, cuando encuentre una posición con valor false , pero funciona perfecto.
Supongo que funciona perfecto porque cuando vas hacia atrás y emulas el TAB tienes oprimida la tecla SHIFT.

Ahora bien, no especificas de qué manera estás intentando con las teclas IZQUIERDA y DERECHA. Porque "algo" tienes que hacer, puesto que las teclas de cursor no funcionan en el StringGrid exactamente igual que TAB y SHIFT+TAB (no avanzan ni retroceden de fila cuando se llega a un extremo).

Pero, si usas el evento KeyDown o KeyUp, tendrás que anular (Key := 0) el comportamiento natural o tendrás un doble movimiento. Además, no te funcionaría el retroceso a menos que oprimas SHIFT+LEFT pues aquí lo que se supone que no funciona realmente no funcioona al no tener oprimida la tecla SHIFT.

Yo más o menos lo he podido hacer mandando una doble simulación:

Código Delphi [-]
keybd_event(VK_SHIFT, 0, 0, 0);
keybd_event(VK_TAB, 0, 0, 0);
keybd_event(VK_TAB, 0, KEYEVENTF_KEYUP, 0);

pero deja algo extraño al teclado pues no recibe el UP del SHIFT. Y si se lo añdo, entonces no funciona.

Por otra parte, lo que quieres lograr, creo que yo no lo haría así. Para empezar, ¿has visto lo que sucede cuando intentas seleccionar una celda con el ratón?

No he probado todavía, pero me parece que sería mejor intentar no simular esas teclas y manipular los valores de Col y Row en el evento KeyDown.

// Saludos
Responder Con Cita