Re: NEUS PROBLEM - Zweites Fenster gibt den Fokus nicht mehr
Verfasst: 13.12.2015 19:27
Also mein erstes Problem habe ich erfolgreich lösen können und funktioniert wie es soll. Danke noch mal an dieser Stelle.
Jetzt möchte ich jedoch ein weiteres Fenster mit (WebGadget) per Button öffnen und habe wieder das Fokus Problem.
Bitte schlagt mich nicht ich bin kein PROFI.
Ich Habe mein 2. Fenster mit sämtlichen Code in einer Prozedur. Diese wird erst aufgerufen wenn ich den Button im Hauptfenster klicke.
Jetzt ist mein Problem, das ich nicht beliebig zwischen den Fenstern mit der Maus klicken kann ( der Fokus also dann zum jeweiligen Fenster übergeht). Das geöffnete Fenster gibt den Fokus nicht zurück
Im Webgadget möchte ich Text markieren und diesen dann im Window_0 in das EditorGadget einfügen. Das funktioniert NICHT solang das 2. Fenster öffen ist.
Funktioniert erst, wenn ich das WebGadget Fenster mit "close" schließe. Aber es soll gehen indem es offen bleibt.
Und das Problem was dann besteht ist:
Es wird nun nicht mehr der normale Text ins EditorGadget eingefügt, sondern beim Kopieren des Textes von einer Webseite wird der komplette Quelltext mit kopiert? Hu? warum das? Ich möchte nur den Text kopieren und einfügen, wobei beide Fenster geöffnet bleiben können.
Hier eine Abgespeckte Test Version:
und hier mal ein Bild was beim Einfügen ins EditorGadget passiert:

eigentlich soll nur das Wort "Deutschland" eingefügt werden.
Danke für eine Hilfe
Jetzt möchte ich jedoch ein weiteres Fenster mit (WebGadget) per Button öffnen und habe wieder das Fokus Problem.
Bitte schlagt mich nicht ich bin kein PROFI.
Ich Habe mein 2. Fenster mit sämtlichen Code in einer Prozedur. Diese wird erst aufgerufen wenn ich den Button im Hauptfenster klicke.
Jetzt ist mein Problem, das ich nicht beliebig zwischen den Fenstern mit der Maus klicken kann ( der Fokus also dann zum jeweiligen Fenster übergeht). Das geöffnete Fenster gibt den Fokus nicht zurück

Im Webgadget möchte ich Text markieren und diesen dann im Window_0 in das EditorGadget einfügen. Das funktioniert NICHT solang das 2. Fenster öffen ist.
Funktioniert erst, wenn ich das WebGadget Fenster mit "close" schließe. Aber es soll gehen indem es offen bleibt.
Und das Problem was dann besteht ist:
Es wird nun nicht mehr der normale Text ins EditorGadget eingefügt, sondern beim Kopieren des Textes von einer Webseite wird der komplette Quelltext mit kopiert? Hu? warum das? Ich möchte nur den Text kopieren und einfügen, wobei beide Fenster geöffnet bleiben können.
Hier eine Abgespeckte Test Version:
Code: Alles auswählen
;
; Test Code Windows
; PureBasic v 5.3
;
Enumeration
;Main Window
#Window_0
;PopUp Window aus Prozedur
#MainForm
; Main Gadgets
#Btn_Exit
#Editor_Gadget
;WebGadget
#WebGadget
#Btn_CloseWebGadget
#Btn_OpenBrowserGadget
#Btn_Reload
#Btn_Nav_Back
#Btn_Nav_Frwd
EndEnumeration
Global Url.s="http://www.google.de/"
;{
Procedure RegConvertRegKeyToTopKeyAndKeyName(Key.s)
Shared topKey,KeyName.s
temp.s=StringField(Key,1,"\")
temp=UCase(temp)
Select temp
Case "HKEY_CLASSES_ROOT"
topKey=#HKEY_CLASSES_ROOT
Case "HKEY_CURRENT_USER"
topKey=#HKEY_CURRENT_USER
Case "HKEY_LOCAL_MACHINE"
topKey=#HKEY_LOCAL_MACHINE
Case "HKEY_USERS"
topKey=#HKEY_USERS
Case "HKEY_CURRENT_CONFIG"
topKey=#HKEY_CURRENT_CONFIG
EndSelect
PositionSlash=FindString(Key,"\",1)
KeyName.s=Right(Key,(Len(Key)-PositionSlash))
EndProcedure
ProcedureDLL RegSetValue(Key.s, ValueName.s, Value.s, Type, ComputerName.s) ; Sets a Value
;Type can be #REG_SZ / #REG_DWORD / #REG_BINARY / #REG_EXPAND_SZ
;For REG_BINARY type use Hexa value as String
;Returns 1 if successful or 0 if it fails
Shared RegWow64.l,RegEx,topKey,KeyName.s
RegConvertRegKeyToTopKeyAndKeyName(Key)
If ComputerName = "."
If RegEx
GetHandle = RegOpenKeyEx_(topKey,KeyName,0,#KEY_ALL_ACCESS|RegWow64,@hKey)
Else
GetHandle = RegOpenKey_(topKey,KeyName,@hKey)
EndIf
Else
lReturnCode = RegConnectRegistry_(ComputerName,topKey,@lhRemoteRegistry)
If RegEx
GetHandle = RegOpenKeyEx_(lhRemoteRegistry,KeyName,0,#KEY_ALL_ACCESS|RegWow64,@hKey)
Else
GetHandle = RegOpenKey_(lhRemoteRegistry,KeyName,@hKey)
EndIf
EndIf
If GetHandle = #ERROR_SUCCESS
lpcbData = 255
lpData.s = Space(255)
Select Type
Case #REG_EXPAND_SZ
GetHandle = RegSetValueEx_(hKey, ValueName, 0, #REG_EXPAND_SZ, @Value, Len(Value) + 1)
Case #REG_SZ
GetHandle = RegSetValueEx_(hKey, ValueName, 0, #REG_SZ, @Value, Len(Value) + 1)
Case #REG_DWORD
lValue = Val(Value)
GetHandle = RegSetValueEx_(hKey, ValueName, 0, #REG_DWORD, @lValue, 4)
Case #REG_BINARY
LenBuffer=Len(Value)/2
*RegBuffer=AllocateMemory(LenBuffer)
For n=0 To LenBuffer-1
OctetHexa.s=Mid(Value,(n*2)+1,2)
Octet=Val("$"+OctetHexa)
PokeB(*RegBuffer+n,Octet)
Next
GetHandle= RegSetValueEx_(hKey,ValueName,0,#REG_BINARY,*RegBuffer,LenBuffer)
FreeMemory(*RegBuffer)
EndSelect
RegCloseKey_(hKey)
ergebnis = 1
ProcedureReturn ergebnis
Else
RegCloseKey_(hKey)
ergebnis = 0
ProcedureReturn ergebnis
EndIf
EndProcedure
ProcedureDLL RegCreateKey(Key.s, ComputerName.s)
;It create subkey if KeyPath don't exist
;Returns 1 if successful or 0 if it fails
Shared RegWow64.l,RegEx,topKey,KeyName.s
RegConvertRegKeyToTopKeyAndKeyName(Key)
lpSecurityAttributes.SECURITY_ATTRIBUTEs
If ComputerName = "."
If RegEx
GetHandle = RegCreateKeyEx_(topKey,KeyName,0,0,#REG_OPTION_NON_VOLATILE,#KEY_ALL_ACCESS|RegWow64,@lpSecurityAttributes,@hNewKey,@GetHandle)
Else
GetHandle = RegCreateKey_(topKey,KeyName,@hNewKey)
EndIf
Else
lReturnCode = RegConnectRegistry_(ComputerName, topKey, @lhRemoteRegistry)
If RegEx
GetHandle = RegCreateKeyEx_(lhRemoteRegistry,KeyName,0,0,#REG_OPTION_NON_VOLATILE,#KEY_ALL_ACCESS|RegWow64,@lpSecurityAttributes,@hNewKey,@GetHandle)
Else
GetHandle = RegCreateKey_(lhRemoteRegistry,KeyName,@hNewKey)
EndIf
EndIf
If GetHandle = #ERROR_SUCCESS
GetHandle = RegCloseKey_(hNewKey)
CreateKey = #True
Else
CreateKey = #False
EndIf
ProcedureReturn CreateKey
EndProcedure
ProcedureDLL RegCreateKeyValue(Key.s,ValueName.s,Value.s,Type,ComputerName.s) ; Creates a Key and a Value in a Single Command
;Type can be #REG_SZ or #REG_DWORD
;Returns 1 if successful or 0 if it fails
RegCreateKey(Key,ComputerName)
ProcedureReturn RegSetValue(Key,ValueName,Value,Type,ComputerName)
EndProcedure
Procedure MainFormShow()
OpenWindow(#MainForm, 0, 0, 1024, 768,"WebGadget HTML5 compatible",#PB_Window_ScreenCentered|#PB_Window_BorderLess)
SetWindowColor(#MainForm, $8C6830)
WebGadget(#WebGadget, 0, 30, 1024, 768, Url)
;- Btn Back
ButtonGadget(#Btn_Nav_Back, 0, 5, 30, 20, "<",#BS_FLAT)
;- Btn Forward
ButtonGadget(#Btn_Nav_Frwd, 30, 5, 30, 20, ">",#BS_FLAT)
;- Btn Reload
ButtonGadget(#Btn_Reload, 60, 5, 60, 20, "refresh",#BS_FLAT)
;- Btn Close WEbGadget Window
ButtonGadget(#Btn_CloseWebGadget, 948, 5, 60, 20, "close",#BS_FLAT)
myBrowser.IWebBrowser2 = GetWindowLong_(GadgetID(#WebGadget), #GWL_USERDATA)
myBrowser\put_Silent(#True)
myBrowser\put_Left(0)
Repeat
Event = WaitWindowEvent()
EventGadget = EventGadget()
EventType = EventType()
Select EventGadget()
Case #Btn_CloseWebGadget
If EventGadget = #Btn_CloseWebGadget
CloseWindow(#MainForm)
UpdateWindow_(WindowID(#Window_0))
EndIf
Break
;Web Navigation
Case #Btn_Nav_Back
SetGadgetState(#WebGadget, #PB_Web_Back)
Case #Btn_Nav_Frwd
SetGadgetState(#WebGadget, #PB_Web_Forward)
Case #Btn_Reload
SetGadgetState(#WebGadget, #PB_Web_Refresh)
EndSelect
;FENSTER MIT MAUS VERSCHIEBEN
Select event
Case #WM_LBUTTONDOWN
; Ära für Maus festlegen wo Fenster gepickt werden kann
If WindowMouseX(#MainForm) >= 0 And WindowMouseX(#MainForm) <= 1024 And WindowMouseY(#MainForm) >= 0 And WindowMouseY(#MainForm) <= 30
SendMessage_(WindowID(#MainForm), #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
EndIf
EndSelect
Until WaitWindowEvent = #PB_Event_CloseWindow
EndProcedure
Procedure Start()
RegCreateKeyValue("HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", GetFilePart(ProgramFilename()), "11001", #REG_DWORD, ".")
MainFormShow()
EndProcedure
;}
; Kontextmenü für Editorgadget
Procedure WinCallback(hWnd, uMsg, wParam, lParam)
Protected result = #PB_ProcessPureBasicEvents
Select uMsg
Case #WM_CONTEXTMENU
If GadgetID(#Editor_Gadget) = wParam
DisplayPopupMenu(#Editor_Gadget, WindowID(#Window_0))
EndIf
EndSelect
ProcedureReturn result
EndProcedure
OpenWindow(#Window_0, 298, 50, 710, 535, "",#PB_Window_BorderLess| #PB_Window_ScreenCentered)
SetWindowColor(#Window_0, RGB(219, 219, 219))
ButtonGadget(#Btn_Exit,670,1,30,20,"x", 0)
;Button WebGadget
ButtonGadget(#Btn_OpenBrowserGadget, 300, 50, 100, 50, "open Browser")
; Eingabefeld
EditorGadget(#Editor_Gadget, 43, 150, 623, 250,#PB_Editor_WordWrap)
Repeat
Event = WaitWindowEvent()
EventGadget = EventGadget()
EventType = EventType()
;- Kontext Menü für EditorGadget deklarieren
If CreatePopupMenu(#Editor_Gadget)
MenuItem(1, "einfügen")
EndIf
SetWindowCallback(@WinCallback())
; Kontextmenü auf Editorgadget freischalten
Select event
Case #PB_Event_Menu
Select EventMenu()
Case 1
SetGadgetText(#Editor_Gadget,GetClipboardText())
EndSelect
EndSelect
;- Button Funktionen
If Event = #PB_Event_Gadget
Select EventGadget()
;- BTN WebGadget
Case #Btn_OpenBrowserGadget
Start()
; Kehrt zur vorherigen Gadgetliste zurück
UseGadgetList(OldGadgetList)
;- BTN EXIT
Case #Btn_Exit
End
EndSelect
EndIf
;FENSTER MIT MAUS VERSCHIEBEN
SendMessage_(WindowID(#Window_0), #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
Until Event = #PB_Event_CloseWindow
Return
und hier mal ein Bild was beim Einfügen ins EditorGadget passiert:

eigentlich soll nur das Wort "Deutschland" eingefügt werden.
Danke für eine Hilfe