Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Duda con Shortcut (https://www.clubdelphi.com/foros/showthread.php?t=16915)

Sonic 16-12-2004 14:57:24

Duda con Shortcut
 
Hola a todos!!

Tengo una duda-problema con una TAction, vereis:

A dicha TAction le tengo asociado un Shortcut de manera que la acción se realice cada vez que se pulsa el cursor hacia izquierda (por ejemplo). Y funciona a la perfección, el problema es que dentro de mi aplicación la pulsación de la tecla izquierda ya siempre hace saltar la funcion de la TAction, y no puedo usar el cursor para moverme por los campos de un TStringGrid que tengo.

Se me ocurrió añadir al final de la función que responde al cursor un SendMessage, que enviara dicha pulsación al Handle del TStringGrid correspondiente, pero lo que hace es cambiar de Campo en lugar de mover el cursor.

Si alguien pudiera proponerme una solución que no pasara por sustituir la TAction por otro método (OnKeyPress o usando Hooks, esta última creo que es buena opción pero conlleva mucho cambio en el código) le estaría muy agradecido.

Muchas Gracias!

Sonic 16-12-2004 16:54:29

No entiendo el delphi
 
He encontrado por ahí en internet código en delhpi que creo que me serviría de saber adaptarlo a C++, pero la verdad es que hay algunas cosas que no entiendo.

Lo del SendMessage no funciona pq se lo mando al StringGrid, mi primera idea fue intentar mandárselo al TEdit que incluye dicho componente pero no encontré el modo. Resulta que TStringGrid hereda de TCustomGrid que tiene una propiedad llamada ImplaceEditor que es un puntero al TEdit. Problema....ImplaceEditor es una propiedad protegida y no puedo acceder a ella. Sin embargo en Internet he econtrado cierto código que según parece es capaz de acceder a dicha propiedad. Os lo pongo aquí a ver si alguién consigue explicármelo.

Código:

{
  The following code allows you to position the caret
  in a cell (InplaceEditor) of a StringGrid.
  We need a Cracker class to access the InplaceEditor.
 }
 
 
type
 
TGridCracker = class(TStringGrid);
 
 {...}
 
 
implementation
 
 
{...}
 
 
procedure SetCaretPosition(Grid: TStringGrid; col, row, x_pos: Integer);
 begin
 
Grid.Col := Col;
  Grid.Row := Row;
  with TGridCracker(Grid) do
       
InplaceEditor.SelStart := x_pos;
 end;
 
 // Get the Caret position from the focussed cell
 
function GetCaretPosition(Grid: TStringGrid): Integer;
 begin
  with
TGridCracker(Grid) do
       
Result := InplaceEditor.SelStart;
 end;
 
 // Example:
 
// Set the focus on col 1, row 3 and position the caret at position 5

 
 
procedure TForm1.Button1Click(Sender: TObject);
 begin
 
StringGrid1.SetFocus;
  SetCaretPosition(StringGrid1, 1, 3, 5);
 end;
 



¿Qué es TGridCracker? ¿Y como se usa en C++?

Muchas Gracias!

Sonic 16-12-2004 18:13:43

Bueno aunque no he llegado a entender el código en Delphi. Ya he llegado a una solución. Al final (era lo más obvio y cupongo que es lo se hace en el código delphi anterior). He creado una clase que hereda de TStringGrid y le he añadido un método que me devuelva la propiedad que necesito usar. ¿Sencillo no?

Sin embargo nunca creo ninguna instancia de la nueva clase sino que le hago un overcast al puntero del StringGrid original y así puedo usar el método que he creado.

Bueno, muchas gracias a todos aquellos que hayais pensado en ayudarme!

Sonic 16-12-2004 18:14:29

QUE GUAY!!! UN HILO PARA MI SOLO
JAJAJAJA:D:D:D

Saludos a todos!!!


La franja horaria es GMT +2. Ahora son las 00:59:36.

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