mit folgendem Code möchte ich den Standart-MessageRequester meinen Wünschen entsprechend abändern.
Mein Ziel ist es:
- Titel, Text und Buttons mit eigener Beschriftung
- Buttons mit eigener Funktion belegen
- Titel, Text und Buttons des Standart-MessageRequester life upzudaten, also während die Messagebox noch aktiv zu sehen ist
Punkt eins und zwei funktionieren. Punkt drei aber will nicht so recht funktionieren. Den Hook einfach neu zu setzen reicht da scheinbar nicht aus. Nicht alle Elemente erhalten den neuen Text oder werden nicht geupdatet. Zudem passiert das nicht life sonder stets immer nur nach der Neuaktivierung des MessageRequester.
Hier mal mein Code. Vielleicht hat jemand nen Tipp:
Code: Alles auswählen
#SC_CONTEXTHELP=$F180
#IDOK = 1
#IDCANCEL = 2
#IDABORT = 3
#IDRETRY = 4
#IDIGNORE = 5
#IDYES = 6
#IDNO = 7
#IDHELP=9
#IDPROMPT = $FFFF
#MB_HELP=$00004000
Global hHook
Global mbtitle$, mbmsg$, mbopt1$, mbopt2$, mbopt3$, MyMessageBoxHandle
#StringSpace = 80
Procedure MsgBoxHookProc (uMsg, wParam, lParam)
If uMsg = #HCBT_ACTIVATE
SetWindowText_ (wParam, mbtitle$)
SetDlgItemText_ (wParam, #IDOK, mbopt1$)
SetDlgItemText_ (wParam, #IDHELP, mbopt2$)
SetDlgItemText_ (wParam, #IDPROMPT, mbmsg$)
UnhookWindowsHookEx_ (hHook)
EndIf
ProcedureReturn #False
EndProcedure
Procedure WNDCB(WindowID, Message, wParam, lParam)
Result = #PB_ProcessPureBasicEvents
Select Message
Case #WM_HELP
DisplayPopupMenu(0,WindowID(0))
Case #WM_SYSCOMMAND
Select wParam
Case #SC_CONTEXTHELP
SendMessage_(WindowID,#WM_HELP,0,0)
Result= 0
EndSelect
Case #WM_COMMAND
If wParam=1
Debug "4"
ElseIf wParam=2
Debug "here i want to change the text of the message requester!"
EndIf
EndSelect
ProcedureReturn Result
EndProcedure
Procedure MessageBoxH (parentWindow, title$, message$, button1$, button2$)
mbtitle$ = title$
mbmsg$ = message$
mbopt1$ = button1$
mbopt2$ = button2$
hInstance = GetModuleHandle_ (0)
hThreadId = GetCurrentThreadId_ ()
hHook = SetWindowsHookEx_ (#WH_CBT,@MsgBoxHookProc(),hInstance,hThreadId)
ProcedureReturn MessageBox_ (parentWindow,Space(#StringSpace),Space(#StringSpace),#MB_HELP|#MB_ICONINFORMATION)
EndProcedure
hwnd=OpenWindow(0, 100, 100, 420, 240, "", #PB_Window_SystemMenu)
If hwnd
SetWindowCallback(@WNDCB())
If CreatePopupMenu(0)
MenuItem(1,"Only a test")
MenuBar()
MenuItem(2,"Change text")
EndIf
MyMessageBoxHandle=MessageBoxH(WindowID(0),"My title","Text","Oookeey","My Ops")
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_CloseWindow
Quit = 1
ElseIf EventID=#PB_Event_Menu
Debug "l"
If EventMenu()=1
Debug "Test"
ElseIf EventMenu()=2
Debug "Do something"
EndIf
EndIf
Until Quit = 1
EndIf
End