RICHEDITBOX

HMG en Español

Moderator: Rathinagiri

User avatar
esgici
Posts: 4543
Joined: Wed Jul 30, 2008 9:17 pm
DBs Used: DBF
Location: iskenderun / Turkiye
Contact:

Re: RICHEDITBOX

Post by esgici »

bpd2000 wrote:Is there any other software require / any changes require in system, because even after I change language selection but OSK shows only English language
My OS is Windows XP Sp3
Hi Dave

Are you sure that

- all languages ( defined in aLanguages array ) installed ( by Windows's control panel ) in your system

and

- all language codes (constants) ( again, defined in aLanguages array ) are correct depending on MS definition ?

@ Claudio :

I couldn't seen result of 'off' and 'Release' actions :(

@ all

Why almost nobody interested by this subject ?

In my opinion after Unicode, this is the second revolution in HMG.

Without setting with any way ( SET commands or HB_xx function calls), any Language any Codepage etc. we have opportunity of data entry in ANY language with ANY control :o :D :!:


Regards
Last edited by esgici on Tue Jun 24, 2014 5:51 pm, edited 1 time in total.
Viva INTERNATIONAL HMG :D
User avatar
bpd2000
Posts: 1207
Joined: Sat Sep 10, 2011 4:07 am
Location: India

Re: RICHEDITBOX

Post by bpd2000 »

esgici wrote: Hi Dave

Are you sure that

- all languages ( defined in aLanguages array ) installed ( by Windows's control panel ) in your system

and

- all language codes (constants) ( again, defined in aLanguages array ) are correct depending on MS definition ?
I have installed Google Input Tools in Hindi, Gujarati Language is working OK
BPD
Convert Dream into Reality through HMG
User avatar
esgici
Posts: 4543
Joined: Wed Jul 30, 2008 9:17 pm
DBs Used: DBF
Location: iskenderun / Turkiye
Contact:

Re: RICHEDITBOX

Post by esgici »

bpd2000 wrote: I have installed Google Input Tools in Hindi, Gujarati Language is working OK
In Win7 Gujurati exists in control panel\language-keyboard settings
gujarati.PNG
gujarati.PNG (30.38 KiB) Viewed 4821 times
and constant for it defined in MS Language list
gujaratiConstant.PNG
gujaratiConstant.PNG (2.56 KiB) Viewed 4821 times
I can't say anything for XP, but for Win7 we don't need any other third party tool.

Regards
Viva INTERNATIONAL HMG :D
User avatar
serge_girard
Posts: 3165
Joined: Sun Nov 25, 2012 2:44 pm
DBs Used: 1 MySQL - MariaDB
2 DBF
Location: Belgium
Contact:

Re: RICHEDITBOX

Post by serge_girard »

Esgici,


I'm very interested ! But lucky for me that all default settings / languages / etc. work fine.
So I cannot test or give commentary about this issue.


Greetings, Serge
There's nothing you can do that can't be done...
User avatar
srvet_claudio
Posts: 2193
Joined: Thu Feb 25, 2010 8:43 pm
Location: Uruguay
Contact:

Re: RICHEDITBOX

Post by srvet_claudio »

esgici wrote:@ Claudio :
I couldn't seen result of 'off' and 'Release' actions
In this example not work well the actions of buttons "on/off" and "release" ? viewtopic.php?p=35243#p35243
In my system work fine (win 7).
Only for test, increment the delay to Inkey (5)
Best regards.
Dr. Claudio Soto
(from Uruguay)
http://srvet.blogspot.com
User avatar
pctoledo
Posts: 123
Joined: Wed Aug 25, 2010 10:45 am
Location: Araçatuba - SP - Brazil
Contact:

Re: RICHEDITBOX

Post by pctoledo »

Hi, Dr.Claudio

Fantastic! Very interesting.
Regards/Saludos,

Toledo

Clipper On Line
User avatar
mol
Posts: 3720
Joined: Thu Sep 11, 2008 5:31 am
Location: Myszków, Poland
Contact:

Re: RICHEDITBOX

Post by mol »

srvet_claudio wrote:Enjoy !

Code: Select all

#include "hmg.ch"

#define WM_CLOSE 16

#xtranslate VirtualKeyboard.FILENAME         => "OSK.EXE"
#xtranslate VirtualKeyboard.FULLFILENAME     => GetSystemDir()+"\"+VirtualKeyboard.FILENAME
#xtranslate VirtualKeyboard.HANDLE           => _HMG_VirtualKeyboardGetHandle()
#xtranslate VirtualKeyboard.OPEN [ SHOW ]    => EXECUTE FILE VirtualKeyboard.FULLFILENAME
#xtranslate VirtualKeyboard.OPEN   HIDE      => EXECUTE FILE VirtualKeyboard.FULLFILENAME HIDE
#xtranslate VirtualKeyboard.RELEASE          => SendMessage (VirtualKeyboard.HANDLE, WM_CLOSE, 0, 0)
#xtranslate VirtualKeyboard.TITLE            => GetWindowText (VirtualKeyboard.HANDLE)
#xtranslate VirtualKeyboard.TITLE := <arg>   => SetWindowText (VirtualKeyboard.HANDLE, <arg>)
#xtranslate VirtualKeyboard.SHOW             => ShowWindow (VirtualKeyboard.HANDLE)
#xtranslate VirtualKeyboard.HIDE             => HideWindow (VirtualKeyboard.HANDLE)
#xtranslate VirtualKeyboard.IsVisible        => IsWindowVisible (VirtualKeyboard.HANDLE)
#xtranslate VirtualKeyboard.IsOpen           => IsValidWindowHandle (VirtualKeyboard.HANDLE)
#xtranslate VirtualKeyboard.IsRelease        => .NOT. VirtualKeyboard.IsOpen
#xtranslate VirtualKeyboard.IsMinimize       => IsMinimized (VirtualKeyboard.HANDLE)
#xtranslate VirtualKeyboard.IsMaximize       => IsMaximized (VirtualKeyboard.HANDLE)

#xtranslate VirtualKeyboard.ROW    => GetWindowRow    ( VirtualKeyboard.HANDLE )
#xtranslate VirtualKeyboard.COL    => GetWindowCol    ( VirtualKeyboard.HANDLE )
#xtranslate VirtualKeyboard.WIDTH  => GetWindowWidth  ( VirtualKeyboard.HANDLE )
#xtranslate VirtualKeyboard.HEIGHT => GetWindowHeight ( VirtualKeyboard.HANDLE )

#xtranslate VirtualKeyboard.ROW    := <arg> => _SetWindowSizePos ( VirtualKeyboard.HANDLE, <arg>,      ,      ,       )
#xtranslate VirtualKeyboard.COL    := <arg> => _SetWindowSizePos ( VirtualKeyboard.HANDLE,      , <arg>,      ,       )
#xtranslate VirtualKeyboard.WIDTH  := <arg> => _SetWindowSizePos ( VirtualKeyboard.HANDLE,      ,      , <arg>,       )
#xtranslate VirtualKeyboard.HEIGHT := <arg> => _SetWindowSizePos ( VirtualKeyboard.HANDLE,      ,      ,      , <arg> )


FUNCTION _HMG_VirtualKeyboardGetHandle
STATIC hWnd := 0
LOCAL nProcessID, aWin
   IF IsValidWindowHandle (hWnd) == .F.
      hWnd := 0
      aWin := EnumWindows ()
      FOR i = 1 TO HMG_LEN (aWin)
         GetWindowThreadProcessId (aWin[i], NIL, @nProcessID)
         IF HMG_UPPER (VirtualKeyboard.FILENAME) $ HMG_UPPER (GetProcessImageFileName(nProcessID))
            hWnd := aWin[i]
            EXIT
         ENDIF
      NEXT
   ENDIF
RETURN hWnd



Function Main


   aLanguages := { { 'Arabic',     0x0401 },;  
                   { 'English',    0x0409 },;
                   { 'French',     0x040C },;  
                   { 'Polish',     0x0415 },;
                   { 'Portuguese', 0x0416 },;                     
                   { 'Turkish',    0x041F },; 
                   { 'Persian',    0x0429 },;
                   { 'Azeri',      0x042C },;  
                   { 'Spanish',    0x040A } }  

   aLangNames := {}
   aLangCodes := {}

   
   AEVAL( aLanguages, { | a1 | AADD( aLangNames, a1[ 1 ] ), AADD( aLangCodes, a1[ 2 ] ) } )
   
   cCurr_KLName := GetKeyboardLayoutName()
   nCurr_KLNo := CTON( cCurr_KLName, 16 )

   nInsKLNo := ASCAN( aLangCodes, nCurr_KLNo )  // Installed KBL no
   
   DEFINE WINDOW Form_1;
      AT 0,0 ;
      WIDTH 600 HEIGHT 600 ;
      MAIN ;
      TITLE "System Virtual Keyboard";
      ON RELEASE IF (VirtualKeyboard.IsOpen == .T., VirtualKeyboard.RELEASE, NIL)
      
      ON KEY ESCAPE ACTION ThisWindow.Release
      
      @ 50, 20 EDITBOX editbox_1 WIDTH 550 HEIGHT 350 VALUE ""

      @ 20, 20 COMBOBOX cmbLangs WIDTH 550 HEIGHT 350 ITEMS aLangNames ON CHANGE ChangeUILang( This.Value ) VALUE nInsKLNo
      
      @ 410, 280 BUTTON Button_1 CAPTION "On/Off"  ACTION OnOff_VirtualKeyboard()
      @ 450, 280 BUTTON Button_2 CAPTION "Release" ACTION IF (VirtualKeyboard.IsOpen == .T., VirtualKeyboard.RELEASE, NIL)

   END WINDOW

   CENTER WINDOW Form_1
   ACTIVATE WINDOW Form_1

RETURN 


PROCEDURE OnOff_VirtualKeyboard

   IF VirtualKeyboard.IsOpen == .F.
      IF .NOT. FILE (VirtualKeyboard.FULLFILENAME)
         RETURN
      ENDIF
      VirtualKeyboard.OPEN   HIDE
      Inkey (1)   // Wait until the application is loaded
      VirtualKeyboard.TITLE := "HMG Virtual Keyboard"
      VirtualKeyboard.ROW := Form_1.ROW + Form_1.editbox_1.ROW + 50
      VirtualKeyboard.COL := Form_1.COL + Form_1.editbox_1.COL + 20
      VirtualKeyboard.SHOW
      RETURN
   ENDIF

   IF VirtualKeyboard.IsVisible == .F.
      VirtualKeyboard.SHOW
   ELSE
      VirtualKeyboard.HIDE
   ENDIF
RETURN




*-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.

PROCEDURE ChangeUILang( nSelected )
                    
   nCurr_KLNo := aLangCodes[ nSelected ]
   
   ActivateKeyboardLayout( nCurr_KLNo )
   
RETURN // ChangeUILang()


*-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.-._.



#pragma BEGINDUMP
#include "SET_COMPILE_HMG_UNICODE.ch"
#include "HMG_UNICODE.h"
#include <windows.h>
#include <tchar.h>
#include "hbapi.h"
#include "hbapiitm.h"


HB_FUNC ( GETKEYBOARDLAYOUTNAME )
{
   TCHAR cKLID [ KL_NAMELENGTH + 1 ];
   GetKeyboardLayoutName (cKLID);
   HMG_retc (cKLID);
}


HB_FUNC ( ACTIVATEKEYBOARDLAYOUT )
{
   HKL hkl     = (HKL)  HMG_parnl (1);
   UINT Flags  = (UINT) hb_parni  (2);
   HKL old_hkl = ActivateKeyboardLayout (hkl, Flags);
   HMG_retnl ((LONG_PTR) old_hkl );
}


//        GetProcessImageFileName ( [ nProcessID ] ) --> return cProcessImageFileName
HB_FUNC ( GETPROCESSIMAGEFILENAME )
{
   typedef DWORD (WINAPI *Func_GetProcessImageFileName) (HANDLE,LPTSTR,DWORD);
   static Func_GetProcessImageFileName pGetProcessImageFileName = NULL;
   if (pGetProcessImageFileName == NULL) 
   {   HMODULE hLib = LoadLibrary (_TEXT("Psapi.dll"));
       #ifdef UNICODE
          pGetProcessImageFileName = (Func_GetProcessImageFileName) GetProcAddress(hLib, "GetProcessImageFileNameW");
       #else
          pGetProcessImageFileName = (Func_GetProcessImageFileName) GetProcAddress(hLib, "GetProcessImageFileNameA");
       #endif
   }
   if (pGetProcessImageFileName == NULL)
       return;   // return NIL

   DWORD ProcessID = HB_ISNUM (1) ? (DWORD) hb_parnl(1) : GetCurrentProcessId();
   TCHAR cProcessFullName [ MAX_PATH ] = _TEXT ("");

   HANDLE hProcess = OpenProcess ( PROCESS_QUERY_INFORMATION, FALSE, ProcessID );
   if ( hProcess != NULL )
   {   pGetProcessImageFileName (hProcess, cProcessFullName, sizeof(cProcessFullName)/sizeof(TCHAR));
       CloseHandle (hProcess);
       HMG_retc (cProcessFullName);
   }
   return;   // return NIL
}


extern PHB_ITEM pArray;

BOOL CALLBACK EnumWindowsProc (HWND hWnd, LPARAM lParam)
{
   UNREFERENCED_PARAMETER (lParam);
   hb_arrayAddForward (pArray, hb_itemPutNLL (NULL, (LONG_PTR) hWnd));
   return TRUE;
}


HB_FUNC ( ENUMWINDOWS )
{
   pArray = hb_itemArrayNew ( 0 );
   EnumWindows ((WNDENUMPROC) EnumWindowsProc, (LPARAM) 0);
   hb_itemReturnRelease ( pArray );
   pArray = NULL;
}


//        GetWindowThreadProcessId (hWnd, @nThread, @nProcessID)
HB_FUNC ( GETWINDOWTHREADPROCESSID )
{
   HWND hWnd = (HWND) HMG_parnl (1);
   DWORD nThread, nProcessID;

   nThread = GetWindowThreadProcessId (hWnd, &nProcessID);

   if ( HB_ISBYREF(2) )
        hb_storni (nThread, 2); 
   if ( HB_ISBYREF(3) )
        hb_storni (nProcessID, 3); 
}


#pragma ENDDUMP
I know this is not right topic, bu some piece of code is from here.

I'm trying to use this code for start/restart application for serving barcodes for price chcecker.
I need close app first, but I don't know process ID, so I want to kill all processes with name of application.

My modified code:

Code: Select all



FUNCTION CloseAllProcesses
	param cProcessName
	
	STATIC hWnd := 0
	LOCAL nProcessID, aWin
	local p
	
	// cProcessName contains full path eg. c:\PROJEKTY\nquire\nquire.exe
	// so, we need to cut disk letter, eg C:\
	// because function GetProcessImageFileName(nProcessID)
	// returns something like \Device\HarddiskVolume2\PROJEKTY\nquire\nquire.exe
	
	
	p := max(1,at("\",cProcessName))
	cProcessName := substr(cProcessName,p)
	cProcessName := upper(cProcessName)
		
	IF IsValidWindowHandle (hWnd) == .F.
      hWnd := 0
      aWin := EnumWindows ()
	  debugmsg(cProcessName)
      FOR i = 1 TO HMG_LEN (aWin)
         GetWindowThreadProcessId (aWin[i], NIL, @nProcessID)
         IF HMG_UPPER (cProcessName) $ HMG_UPPER (GetProcessImageFileName(nProcessID))
           SendMessage (aWin[i], WM_CLOSE, 0, 0)
         ENDIF
      NEXT
   ENDIF
RETURN NIL
User avatar
srvet_claudio
Posts: 2193
Joined: Thu Feb 25, 2010 8:43 pm
Location: Uruguay
Contact:

Re: RICHEDITBOX

Post by srvet_claudio »

Hi Marek,
try with this:

Code: Select all

FUNCTION CloseAllProcesses ( cProcessName )
   LOCAL nProcessID, aWin, p
   
   // cProcessName contains full path eg. c:\PROJEKTY\nquire\nquire.exe
   // so, we need to cut disk letter, eg C:\
   // because function GetProcessImageFileName(nProcessID)
   // returns something like \Device\HarddiskVolume2\PROJEKTY\nquire\nquire.exe
   
   
   p := max(1, HB_UAT("\",cProcessName))
   cProcessName := HB_USUBSTR (cProcessName,p)
   cProcessName := HMG_UPPER  (cProcessName)
   aWin := EnumWindows ()
   FOR i = 1 TO HMG_LEN (aWin)
       GetWindowThreadProcessId (aWin[i], NIL, @nProcessID)
       IF HMG_UPPER (cProcessName) $ HMG_UPPER (GetProcessImageFileName(nProcessID))
          SendMessage (aWin[i], WM_CLOSE, 0, 0)
       ENDIF
   NEXT
RETURN NIL
Best regards.
Dr. Claudio Soto
(from Uruguay)
http://srvet.blogspot.com
Post Reply