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
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.
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.
Bueno, como mostrar el TabTip numérico cuando el Tedit es para sólo números?
Por ejemplo ejecutar el tecleo y 123 del teclado virtual.
gracias