[ ERLEDIGT ] 2. Fenster gibt Fokus nicht zurück

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: NEUS PROBLEM - Zweites Fenster gibt den Fokus nicht mehr

Beitrag von udg »

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 :freak:

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:
Bild

eigentlich soll nur das Wort "Deutschland" eingefügt werden.

Danke für eine Hilfe
Zuletzt geändert von udg am 13.12.2015 22:18, insgesamt 1-mal geändert.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Re: NEUES PROBLEM - 2. Fenster gibt den Fokus nicht mehr zur

Beitrag von Derren »

Hast du jetzt ein Fokus-Problem, oder ein "Clipboard-Problem"?

GetGadgetText() auf ein WebGadget angewendet gibt den Quelltext zurück, nicht den Text der Website.
Signatur und so
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: NEUES PROBLEM - 2. Fenster gibt den Fokus nicht mehr zur

Beitrag von udg »

Ja, ich habe ein "fokus Problem", jedoch zum 2ten Problem, GetGadgetText wende ich nicht an.

Im WebGadget markiere ich ganz normal den Text, rechtklick = windows Kontextmenü=kopieren und dann wenn ich das 2. Fenster mit CLOSE schließe (was so eigtl. nicht sein soll) und den Inhalt mit

Code: Alles auswählen

SendMessage_(GadgetID(#Editor_Gadget), #WM_PASTE, 0, 0)
einfüge, haut es den Quelltext mit rein.



Grüße

EDIT:

mit

Code: Alles auswählen

SetGadgetText(#Editor_Gadget,GetClipboardText())
funktioniert es nun :) :allright:

Jetzt habe ich nur noch das leidige Problem mit dem Fokus.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
matbal
Beiträge: 261
Registriert: 30.03.2011 20:53

Re: NEUES PROBLEM - 2. Fenster gibt den Fokus nicht mehr zur

Beitrag von matbal »

Problem ist, du benutzt zwei verschiedene EventLoops. Sobald du das zweite Fenster geöffnet hast, hängt das Programm im zweiten Loop fest. Alle Events, die dann an das erste Fenster gerichtet sind, werden hier nicht verarbeitet.

Dir wurde ja schon empfohlen, nur ein EventLoop für alle Fenster zu benutzen...
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: NEUES PROBLEM - 2. Fenster gibt den Fokus nicht mehr zur

Beitrag von udg »

matbal hat geschrieben:Problem ist, du benutzt zwei verschiedene EventLoops. Sobald du das zweite Fenster geöffnet hast, hängt das Programm im zweiten Loop fest. Alle Events, die dann an das erste Fenster gerichtet sind, werden hier nicht verarbeitet.

Dir wurde ja schon empfohlen, nur ein EventLoop für alle Fenster zu benutzen...

Ich habe versucht alle Events aus der Prozedur in meine andere EventSchleife zu setzen. Leider funktionieren dann die Buttons und Funktionen nicht mehr und habe keine Ahnung warum :(

Da kommt nur noch Mist bei raus. Weiterhin kann ich nun nicht mehr die Rahmenlosen Fenster mit der Maus gezielt verschieben.

EDIT:
So geht es jetzt. Nun brauche ich nur noch eine vernünftige Möglichkeit die beiden Rahmenlosen Fenster unabhängig von einander mit der Maus verschieben zu können.

Code: Alles auswählen

SendMessage_(WindowID(#Window_0), #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
hilft hier leider nicht so wie es sollte.
Zuletzt geändert von udg am 16.12.2015 02:14, insgesamt 1-mal geändert.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
matbal
Beiträge: 261
Registriert: 30.03.2011 20:53

Re: NEUES PROBLEM - 2. Fenster gibt den Fokus nicht mehr zur

Beitrag von matbal »

Eigentlich müßtest du nur ermitteln, welches Window das Event #WM_LBUTTONDOWN ausgelöst hat. PureBasic unterstützt im Eventloop aber nur #PB_Event_...

#WM_LBUTTONDOWN ist aber WindowsAPI und gehört ins WindowCallback, was du ja auch schon verwendest

Code: Alles auswählen

; 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
         
      Case #WM_LBUTTONDOWN
         
          ;FENSTER MIT MAUS VERSCHIEBEN  
         If IsWindow(#MainForm) And hWnd = WindowID(#MainForm) 
            ; Ä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_(hWnd, #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
            EndIf
            
         ElseIf hWnd = WindowID(#Window_0)
            SendMessage_(hWnd, #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
            
         EndIf
   EndSelect

   ProcedureReturn result
EndProcedure
Edit: Ich weiß nicht, ob du wirklich den Fensterbereich, wo sich die Fenster verschieben lassen, einschränken willst. In deinem Code-Schnipsel macht es zumindest keinen Unterschied. Da der untere Teil des Fensters vom WebGadget überdeckt ist, kannst du es nur oben anfassen.

Ohne diese Einschränkung wird es etwas kompakter.

Code: Alles auswählen

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
         
      Case #WM_LBUTTONDOWN
         SendMessage_(hWnd, #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
         
   EndSelect
   
   ProcedureReturn result
EndProcedure
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: NEUES PROBLEM - 2. Fenster gibt den Fokus nicht mehr zur

Beitrag von udg »

@matbal
Großes DANKE. Ich habe deinen Beitrag noch gar nicht gelesen und eine eigene Lösung gefunden. Ich hoffe sie ist ebenfalls gut. Unabhängig davon, werde ich Deinen Code auch noch mal genau ansehen :)

Nun zu meinem Final Code ( vielleicht kann das mal jemand gebrauchen :) die Idee / Inspiration oder usw :
Angepasst...

done and working
URL wird jetzt auch automatisch angezeigt

Code: Alles auswählen

;
; Windows 7 ( win8 und win 10 ? )
; PureBasic v 5.3
; 
; WINDOWS ONLY
;
; öffnet Rahmenlose Fenster. Fenster 1 mit EditorGadget
; Fenster 2 WebGadget
;
; beide Fenster können nun unabhängig voneinander bewegt
; werden. kopieren von Text im WebGadget und einfügen
; im EditorGadget nun möglich
;
; STRG+C und STRG+V hinzugefügt
; aktuelle URL wird beim Browsen angezeigt
;
; Formatierung des EditorGadget beim einfügen mit STRG+V bleibt nun
; erhalten. Danke an Derren (http://www.purebasic.fr/german)
;
; Ich bin mir nicht 100% sicher ob alles wirklich Bug frei
; läuft. Danke für Verbesserungen. Bis jetzt war kein Absturz
; zu verzeichnen.
;
; Das WebGadget unterstützt HTML 5
;
; Line: 346 --> WebGadget UPDATE auf IE 11
; RegCreateKeyValue("HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", GetFilePart(ProgramFilename()), "11001", #REG_DWORD, ".")
;
Global WebObject.IWebBrowser2

;{ Keyboard Shortcut Enumerations
Enumeration 1
  #OLECMDID_OPEN
  #OLECMDID_NEW
  #OLECMDID_SAVE
  #OLECMDID_SAVEAS
  #OLECMDID_SAVECOPYAS
  #OLECMDID_PRINT
  #OLECMDID_PRINTPREVIEW
  #OLECMDID_PAGESETUP
  #OLECMDID_SPELL
  #OLECMDID_PROPERTIES
  #OLECMDID_CUT
  #OLECMDID_COPY
  #OLECMDID_PASTE
  #OLECMDID_PASTESPECIAL
  #OLECMDID_UNDO
  #OLECMDID_REDO
  #OLECMDID_SELECTALL
  #OLECMDID_CLEARSELECTION
  #OLECMDID_ZOOM
  #OLECMDID_GETZOOMRANGE
  #OLECMDID_UPDATECOMMANDS
  #OLECMDID_REFRESH
  #OLECMDID_STOP
  #OLECMDID_HIDETOOLBARS
  #OLECMDID_SETPROGRESSMAX
  #OLECMDID_SETPROGRESSPOS
  #OLECMDID_SETPROGRESSTEXT
  #OLECMDID_SETTITLE
  #OLECMDID_SETDOWNLOADSTATE
  #OLECMDID_STOPDOWNLOAD
EndEnumeration

Enumeration 0
  #OLECMDEXECOPT_DODEFAULT
  #OLECMDEXECOPT_PROMPTUSER
  #OLECMDEXECOPT_DONTPROMPTUSER
  #OLECMDEXECOPT_SHOWHELP
EndEnumeration
;}
Enumeration
  ;Main Window
    #Window_0
    
  ;PopUp Window aus Prozedur  
    #MainForm

  ; Main Gadgets 
    #Btn_Exit
    #Image_Exit_Normal
    #Image_Exit_Red
    #Editor_Gadget
    #MausArea
    #Font_MausArea
    #Btn_Save
    #Font_Btn_Save
    #Font_Editor_Gadget
    #Btn_OpenBrowserGadget
    
    ;WebGadget
      #WebGadget
      #Btn_CloseWebGadget
      #Font_Btn_CloseWebGadget
      #Btn_Reload
      #Font_Btn_Reload
      #Btn_Nav_Back
      #Font_Btn_Nav_Back
      #Btn_Nav_Frwd
      #Font_Btn_Nav_Frwd
      #Show_Current_Url
      #Font_Current_Url
      #Btn_Start_Browsing
      #Font_Start_Browsing
      #Separater
EndEnumeration

;Included Images
DataSection
  Image_Exit_Normal:
  ; exit_normal.png
  ;{ Size = 328 bytes
  Data.l $474E5089,$0A1A0A0D,$0D000000,$52444849,$22000000,$17000000,$00000208,$3A959601,$0000001D,$59487009,$0E000073,$0E0000C3
  Data.l $6FC701C3,$000064A8,$4449FA00,$9C785441,$FFFFF963,$6012033F,$19B75081,$F9915418,$647970AA,$74582CF5,$06865162,$1DF61450
  Data.l $C0722860,$812C8721,$AC164CCF,$071228A2,$BD9F12FA,$9CEA8864,$50E12E8F,$7E589554,$519B0A3A,$E13BF3AA,$0763C6DE,$76129F1E
  Data.l $2CF41517,$ED344F2B,$4D8AAF9C,$781EA70A,$07A09040,$CF4B200F,$5D1B8740,$2F9624F4,$5A69DF9B,$33A18CBE,$610C4B0A,$00D403D7
  Data.l $3BF3924C,$62CAB0A3,$BCACB3D7,$EEA7BE6D,$4A8CA46D,$11240F58,$5380D560,$A8307E0F,$DE9190F5,$0E86B1C8,$6B708C76,$76F96580
  Data.l $17CF2A89,$E2190B6D,$11D5A3E7,$C1C6B454,$1B7B75D7,$D7310ED0,$20EC122A,$D9601ACD,$7E3C5BBD,$46507CFE,$912B7A04,$60910F14
  Data.l $C3A7300D,$A287130B,$40DAC4F9,$809435AA,$000D65E1,$754D2247,$528F5DE3,$00000000,$444E4549,$826042AE
  Image_Exit_Normal_End:
  ;}
  Image_Exit_Red:
  ; exit_red.png
  ;{ Size = 326 bytes
  Data.l $474E5089,$0A1A0A0D,$0D000000,$52444849,$22000000,$17000000,$00000208,$3A959601,$0000001D,$59487009,$0E000073,$0E0000C3
  Data.l $6FC701C3,$000064A8,$4449F800,$9C785441,$AEC33963,$580480CE,$03371420,$FE6457C3,$B23CB857,$3A2C167A,$034328B1,$92550A28
  Data.l $C5CCEE19,$812C8721,$AC164CCF,$221228A2,$28706F1B,$D1D13C33,$E3789740,$C57C691F,$A33609E3,$39D59FCE,$781D844F,$5DD84A7C
  Data.l $7323D054,$1D7BC6E5,$A4D8AF8D,$0781EA70,$F07A0904,$0CF4B200,$45D1B874,$CA95F18F,$B43B3AB3,$96AE187B,$C594C79C,$01A807AE
  Data.l $EACF2498,$8F6093B4,$67E595CC,$23710FFB,$7AC25465,$AB008920,$F07A9C06,$87AD4183,$8E46F48C,$63B07435,$2C035B84,$476FC5CB
  Data.l $2E5D54BE,$D67750CF,$ACAD157F,$50BED379,$8ED000FC,$481D2F87,$6B3483B0,$F8B76580,$1CB3BADD,$F4088CA0,$1E293196,$601AC122
  Data.l $70D7874E,$DE35FC6F,$9073AF10,$6EC18126,$B735000D,$24470847,$00009783,$45490000,$42AE444E
  Data.b $60,$82
  Image_Exit_Red_End:
  ;}
EndDataSection

;Image Plugins
  UsePNGImageDecoder()
  
Global Url.s="http://store.steampowered.com"
;{
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
;- Read current URL
Procedure NavigationCallback(Gadget, NewUrl.s)
   
  If NewUrl <> Url
    SetGadgetText(#Show_Current_Url, NewUrl)
    Url = NewUrl 
  EndIf
 
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

Procedure MainFormShow()
  OpenWindow(#MainForm, 0, 0, 1024, 768,"WebGadget HTML5 compatible",#PB_Window_ScreenCentered|#PB_Window_BorderLess)
  SetWindowColor(#MainForm, RGB(48, 103, 140))
  
  StringGadget(#Show_Current_Url, 130, 5, 500, 20, Url, #PB_String_BorderLess)
    SetGadgetColor(#Show_Current_Url, #PB_Gadget_FrontColor, RGB(243, 225, 208));TEXT FARBE
    SetGadgetColor(#Show_Current_Url, #PB_Gadget_BackColor, RGB(31, 77, 106)) ;TEXT Hintergrund FARBE
    SetGadgetFont(#Show_Current_Url, LoadFont(#Font_Current_Url, "Lucida", 10, #PB_Font_HighQuality)) ; Button Font
    
   WebGadget(#WebGadget, 0, 30, 1024, 768, url)   

  ;- Keyboard Shortcuts hinzufügen
     WebObject.IWebBrowser2 = GetWindowLongPtr_(GadgetID(#WebGadget),#GWLP_USERDATA)
     AddKeyboardShortcut(#MainForm,#PB_Shortcut_Control|#PB_Shortcut_X,Asc("x"))
     AddKeyboardShortcut(#MainForm,#PB_Shortcut_Control|#PB_Shortcut_C,Asc("c"))
     AddKeyboardShortcut(#MainForm,#PB_Shortcut_Control|#PB_Shortcut_V,Asc("v"))
     AddKeyboardShortcut(#MainForm,#PB_Shortcut_Control|#PB_Shortcut_A,Asc("a"))
     AddKeyboardShortcut(#MainForm,#PB_Shortcut_Control|#PB_Shortcut_Z,Asc("z"))
     AddKeyboardShortcut(#MainForm,#PB_Shortcut_Control|#PB_Shortcut_Y,Asc("y"))
     AddKeyboardShortcut(#MainForm,#PB_Shortcut_Control|#PB_Shortcut_Shift|#PB_Shortcut_Z,Asc("y"))
     AddKeyboardShortcut(#MainForm, #PB_Shortcut_Return,Asc("Return"))
     SetGadgetAttribute(#WebGadget, #PB_Web_NavigationCallback, @NavigationCallback())
     
  ;- Btn Back
     TextGadget(#Btn_Nav_Back, 0, 4, 30, 20, "<",#SS_CENTERIMAGE|#SS_NOTIFY|#SS_CENTER)
      SetGadgetFont(#Btn_Nav_Back, LoadFont(#Font_Btn_Nav_Back, "Lucida", 10, #PB_Font_HighQuality))  ; Button Font
      SetGadgetColor(#Btn_Nav_Back, #PB_Gadget_BackColor, RGB(48, 103, 140))  ;TEXT Hintergrund FARBE
      SetGadgetColor(#Btn_Nav_Back, #PB_Gadget_FrontColor, RGB(0, 0, 0))  ;TEXT FARBE
      
  ;- Separator
     TextGadget(#Separater, 31, 8, 1, 14, "")
      SetGadgetColor(#Separater, #PB_Gadget_BackColor, RGB(31, 77, 106)) ;TEXT Hintergrund FARBE  
      
  ;- Btn Forward
     TextGadget(#Btn_Nav_Frwd, 32, 4, 30, 20, ">",#SS_CENTERIMAGE|#SS_NOTIFY|#SS_CENTER)
      SetGadgetFont(#Btn_Nav_Frwd, LoadFont(#Font_Btn_Nav_Frwd, "Lucida", 10, #PB_Font_HighQuality))  ; Button Font
      SetGadgetColor(#Btn_Nav_Frwd, #PB_Gadget_BackColor, RGB(48, 103, 140))  ;TEXT Hintergrund FARBE
      SetGadgetColor(#Btn_Nav_Frwd, #PB_Gadget_FrontColor, RGB(0, 0, 0))  ;TEXT FARBE
     
  ;- Btn Reload
     TextGadget(#Btn_Reload, 60, 4, 60, 20, "refresh",#SS_CENTERIMAGE|#SS_NOTIFY|#SS_CENTER)
      SetGadgetFont(#Btn_Reload, LoadFont(#Font_Btn_Reload, "Lucida", 10, #PB_Font_HighQuality))  ; Button Font
      SetGadgetColor(#Btn_Reload, #PB_Gadget_BackColor, RGB(48, 103, 140))  ;TEXT Hintergrund FARBE
      SetGadgetColor(#Btn_Reload, #PB_Gadget_FrontColor, RGB(0, 0, 0))  ;TEXT FARBE
      
  ;- Btn Start Browsing 
     TextGadget(#Btn_Start_Browsing, 635, 4, 20, 20, ">>",#SS_CENTERIMAGE|#SS_NOTIFY|#SS_CENTER)
      SetGadgetFont(#Btn_Start_Browsing, LoadFont(#Font_Start_Browsing, "Lucida", 10, #PB_Font_HighQuality))  ; Button Font
      SetGadgetColor(#Btn_Start_Browsing, #PB_Gadget_BackColor, RGB(48, 103, 140))  ;TEXT Hintergrund FARBE
      SetGadgetColor(#Btn_Start_Browsing, #PB_Gadget_FrontColor, RGB(0, 0, 0))  ;TEXT FARBE
      
        
  ;- Btn Close WEbGadget Window
     TextGadget(#Btn_CloseWebGadget, 948, 4, 60, 20, "close",#SS_CENTERIMAGE|#SS_NOTIFY|#SS_CENTER)
      SetGadgetFont(#Btn_CloseWebGadget, LoadFont(#Font_Btn_CloseWebGadget, "Lucida", 10, #PB_Font_HighQuality))  ; Button Font
      SetGadgetColor(#Btn_CloseWebGadget, #PB_Gadget_BackColor, RGB(48, 103, 140))  ;TEXT Hintergrund FARBE
      SetGadgetColor(#Btn_CloseWebGadget, #PB_Gadget_FrontColor, RGB(0, 0, 0))  ;TEXT FARBE
  
       WebObject\put_Silent(#True)
       WebObject\put_Left(#Editor_Gadget)
 
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
       
    ;- Beide Fenster unabhängig voneinander mit Maus verschieben   
       Case #WM_LBUTTONDOWN
           SendMessage_(hWnd, #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
  EndSelect  
  ProcedureReturn result
EndProcedure

OpenWindow(#Window_0, 298, 150, 710, 535, "",#PB_Window_BorderLess);| #PB_Window_ScreenCentered
SetWindowColor(#Window_0, RGB(219, 219, 219))

; EXIT BUTTON NORMAL AND HOVER
  Define Exit_Normal = CatchImage(#Image_Exit_Normal, ?Image_Exit_Normal, ?Image_Exit_Normal_End - ?Image_Exit_Normal)
  Define Exit_Red = CatchImage(#Image_Exit_Red, ?Image_Exit_Red, ?Image_Exit_Red_End - ?Image_Exit_Red)
    br = ImageWidth(#Image_Exit_Normal)
    hh = ImageHeight(#Image_Exit_Red)
    ;  POSITION WEHRE TO PLACE ON SCREEN  
       CanvasGadget(#Btn_Exit, 676, -2, br, hh) 
       SetGadgetAttribute(#Btn_Exit, #PB_Canvas_Image, ImageID(#Image_Exit_Normal))
    
; Button WebGadget
  ButtonGadget(#Btn_OpenBrowserGadget, 300, 50, 100, 50, "open Browser",#BS_FLAT)

; Button Speichern
  TextGadget(#Btn_Save, 300, 440, 100, 50, "Text speichern",#SS_CENTERIMAGE|#SS_NOTIFY|#SS_CENTER)  
    SetGadgetFont(#Btn_Save, LoadFont(#Font_Btn_Save, "Lucida", 8, #PB_Font_HighQuality)) ; Button Font
    SetGadgetColor(#Btn_Save, #PB_Gadget_BackColor, RGB(178, 183, 184))  ;TEXT Hintergrund FARBE
    SetGadgetColor(#Btn_Save, #PB_Gadget_FrontColor, RGB(0, 0, 0));TEXT FARBE
    
; Editor Gadget    
  EditorGadget(#Editor_Gadget, 43, 150, 623, 250, #PB_Editor_WordWrap);,#PB_Editor_WordWrap
    SetGadgetText(#Editor_Gadget, "kopierten Website Text hier einfügen")
    SetGadgetFont(#Editor_Gadget, LoadFont(#Font_Editor_Gadget, "Lucida", 10, #PB_Font_HighQuality)) ; Button Font
    SetGadgetColor(#Editor_Gadget, #PB_Gadget_FrontColor, RGB(193, 0, 85));TEXT FARBE
  ; Entferne Rahmen um EditorGadget (Eingabefeld)
      SetWindowTheme_(GadgetID(#Editor_Gadget), @"", @"")
      SetWindowLongPtr_(GadgetID(#Editor_Gadget), #GWL_EXSTYLE, 0)
      SetWindowPos_(GadgetID(#Editor_Gadget), 0, 0, 0, 0, 0, #SWP_NOMOVE | #SWP_NOSIZE | #SWP_FRAMECHANGED)
  
; Maus Area
  TextGadget(#MausArea, 0, 0, 676, 21, "   Haupt Fenster",#SS_CENTERIMAGE) ;x;y;länge;höhe,$340 = Value for Text Set vertically align
    SetGadgetColor(#MausArea, #PB_Gadget_FrontColor, RGB(246, 246, 246)) ;TEXT FARBE
    SetGadgetColor(#MausArea, #PB_Gadget_BackColor, RGB(48, 103, 140))  ;TEXT Hintergrund FARBE
    SetGadgetFont(#MausArea, LoadFont(#Font_MausArea, "Arial", 10, #PB_Font_HighQuality)) ; Button Font  
    
;- KontextMenü für EditorGadget deklarieren
      If CreatePopupMenu(#Editor_Gadget)
        MenuItem(1, "einfügen")
      EndIf
      SetWindowCallback(@WinCallback()) 
      
 
Repeat
  Event = WaitWindowEvent()
  EventGadget = EventGadget()
  EventType = EventType()

   ; Kontextmenü auf Editorgadget freischalten
      Select event
          Case #PB_Event_Menu
            Select EventMenu()
              Case 1
                SetGadgetText(#Editor_Gadget,GetClipboardText())
            EndSelect
      EndSelect
      
    ;Inhalt aus EditorGadget in Datei speichern  
      If Event=#PB_Event_Gadget
        If EventGadget()= #Btn_Save
          ; Eingabe auslesen
            Text$= GetGadgetText(#Editor_Gadget)
            
          ; Speicherdialog aufrufen  
            File$=SaveFileRequester("Text speichern", "C:\info.txt ", "TXT FILE(*.txt)|*.txt", 0)   
            
          ; schreibe Datei  
            If CreateFile(1, File$)
               WriteStringN(1,Text$, #PB_Ascii)
               CloseFile(1)
            EndIf  
        EndIf    
     EndIf
     
;- Button Funktionen    
  If Event = #PB_Event_Gadget
    Select EventGadget()
          
      ;- BTN WebGadget
          Case #Btn_OpenBrowserGadget
          Start()

      ;- BTN CloseWebGadget     
          Case #Btn_CloseWebGadget
            UpdateWindow_(WindowID(#Window_0))
            CloseWindow(#MainForm)
            
      ;- Web Navigation - Back - Forward - Reload 
          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)
          Case #Btn_Start_Browsing
            SetGadgetText(#Webgadget, GetGadgetText(#Show_Current_Url))
      ;- FUNKTION EXIT BUTTON    
          Case #Btn_Exit                 
            Select eventtype
              Case #PB_EventType_MouseEnter
                SetGadgetAttribute(#Btn_Exit, #PB_Canvas_Image, ImageID(#Image_Exit_Red))
                 Case #PB_EventType_MouseLeave
                   SetGadgetAttribute(#Btn_Exit, #PB_Canvas_Image, ImageID(#Image_Exit_Normal))
                   ;PROGRAM EXIT, IF CLICK ON EXIT BUTTON
                      Case #PB_EventType_LeftButtonDown
                      ;CLOSE ALL  
                        End
            EndSelect
        EndSelect
  EndIf

 ; KeyboardShortcuts
    Select Event
        
 ;-Begin Workaround für correctes Einfügen durch STRG+V ins EditorGadget
    ;dickes Danke an Derren       
     Case #PB_Event_Gadget
        If EventGadget()=#Editor_Gadget And EventType()=#PB_EventType_Focus
           If GetClipboardImage(#PB_Any)=0
             SetClipboardText(GetClipboardText())
          EndIf
       EndIf
;-End Workaround    
       
      Case #PB_Event_Menu
        Select EventMenu()
          Case 'x'
            WebObject\ExecWB(#OLECMDID_CUT,#OLECMDEXECOPT_DONTPROMPTUSER,0,0)
            
          Case 'c'
            WebObject\ExecWB(#OLECMDID_COPY,#OLECMDEXECOPT_DONTPROMPTUSER,0,0)
            
          Case 'v'
           SetGadgetText(#Editor_Gadget,GetClipboardText())
            
          Case 'a'
            WebObject\ExecWB(#OLECMDID_SELECTALL,#OLECMDEXECOPT_DONTPROMPTUSER,0,0)
            
          Case 'z'
            WebObject\ExecWB(#OLECMDID_UNDO,#OLECMDEXECOPT_DONTPROMPTUSER,0,0)
            
          Case 'y'
            WebObject\ExecWB(#OLECMDID_REDO,#OLECMDEXECOPT_DONTPROMPTUSER,0,0)
      EndSelect
    EndSelect  
 
  Until IsWindow(#Window_0)=0 And IsWindow(Fenster_ID)=0
Zuletzt geändert von udg am 17.12.2015 18:00, insgesamt 7-mal geändert.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: NEUES PROBLEM - 2. Fenster gibt den Fokus nicht mehr zur

Beitrag von ts-soft »

udg hat geschrieben:Nun zu meinem Final Code ( vielleicht kann das mal jemand gebrauchen :) :
Naja, zu diesem Code sage ich lieber nicht viel <)
Aber in Deinem EventLoop wird ohne Ereignis laufend ein "CreatePopupMenu" und ein "SetWindowsCallback" gesetzt.

Zur Verdeutlichung:

Code: Alles auswählen

Repeat
  Event = WaitWindowEvent()
  EventGadget = EventGadget()
  EventType = EventType()

  ;- Kontext Menü für EditorGadget deklarieren ; diese Teil gehört nicht in den EventLoop, sondern davor
      If CreatePopupMenu(#Editor_Gadget)
        MenuItem(1, "einfügen")
      EndIf
        SetWindowCallback(@WinCallback())
Das Return am Ende des Codes ist auch nicht so klar <) , ich denke das kann entfernt werden.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: NEUES PROBLEM - 2. Fenster gibt den Fokus nicht mehr zur

Beitrag von udg »

Naja, zu diesem Code sage ich lieber nicht viel <)
Du musst nicht gleich mit Kanonen auf mich Spatz schießen. Ich bin Anfänger und will viel lernen. Das nicht alles perfekt ist, scheint klar :mrgreen:

aber, wup natürlich hast Du recht. Keine Ahnung wie das in die Schleife gekommen ist.
'Return' kann weg.

Danke für die Info
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Derren
Beiträge: 558
Registriert: 23.07.2011 02:08

Re: [ ERLEDIGT ] 2. Fenster gibt den Fokus nicht mehr zurück

Beitrag von Derren »

Ganz schön viel Api, für das was es macht.
Wofür brauchst du das alles? Registry auch noch?

Kleiner Bug: Der [X]-Button von dem Editor-Fenster verschwindet wenn das Fenster im Hintergrund ist. Erst wenn man mit der Maus über die Titelleiste fährt, wo der Knopf eigentlich sein sollte, taucht er wieder auf.
Signatur und so
Antworten