Jump to content


Photo

Mostrar teclado en pantalla touch

touch delphi7 pantalla

  • Please log in to reply
5 replies to this topic

#1 tiquinho

tiquinho

    Member

  • Miembros
  • PipPip
  • 36 posts

Posted 20 January 2020 - 04:12 PM

Buenas tardes a todos

 

Actualmente estoy realizando una aplicación pequeña en delphi7, y se me presenta el siguiente problema: Resulta que la pantalla en la que se va usar la aplicación es touch y no he podido solucionar dos cuestiones

 

1. Que al dar click sobre un edit se despliegue un teclado para ingresar el login y el pw

2. Que al dar doblelcik sobre un panel este cambie de color.

 

Son dos cosas relativamente sencillas, pero no he podido dar solución y no he encontrado algún recurso que e de un luz para solucionar el inconveniente.

 

 

Gracias a todos los que me puedan ayuda.

 

 


  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14460 posts
  • LocationMéxico

Posted 20 January 2020 - 06:26 PM

Hola tiquinho,

 

¿No sabes como mostrar un teclado y cambiar de color o no responden los eventos?

 

Saludos


  • 0

#3 tiquinho

tiquinho

    Member

  • Miembros
  • PipPip
  • 36 posts

Posted 21 January 2020 - 10:18 AM

Hola Egostar

 

1. No se como mostrar el teclado

2. El doble click en la pantalla a veces lo toma y otras veces no 

 

Saudos


  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14460 posts
  • LocationMéxico

Posted 21 January 2020 - 12:52 PM

Hola Egostar

 

1. No se como mostrar el teclado

2. El doble click en la pantalla a veces lo toma y otras veces no 

 

Saudos

 

 

Hola tiquinho

 

1. Asumo que hay que disparar el teclado en pantalla de Windows (%windir%\system32\osk.exe) con WinExec o ShellExecute

2. Ahí tendrías que hacer un trace para verificar porque no se dispara el evento.

 

Saludos


  • 1

#5 tiquinho

tiquinho

    Member

  • Miembros
  • PipPip
  • 36 posts

Posted 27 January 2020 - 09:21 AM

Hola Egostar

 

Gracias por tus respuestas. 

 

Realice una búsqueda para el punto 1. y en la página https://vike.io/es/291208/ encontré la respuesta y lo adapte a mi código y funciono para el pc donde estoy realizando el aplicativo (w8) pero en un w10 donde realizaron pruebas no funciono. 

 

Me puse a revisar y encontré que el osk.exe se encuentra en el system32 independiente de si es de 32 0 64 bits.

 

Lo que hice fue cambiar la línea:

 

Result := IncludeTrailingPathDelimiter(S) + 'Sysnative\';

 

por 

 

Result := IncludeTrailingPathDelimiter(S) + 'System32\'; 

 

Por ahora me ha funcionado, debo probar en otros pc's

 

Dejo aquí la solución del punto 1.


php
  1. private
  2. { Private declarations }
  3. class function IsWOW64: Boolean;
  4.  
  5.  
  6. implementation
  7.  
  8. {$R *.DFM}
  9. uses shellapi;
  10.  
  11.  
  12. class function TFrmLogin.IsWOW64: Boolean;
  13. type
  14. TIsWow64Process = function( // Type of IsWow64Process API fn
  15. Handle: THandle;
  16. var Res: BOOL
  17. ): BOOL; stdcall;
  18. var
  19. IsWow64Result: BOOL; // result from IsWow64Process
  20. IsWow64Process: TIsWow64Process; // IsWow64Process fn reference
  21. begin
  22. // Try to load required function from kernel32
  23. IsWow64Process := GetProcAddress(
  24. GetModuleHandle('kernel32'), 'IsWow64Process'
  25. );
  26.  
  27. if Assigned(IsWow64Process) then
  28. begin
  29. // Function is implemented: call it
  30. if not IsWow64Process(GetCurrentProcess, IsWow64Result) then
  31. RaiseLastOSError;
  32. // Return result of function
  33. Result := IsWow64Result;
  34. else
  35. // Function not implemented: can't be running on Wow64
  36. Result := False;
  37.  
  38.  
  39. procedure TFrmLogin.TecladoEnPantalla(Sender: TObject);
  40. var
  41. path:String;
  42. res : Integer;
  43.  
  44. function GetSysDir: string;
  45. var
  46. Buf: array[0..MAX_PATH] of Char;
  47. Len: UINT;
  48. S: String;
  49. begin
  50. {$IFNDEF WIN64}
  51. if TFrmLogin.IsWOW64 then
  52. begin
  53. Len := GetWindowsDirectory(Buf, MAX_PATH);
  54.  
  55. if Len = 0 then RaiseLastOSError;
  56. SetString(S, Buf, Len);
  57.  
  58. Result := IncludeTrailingPathDelimiter(S) + 'System32\';
  59.  
  60. Exit;
  61. end;
  62.  
  63. {$ENDIF}
  64. Len := GetSystemDirectory(Buf, MAX_PATH);
  65. if Len = 0 then RaiseLastOSError;
  66. SetString(S, Buf, Len);
  67.  
  68. Result := IncludeTrailingPathDelimiter(S);
  69. end;
  70.  
  71. begin
  72.  
  73. if StrToIntDef(Get_ValorFromIni(ExtractFilePath(Application.ExeName) + '\Configuracion.ini','TECLADO', 'EN_PANTALLA'),0) = 1 then
  74. begin
  75. path := GetSysDir;
  76.  
  77. path := path + 'osk.exe';
  78.  
  79. //path := ExtractFileDir(application.ExeName) +'\FreeVK.exe';
  80.  
  81. res := ShellExecute(self.Handle,'open',Pchar(path),nil,nil,SW_NORMAL);
  82.  
  83. if res <> 42 then
  84. begin
  85. ShowMessage(path);
  86. RaiseLastOSError;
  87. end;
  88. end;
  89. end;

Ahora me voy a dedicar al punto 2. 

 

Hasta pronto.

 

Saludo


  • 1

#6 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14460 posts
  • LocationMéxico

Posted 27 January 2020 - 12:36 PM

Hola tiquinho

 

Muchas gracias por la solución. (y)

 

Saludos


  • 0





Also tagged with one or more of these keywords: touch, delphi7, pantalla

IP.Board spam blocked by CleanTalk.