Personalizando el TTouchKeyboard

Chris Bensen es el encargado de las características Touch, Multi-Touch y Gestos presentes en Delphi 2010 y ahora nos entrega algún código que nos permite personalizar el teclado en pantalla para aplicaciones Touch.

Según las propias palabras de Chris (y mi traducción libre), en su post Hacking TTouchKeyboard part I, leemos:

El TTouchKeyboard es un teclado en pantalla bastante flexible que soporta múltiples distribuciones del teclado, pero que viene de fábrica solamente con el teclado numérico y un teclado estándar para una gran cantidad de idiomas. Como crear estas distribuciones ha sido un misterio, hasta ahora.

A continuación, algo de código. El primer trozo lista todas las distribuciones de teclado disponibles. Una distribución, en este caso, es un recurso, cuyo nombre contiene la cadena KEYBOARD.

procedure GetKeyboardLayoutNames(ANames: TStrings);

  function EnumResNames(Module: HMODULE; ResType, ResName: PChar;
    Nothing: Pointer): Integer; stdcall;
  const
    sResourceName = 'KEYBOARD';
  begin
    if Pos(sResourceName, ResName) > 0 then
      LayoutNames.Add(ResName);
    Result := 1;
  end;

begin
  LayoutNames := TStringList.Create;
  try
    EnumResourceNames(HInstance, RT_RCDATA, @EnumResNames, 0);
    ANames.Clear;
    ANames.AddStrings(LayoutNames);
  finally
    FreeAndNil(LayoutNames);
  end;
end;

Una vez se tiene el nombre de la distribución que se quiere utilizar, puede cargarse con este otro código:

function LoadLayout(const LayoutName: string): TVirtualKeyLayout;
var
  Stream: TResourceStream;
  TempStream: TStream;
begin
  Result := nil;
  Stream := TResourceStream.Create(HInstance, LayoutName, RT_RCDATA);
  try
    Result := TVirtualKeyLayout.Create;
    Result.LoadFromStream(Stream);
  finally
    Stream.Free;
  end;
end;

En una segunda entrega (Hacking TTouchKeyboard part II), el bueno de Chris además nos muestra como iterar por la estructura, almacenar y recuperar una distribución del teclado en un archivo XML, en el ejemplo Guardar una distribución de TTouchKeyboard

4 Respuestas a “Personalizando el TTouchKeyboard

  1. Gracias, como puedo usar la funcionalidad de touchKeyboard, podrias adicionar un ejemplo

    • Ricardo, no entiendo bien tu pregunta, pues es tan sencillo como botar el control en un formulario y ya funciona, si fueses mas específico con lo que buscas, quizás pueda echarte un cable. Un saludo.

  2. Hola jachguate, buen dia. Me podrias apoyar con lo siguiente: tengo un programa normal de windows, que se va a usar en una pantalla touch.
    hay alguna forma de mostrar automaticamente el teclado, al momento de que un componente TEdit o parecido tiene el enfoque? de antemano, Gracias.

    • Juan Carlos, hasta donde se no hay un control que lo haga automático, pero no es difícil lograrlo. Puedes utilizar los eventos onEnter/OnExit de los controles, o bien derivar los que te interese para añadir esta funcionalidad como parte de la clase.

      Incluso podrías utilizar clases interpuestas para conseguir el resultado. Qué es lo que más te conviene depende un poco del tamaño de tu proyecto y el tiempo que dispongas para efectuarlo. Si el proyecto es pequeño, yo me decantaría por lo rápido (y sucio): OnEnter/OnExit.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s