Re: Umlaute ersetzen, geht das schneller ?
Verfasst: 25.03.2019 13:10
Das geht aber doch anders...
Nur beim einfügen aus der Zwischenablage muss der Text einmal übersetzt werden.
Sonst ändert man die Zeichen schon beim schreiben.
Nur beim einfügen aus der Zwischenablage muss der Text einmal übersetzt werden.
Sonst ändert man die Zeichen schon beim schreiben.
Code: Alles auswählen
;-TOP
; Comment : Module SetGadgetCallback (Windows Only)
; Author : mk-soft
; Version : v0.02
; Created : 10.06.2018
; Updated :
;
; Syntax Callback:
; Procedure GadgetCB(hWnd,uMsg,wParam,lParam)
; Select uMsg
; ;TODO
; EndSelect
; ; Call previous gadget procedure
; ProcedureReturn CallGadgetProc(hWnd,uMsg,wParam,lParam)
; EndProcedure
;
; *****************************************************************************
DeclareModule GadgetCallback
Declare SetGadgetCallback(Gadget, *lpNewFunc)
Declare CallGadgetProc(hWnd, uMsg, wParam, lParam)
EndDeclareModule
Module GadgetCallback
EnableExplicit
Global NewMap *lpPrevFunc()
Global MutexCB = CreateMutex()
; ---------------------------------------------------------------------------
Procedure SetGadgetCallback(Gadget, *lpNewFunc)
Protected GadgetID, GadgetKey.s
GadgetID = GadgetID(Gadget)
GadgetKey = Hex(GadgetID)
; Remove exists Callback
If FindMapElement(*lpPrevFunc(), GadgetKey)
SetWindowLongPtr_(GadgetID, #GWL_WNDPROC, *lpPrevFunc())
DeleteMapElement(*lpPrevFunc())
EndIf
If *lpNewFunc
If AddMapElement(*lpPrevFunc(), GadgetKey)
*lpPrevFunc() = SetWindowLongPtr_(GadgetID, #GWL_WNDPROC, *lpNewFunc)
ProcedureReturn *lpPrevFunc()
EndIf
EndIf
ProcedureReturn 0
EndProcedure
; ---------------------------------------------------------------------------
Procedure CallGadgetProc(hWnd, uMsg, wParam, lParam)
Protected result
LockMutex(MutexCB)
If FindMapElement(*lpPrevFunc(), Hex(hWnd))
result = CallWindowProc_(*lpPrevFunc(), hWnd, uMsg, wParam, lParam)
EndIf
UnlockMutex(MutexCB)
ProcedureReturn result
EndProcedure
EndModule
; *****************************************************************************
; Example
CompilerIf #PB_Compiler_IsMainFile
UseModule GadgetCallback
Procedure GadgetCB(hWnd,uMsg,wParam,lParam)
Select uMsg
Case #WM_CHAR
Select wParam
Case 'ä'
SendMessage_(hwnd, #WM_CHAR, 'a', lParam)
wParam = 'e'
Case 'Ä'
SendMessage_(hwnd, #WM_CHAR, 'A', lParam)
wParam = 'e'
Case 'ö'
SendMessage_(hwnd, #WM_CHAR, 'o', lParam)
wParam = 'e'
Case 'Ö'
SendMessage_(hwnd, #WM_CHAR, 'O', lParam)
wParam = 'e'
Case 'ü'
SendMessage_(hwnd, #WM_CHAR, 'u', lParam)
wParam = 'e'
Case 'Ü'
SendMessage_(hwnd, #WM_CHAR, 'U', lParam)
wParam = 'e'
Case 'ß'
SendMessage_(hwnd, #WM_CHAR, 's', lParam)
wParam = 's'
Case #SYN
Debug "Syn: Text wurde eingefügt"
;TODO
EndSelect
EndSelect
ProcedureReturn CallGadgetProc(hWnd,uMsg,wParam,lParam)
EndProcedure
If OpenWindow(0,0,0,800,600,"Example SetGadgetCallback",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
EditorGadget(1,0,0,800, 600)
SetGadgetCallback(1, @GadgetCB())
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
CompilerEndIf