Aktuelle Zeit: 23.10.2018 05:16

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: WebGadget im Container nach Resize verschwunden
BeitragVerfasst: 10.02.2018 21:36 
Offline
Benutzeravatar

Registriert: 01.04.2007 20:18
Hallo. Ich hab da grade ein sehr nerviges Problem :

Ich habe hier ein SplitterGadget, das Vertikal 2 Container in der Grösse ändern kann.
Beim Splittergadget "resize", also dem bewegen des Balkens, flackert es natürlicherweise beim Webgadget.
Das ist aber gar nicht das Problem, sondern, das das Webgadget komplett nicht mehr auftaucht.
Wenn man den Splitter nun ein wenig hin und herschiebt, verschwindet das Webgadget komplett.

Um festzustellen, ob der Splitterbalken sich bewegt, nehme ich den relativ neuen EventType des
Containergadgets : #PB_EventType_Resize. Also ich prüfe ob der Container die Grösse ändert (was
ja beim Splitter der Fall ist). Ansonsten wüsste ich jetzt nicht, wie man feststellen sollte das der User
das Splittergadget benutzt. Das Ding hat ja keine Events/EventTypes laut der Hilfe.

Wie krieg ich das Webgadget nach einem Resize wieder sichtbar ?

Lösungen dürfen auch WindowsAPI enthalten... ;)

Hier eine Demo um das Problem zu veranschaulichen.

Code:
OpenWindow(0, 0, 0, 640, 480, "Test", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)

; Container Links mit nix drin
ContainerGadget(0, 0, 0, 0, 0, #PB_Container_Raised) : CloseGadgetList()
; Container Rechts mit dem WebGadget
ContainerGadget(1, 0, 0, 0, 0, #PB_Container_Double)
WebGadget(2, 0, 0, 0, 0, "http://www.google.de")
CloseGadgetList()

; Splitter der die beiden Container beinhaltet
SplitterGadget(3, 0, 0, 640, 480, 0, 1, #PB_Splitter_Vertical)

Repeat
 
  Event = WaitWindowEvent()
 
  Select Event
    Case #PB_Event_CloseWindow
      Break
     
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 1 ; Container rechts
          If EventType() = #PB_EventType_Resize ; Wurde in der Grösse geändert
            ResizeGadget(2, 0, 0, GadgetWidth(1), GadgetHeight(1)); Webgadget an Container anpassen
          EndIf
      EndSelect
     
  EndSelect
 
ForEver

_________________
PureBasic 5.46 LTS / 5.62 (Windows x86/x64) | Windows10 Pro x64 | Z370 Extreme4 | i7 8770k | 32GB RAM | iChill GeForce GTX 980 X4 Ultra | HAF XF Evo​​


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WebGadget im Container nach Resize verschwunden
BeitragVerfasst: 10.02.2018 22:58 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Es scheint sich das WebGadget bei zu schnellen neu Zeichen zu verschlucken.

Habe es mal ohne API gelöst. Dazu wird nur alle 500 ms das WebGadget in der große geändert. Scheint zu funktionieren.
Code:

OpenWindow(0, 0, 0, 640, 480, "Test", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)

; Container Links mit nix drin
ContainerGadget(0, 0, 0, 0, 0, #PB_Container_Raised) : CloseGadgetList()
; Container Rechts mit dem WebGadget
ContainerGadget(1, 0, 0, 0, 0, #PB_Container_Double)
WebGadget(2, 0, 0, 0, 0, "http://www.google.de")
CloseGadgetList()

; Splitter der die beiden Container beinhaltet
SplitterGadget(3, 0, 0, 640, 480, 0, 1, #PB_Splitter_Vertical)


Global start_timer

Repeat
 
  Event = WaitWindowEvent()
 
  Select Event
    Case #PB_Event_CloseWindow
      Break
     
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 1 ; Container rechts
          If EventType() = #PB_EventType_Resize ; Wurde in der Grösse geändert
            If Not start_timer
              AddWindowTimer(0, 1, 500)
              start_timer = #True
            EndIf
          EndIf
      EndSelect
    Case #PB_Event_Timer
      Select EventTimer()
        Case 1
          ResizeGadget(2, 0, 0, GadgetWidth(1), GadgetHeight(1)); Webgadget an Container anpassen
          RemoveWindowTimer(0, 1)
          start_timer = #False
      EndSelect
  EndSelect
 
ForEver

_________________
Alles ist möglich, fragt sich nur wie...
Projekte EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WebGadget im Container nach Resize verschwunden
BeitragVerfasst: 10.02.2018 23:11 
Offline
Moderator
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Rupture Farms
Ich hatte vorhin genau die selbe Idee und habe auch versucht, mit einem Timer das Problem von Bisonte zu beheben, aber leider funktioniert es nicht zuverlässig: http://www.rsbasic.de/temp/2018-02-10%2021-57-29.mp4
Getestet mit dem Code von mk-soft
Das Redraw-Problem entsteht immer, wenn man versucht, mit der Maus zuerst nach links oder rechts zu verschieben und dann nach unten oder oben. Dann wird nichts mehr gezeichnet.
Ich habe vorhin auch mit verschiedenen Redraw-Möglichkeiten (#WM_NCPAINT, InvalidateRect_(), #WM_Paint, UpdateWindow_(), #SWP_FRAMECHANGED, RedrawWindow_(), HideGadget(), ...) ausprobiert, aber leider erfolglos. Sonst hätte ich dir bereits eine Lösung gepostet.

_________________
BildBildBildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WebGadget im Container nach Resize verschwunden
BeitragVerfasst: 10.02.2018 23:17 
Offline
Benutzeravatar

Registriert: 01.04.2007 20:18
@mk-Soft: Interessanter Lösungsversuch. Leider hilft das nicht wirklich. Es kommen immer wieder Momente in denen das Webgadget "verschwindet".
Allerdings verschwindet das Webgadget nicht wirklich. Wenn man mit rechter Maustaste auf den rechten grauen bereich klickt,
kommt das typische Popupmenu (hier das vom IE). Wenn man "Quellcode anzeigen" wählt, erscheint der Editor in nur "<HTML></HTML>"
angezeigt wird. Also liegt es am Zusammenwirken von Container/Splitter und Webgadget. Weil wenn man den Container
weglässt und das Webgadget direkt in den Splitter einträgt, klappt alles.... Nur dann kann ich da keine weiteren Gadgets mehr einfügen, oder
einen Rahmen um das Webgadget machen .....

@RSBasic: Ich hab all die verschiedenen Möglichkeiten auch probiert. Sogar die Webseite per Refresh neu laden zu lassen, die Url selbst neu eingetragen, ja selbst den HTML Text vorher aus dem Webgadget lesen und wieder einfügen klappt alles nicht. wenn das Ding einmal grau ist, bleibt es das auch. In einigen Fällen hilft es nur wenn man mit der Maus über das Webgadget fährt oder reinklickt und rauf und runterscrollt.
Aber das ist ja nicht wirklich ein Zustand ;)

Und selbst ein Webgadget ohne Splitter resizen ..... genau das gleiche Problem. Nur einzelnd im Splitter scheint es zu gehen.
Gibt es für Windows eine "einfach" zu nutzende Alternative zum Webgadget IE ActiveX Control... so wie früher das Mozilla Control ?

_________________
PureBasic 5.46 LTS / 5.62 (Windows x86/x64) | Windows10 Pro x64 | Z370 Extreme4 | i7 8770k | 32GB RAM | iChill GeForce GTX 980 X4 Ultra | HAF XF Evo​​


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WebGadget im Container nach Resize verschwunden
BeitragVerfasst: 10.02.2018 23:29 
Offline
Moderator
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Rupture Farms
@Bisonte
Ich habe für das Problem, welches ich nachollziehen konnte und auch in meinem Video gezeigt habe, eine Lösung gefunden. Kannst du meinen Code testen und prüfen, ob dein Problem auch behoben wurde?
Code:

Global WebGadgetCB

Procedure WebGadgetCB(hWnd, uMsg, wParam, lParam)
 
  Select uMsg
    Case #WM_LBUTTONUP
      HideGadget(2, 1)
      HideGadget(2, 0)
  EndSelect
 
  ProcedureReturn CallWindowProc_(WebGadgetCB, hWnd, uMsg, wParam, lParam)
EndProcedure

OpenWindow(0, 0, 0, 640, 480, "Test", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)

; Container Links mit nix drin
ContainerGadget(0, 0, 0, 0, 0, #PB_Container_Raised) : CloseGadgetList()
; Container Rechts mit dem WebGadget
ContainerGadget(1, 0, 0, 0, 0, #PB_Container_Double)
WebGadget(2, 0, 0, 0, 0, "http://www.google.de")
CloseGadgetList()

; Splitter der die beiden Container beinhaltet
SplitterGadget(3, 0, 0, 640, 480, 0, 1, #PB_Splitter_Vertical)

WebGadgetCB = SetWindowLongPtr_(GadgetID(3), #GWL_WNDPROC, @WebGadgetCB())

Repeat
 
  Event = WaitWindowEvent()
 
  Select Event
    Case #PB_Event_CloseWindow
      Break
     
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 1 ; Container rechts
          If EventType() = #PB_EventType_Resize ; Wurde in der Grösse geändert
            ResizeGadget(2, 0, 0, GadgetWidth(1), GadgetHeight(1)); Webgadget an Container anpassen
          EndIf
      EndSelect
     
  EndSelect
 
ForEver

_________________
BildBildBildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WebGadget im Container nach Resize verschwunden
BeitragVerfasst: 10.02.2018 23:49 
Offline
Benutzeravatar

Registriert: 01.04.2007 20:18
Klasse. Dem Splitter einen Callback aufzudrücken, darauf bin ich nicht gekommen :allright: ... Somit hab ich dann auch gleich sämtliches
"Geflacker" ausgeschaltet, indem ich bei #WM_LBUTTONDOWN das Webgadget verstecke und so wie bei dir bei #WMLBUTTONUP wieder
anzeige.

Dann will ich mal hoffen, das das auf den anderen beiden OS nicht auch so dramatisch wird... ;)

Danke nochmals !!!

_________________
PureBasic 5.46 LTS / 5.62 (Windows x86/x64) | Windows10 Pro x64 | Z370 Extreme4 | i7 8770k | 32GB RAM | iChill GeForce GTX 980 X4 Ultra | HAF XF Evo​​


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WebGadget im Container nach Resize verschwunden
BeitragVerfasst: 10.02.2018 23:53 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Vielleicht noch ein anderen Lösungsansatz.

Im rechte Splitterbereich noch ein SplitterGadget setzen. Dann flackert auch nicht mehr.
Code:
OpenWindow(0, 0, 0, 640, 480, "Test", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)

; Container Links mit nix drin
ContainerGadget(0, 0, 0, 0, 0, #PB_Container_Raised) : CloseGadgetList()

;Rechte Seite
WebGadget(2, 0, 0, 0, 0, "http://www.google.de")
TextGadget(3, 0, 0, 0, 0, GetGadgetText(2))

SplitterGadget(4, 0, 0, 640, 480, 2, 3, #PB_Splitter_SecondFixed)
SetGadgetState(4, 460)
; Splitter der die beiden Container beinhaltet
SplitterGadget(5, 0, 0, 640, 480, 0, 4, #PB_Splitter_Vertical)

Repeat
 
  Event = WaitWindowEvent()
 
  Select Event
    Case #PB_Event_CloseWindow
      Break
     
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 1 ; Container rechts
          If EventType() = #PB_EventType_Resize ; Wurde in der Grösse geändert
          EndIf
      EndSelect
  EndSelect
 
ForEver

_________________
Alles ist möglich, fragt sich nur wie...
Projekte EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye