Question de WebGadget + option #PB_Web_Edge (WebView2)

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Question de WebGadget + option #PB_Web_Edge (WebView2)

Message par cage »

Bonsoir,

Dans plusieurs applications, j'utilise le gadget WebGadget() avec l'option #PB_Web_Edge

J'aurais plusieurs questions, mais je vais me limiter a 2

1) Une fois la fenêtre ouverte et la page web affichée dans le WebGadget:
-- est-il possible d'afficher par exemple un CanvasGadget par dessus le WebGadget
-- J'aimerais qu'il fasse la largeur de la fenêtre en haut de celle ci avec une hauteur de 20
-- Je n'arrive pas a faire afficher le canvas au dessus du WebGadget
-- Est-ce possible ?

2) Une fois la fenêtre ouverte et la page web affichée dans le WebGadget:
-- est-il possible d'intercepter les codes clavier pour par exemple
-- attribuer aux touches Ctrl+Q ou Ctrl+X la fonction Quit
-- J'ai essayé les BindEvent(), les BindGadgetEven() et BindMenuEvent() sans succès.
-- Je m'y prends peut-être mal.
-- J'ai aussi essayé les AddKeyboardShortcut() sans plus de succès.

Auriez-vous quelques idées sur comment arriver a mes fins.

Merci.
cage

Code : Tout sélectionner

#winApp=0
#webEdge=0
#canvas=1
#FLAGS=#PB_Window_ScreenCentered|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget
W=854:H=480
If OpenWindow(#WinApp,0,0,W,H,"WebView2",#FLAGS)
  SetWindowColor(#WinApp,#Black)
  WebGadget(#webEdge,0,0,W,H,#Empty$,#PB_Web_Edge)
  CanvasGadget(#canvas,0,0,W,20,#PB_Canvas_Keyboard)
  SetGadgetAttribute(#webEdge,#PB_Web_BlockPopups,#True)
  SetGadgetAttribute(#webEdge,#PB_Web_BlockPopupMenu,#True)
  SetGadgetText(#webEdge,"https://www.jango.com/")
  CanvasGadget(#canvas,0,0,W,20,#PB_Canvas_Keyboard) ;;; <--- comment faire apparaitre ce canvas ?
  Repeat
    Event = WaitWindowEvent(20)
    Select Event
      Case #PB_Event_CloseWindow
        Break
    EndSelect
  ForEver
EndIf
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Question de WebGadget + option #PB_Web_Edge (WebView2)

Message par cage »

Bonsoir,
En farfouillant sur le forum anglais j'ai trouvé une solution sans savoir si c'est vraiment la bonne.
Mais ça fonctionne.
J'ai ajouté ce code dans la boucle Repeat

Code : Tout sélectionner

  Repeat
    If GetAsyncKeyState_(#VK_ESCAPE)
      SetWindowState(#WinApp, #PB_Window_Minimize)
    EndIf
    ;
    If GetAsyncKeyState_(#VK_Q)
      If appQuit() : Break : EndIf
    EndIf
    ;
    Event = WaitWindowEvent(20)
    Select Event
      ;;; Le reste a l'identique.
cage
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Question de WebGadget + option #PB_Web_Edge (WebView2)

Message par Ar-S »

Yop.
Si tu dois afficher le canvas au dessus du webgadget, pourquoi ne fais tu simplement pas aparaitre ton webgadget au dessous ?

Code : Tout sélectionner

Enumeration
  #winApp
  #webEdge
  #canvas
  #Menu
  #Racc01
EndEnumeration
#FLAGS=#PB_Window_ScreenCentered|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget

Global W=854, H=480
Global Wcan = W, Hcan = 20
Global Wedge = W, Hedge = H-Hcan-1

Declare.b changeCanvasColorBg(color)

If OpenWindow(#WinApp,0,0,W,H,"WebView2",#FLAGS)
  SetWindowColor(#WinApp,#Black)
  CanvasGadget(#canvas,0,0,W,Hcan,#PB_Canvas_Keyboard)
  WebGadget(#webEdge,0,Hcan,W,Hedge,#Empty$,#PB_Web_Edge)
  SetGadgetAttribute(#webEdge,#PB_Web_BlockPopups,#True)
  SetGadgetAttribute(#webEdge,#PB_Web_BlockPopupMenu,#True)
  SetGadgetText(#webEdge,"https://www.jango.com/")
  changeCanvasColorBg($0)
  Repeat
    Event = WaitWindowEvent(20)
    If GetAsyncKeyState_(#VK_Q)
      ;If appQuit() : Break : EndIf
      Q = 1
    EndIf
    
    Select Event  
      Case #PB_Event_CloseWindow
        Q = 1
    EndSelect
  Until Q = 1
EndIf
End


Procedure.b changeCanvasColorBg(color)
  Protected r.b
  If StartDrawing(CanvasOutput(#canvas))
  Box(0,0,W,Hcan,color)
  StopDrawing()
  EndIf
EndProcedure
Et si tu veux une apparition ponctuelle du canvas tu joues avec les hidegadget et le resizegadget.
Pour le AddKeyboardShortcut il ne marchera que si c'est le canva qui a le focus, donc le GetAsyncKeyState_(#VK_Q) est une bonne solution windowsonly
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Question de WebGadget + option #PB_Web_Edge (WebView2)

Message par cage »

Bonsoir Ar-S,

Je viens de regarder ton code, le WebGadget est en dessous (sur l'axe Y) du canvas

Ce que je voudrais, c'est pouvoir afficher le canvas par dessus le WebGadget sur la partie haute de celui ci pour qu'il le recouvre partiellement.

Ce n'est peut-être pas possible, mais sait-on jamais ?

Merci tour ta réponse,

cage
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Question de WebGadget + option #PB_Web_Edge (WebView2)

Message par Ar-S »

Tu pourrais expliquer plus clairement le but de ta manœuvre. On pourrait peut être te proposer une solution alternative. Parce qu'en l'état, je ne trouve pas de solution. Même via un API

Code : Tout sélectionner

SetWindowPos_(GadgetID(#canvas), #HWND_TOPMOST, 0, 0, 0, 0, #SWP_NOMOVE | #SWP_NOSIZE | #SWP_SHOWWINDOW)
ça ne marche pas.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Question de WebGadget + option #PB_Web_Edge (WebView2)

Message par cage »

Pour des amis, je réalise une petite appli bâtie autour d'un WebGadget et WebView2 pour afficher une page Web

Il doit être possible de naviguer dans les possibilités offertes mais pas de cliquer sur des menus qui se trouvent en haut de chaque page.

C'est pourquoi je souhaiterais pouvoir masquer ces menus de haut de page.

Voici un début de solution (un exemple non finalisé) avec 2 OpenWindow()
Par contre, pour l'instant, je ne sais pas lier les 2 fenêtres ensembles pour qu'elles se dimensionnent ou se déplacent ensemble.
Si tu as une solution ?

Code : Tout sélectionner

EnableExplicit
EnableDebugger

Enumeration Window
#winApp=0
#winTop=1
EndEnumeration

Enumeration Gadgets
#webEdge=0
#canvas=1
EndEnumeration

#FLAGS1=#PB_Window_ScreenCentered|#PB_Window_SizeGadget|#PB_Window_Invisible
#FLAGS2=#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget

Define X,Y,W,H,win1,win2
Define Event,indexGadget,indexGadgetType,indexMenu

#WMIN=854:#HMIN=480:#HTOP=50
W=#WMIN
H=#HMIN
;
; CRÉATION FENÊTRE PRINCIPALE
;
win1=OpenWindow(#WinApp,0,0,W,H,"win1",#FLAGS1)
If win1
  SetWindowColor(#WinApp,#White)
  WebGadget(#webEdge,0,0,W,H,#Empty$,#PB_Web_Edge)
  SetGadgetAttribute(#webEdge,#PB_Web_BlockPopups,#True)
  SetGadgetAttribute(#webEdge,#PB_Web_BlockPopupMenu,#True)
  SetGadgetText(#webEdge,"https://www.jango.com/")
EndIf
X=WindowX(#winApp)
Y=WindowY(#winApp)
;
; CRÉATION FENÊTRE SECONDAIRE
;
win2=OpenWindow(#winTop,X,Y,W,#HTOP,"win2",#FLAGS2)
If win1 And win2
  HideWindow(#winApp,#False,#PB_Window_NoActivate)
  StickyWindow(#winTop,#True)
  SetWindowColor(#winTop,#Yellow)
  ;;CanvasGadget(#canvas,0,0,W,20,#PB_Canvas_Keyboard)
Else
  End
EndIf

Define fullscreen=#False,N
Repeat
  If GetAsyncKeyState_(#VK_ESCAPE)
    HideWindow(#winApp,#True)
    SetWindowState(#winTop, #PB_Window_Minimize)
  EndIf
  If GetAsyncKeyState_(#VK_Q)
    Break
  EndIf
  Event = WaitWindowEvent(20)
  Select Event
    Case #PB_Event_Gadget
      indexGadget     = EventGadget()
      indexGadgetType = EventType()
      Select indexMenu
        ;; Traitement des évenements des Gadgets
      EndSelect
    Case #PB_Event_MaximizeWindow
      ;Debug "MAXIMIZE"+fullscreen
      If fullscreen=#False
        SetWindowState(#winApp, #PB_Window_Maximize)
        SetWindowState(#winTop, #PB_Window_Maximize)
        ResizeWindow(#winTop,0,0,WindowWidth(#winApp),#HTOP)
        ResizeGadget(#webEdge,0,0,WindowWidth(#winApp),WindowHeight(#winApp))
        fullscreen=#True
      Else
        If N=0
          N+1
          Continue
        Else
          N=0
        EndIf
        SetWindowState(#winApp, #PB_Window_Normal)
        ResizeWindow(#winTop,WindowX(#winApp),WindowY(#winApp),WindowWidth(#winApp),#HTOP)
        fullscreen=#False
      EndIf
      Delay(500)
    Case #PB_Event_MinimizeWindow
      HideWindow(#winApp,#True)
      HideGadget(#webEdge,#True)
      SetWindowState(#winTop, #PB_Window_Minimize)
      ;
    Case #PB_Event_RestoreWindow
      HideWindow(#winApp,#False)
      X=WindowWidth(#winApp)
      Y=WindowHeight(#winApp)
      ResizeGadget(#webEdge,0,0,X,Y)
      HideGadget(#webEdge,#False)
      
      ;
    Case #PB_Event_ActivateWindow
      ;
    Case #PB_Event_CloseWindow
      Break
  EndSelect
ForEver
End
cage
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Question de WebGadget + option #PB_Web_Edge (WebView2)

Message par Ar-S »

Un très bon code de Rashad pour faire une fenêtre sans bordure et déplaçable. Je m'en suis servi pas mal de fois.
Je pense que tu pourrais t'en servir.
;rashad
#MONITORINFOF_PRIMARY=1
#MONITOR_DEFAULTTONULL=0
#MONITOR_DEFAULTTOPRIMARY=1
#MONITOR_DEFAULTTONEAREST=2

#SC_Leftsize = $F001
#SC_Rightsize = $F002
#SC_Upsize = $F003
#SC_UpLeftsize = $F004
#SC_UpRightsize = $F005
#SC_Dnsize = $F006
#SC_DnLeftsize = $F007
#SC_DnRightsize = $F008
#SC_DragMove = $F012

; CompilerIf #PB_Compiler_Unicode = 0
; MessageRequester("Info","Unicode compiler option not set",#MB_ICONINFORMATION)
; End
; CompilerEndIf

Global hwnd,r.RECT,hmon,mi.MONITORINFO,x,y,w,h,snap
mi\cbSize=SizeOf(mi)

Procedure sizeCB()
ResizeGadget(0,10,WindowHeight(0)-36,60,24)
EndProcedure

hwnd=OpenWindow(0,0,0,800,600,"PB_Player",#PB_Window_BorderLess | #WS_BORDER | #PB_Window_Invisible)
SetWindowColor(0,$838383)

ButtonGadget(0,10,564,60,24,"Quit")
HideWindow(0,0,#PB_Window_ScreenCentered)
BindEvent(#PB_Event_SizeWindow,@sizeCB())
SmartWindowRefresh(0,1)

snap = 50
sw = 10
sww = 2*sw
Repeat
Select WaitWindowEvent(1)
Case #PB_Event_MoveWindow
If IsWindow(0)
GetWindowRect_(hWnd,r)
w = r\right - r\left
h = r\bottom - r\top
EndIf
hmon = MonitorFromWindow_(hWnd,#MONITOR_DEFAULTTONEAREST)
GetMonitorInfo_(hmon,mi)
If mi\rcWork\left + snap > r\left : r\left = mi\rcWork\left - 2: EndIf
If r\left + w >= (mi\rcWork\right - snap): r\left = mi\rcWork\right - w + 2: EndIf
If mi\rcWork\top + snap > r\top : r\top = mi\rcWork\top - 2 : EndIf
If r\top + h >= (mi\rcWork\bottom - snap): r\top = mi\rcWork\bottom - h + 2 : EndIf
MoveWindow_(hWnd,r\left,r\top,w,h,1)

Case #WM_MOUSEMOVE;,#WM_NCMOUSEMOVE
GetWindowRect_(hWnd,r.RECT)
mx = DesktopMouseX()
my = DesktopMouseY()
Flag = 0
If mx > r\left+sww And mx < r\right-sww And my > r\top-sw And my < r\top+sw
SetCursor_(LoadCursor_(0, #IDC_SIZENS))
Flag = 1
ElseIf mx > r\left+sww And mx < r\right-sww And my > r\bottom-sw And my < r\bottom+sw
SetCursor_(LoadCursor_(0, #IDC_SIZENS))
Flag = 2
ElseIf mx > r\left-sw And mx < r\left+sw And my > r\top+sww And my < r\bottom-sww
SetCursor_(LoadCursor_(0, #IDC_SIZEWE))
Flag = 3
ElseIf mx > r\right-sw And mx < r\right+sw And my > r\top+sww And my < r\bottom-sww
SetCursor_(LoadCursor_(0, #IDC_SIZEWE))
Flag = 4
ElseIf mx > r\left-sw And mx < r\left+sw And my > r\top-sw And my < r\top+sw
SetCursor_(LoadCursor_(0, #IDC_SIZENWSE))
Flag = 5
ElseIf mx > r\right-sw And mx < r\right+sw And my > r\bottom-sw And my < r\bottom+sww
SetCursor_(LoadCursor_(0, #IDC_SIZENWSE))
Flag = 6
ElseIf mx > r\right-sw And mx < r\right+sw And my > r\top-sw And my < r\top+sw
SetCursor_(LoadCursor_(0, #IDC_SIZENESW))
Flag = 7
ElseIf mx > r\left-sw And mx < r\left+sw And my > r\bottom-sw And my < r\bottom+sww
SetCursor_(LoadCursor_(0, #IDC_SIZENESW))
Flag = 8
EndIf

Case #WM_LBUTTONDOWN
If Flag > 0
ReleaseCapture_()
EndIf
If Flag = 0
SetCursor_(LoadCursor_(0, #IDC_HAND))
SendMessage_(hWnd, #WM_SYSCOMMAND , #SC_DragMove,0)
ElseIf Flag = 1
SetCursor_(LoadCursor_(0, #IDC_SIZENS))
SendMessage_(hWnd, #WM_SYSCOMMAND , #SC_Upsize,0)
ElseIf Flag = 2
SetCursor_(LoadCursor_(0, #IDC_SIZENS))
SendMessage_(hWnd, #WM_SYSCOMMAND , #SC_Dnsize,0)
ElseIf Flag = 3
SetCursor_(LoadCursor_(0, #IDC_SIZEWE))
SendMessage_(hWnd, #WM_SYSCOMMAND , #SC_Leftsize,0)
ElseIf Flag = 4
SetCursor_(LoadCursor_(0, #IDC_SIZEWE))
SendMessage_(hWnd, #WM_SYSCOMMAND , #SC_Rightsize,0)
ElseIf Flag = 5
SetCursor_(LoadCursor_(0, #IDC_SIZENWSE))
SendMessage_(hWnd, #WM_SYSCOMMAND , #SC_UpLeftsize,0)
ElseIf Flag = 6
SetCursor_(LoadCursor_(0, #IDC_SIZENWSE))
SendMessage_(hWnd, #WM_SYSCOMMAND , #SC_DnRightsize,0)
ElseIf Flag = 7
SetCursor_(LoadCursor_(0, #IDC_SIZENESW))
SendMessage_(hWnd, #WM_SYSCOMMAND , #SC_UpRightsize,0)
ElseIf Flag = 8
SetCursor_(LoadCursor_(0, #IDC_SIZENESW))
SendMessage_(hWnd, #WM_SYSCOMMAND , #SC_DnLeftsize,0)
EndIf

Case #WM_LBUTTONUP
Flag = 0
SendMessage_(hWnd, #WM_SYSCOMMAND, 0, 0)

Case #PB_Event_Gadget
Select EventGadget()
Case 0
Quit = 1
EndSelect

EndSelect

Until Quit = 1
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Question de WebGadget + option #PB_Web_Edge (WebView2)

Message par cage »

Bonsoir,

Merci Ar-S, je vais regarder si ça peut faire mon bonheur.

cage
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Question de WebGadget + option #PB_Web_Edge (WebView2)

Message par cage »

Bonsoir,

@Ar-S: En picorant dans le code que tu m'a donné, j'arrive a quelque chose qui fonctionne mais ne me satisfait pas complétement.

Ce fonctionnement a 2 fenêtres n'est pas très pro et comporte pas mal de défauts.
J'ai pensé que un skin serait peut-être la solution, mais là aussi, je n'ai aucune idée de comment m'y prendre.
Je vais creuser ça, il doit bien y avoir des exemples quelque part.
Voici le code:

Code : Tout sélectionner

EnableExplicit
EnableDebugger

Enumeration Window
  #winApp
  #winTop
EndEnumeration

Enumeration Gadgets
  #webView
  #canvas
EndEnumeration

Enumeration Menus
  #MenuTray
EndEnumeration

Enumeration SubMenus
  #showApp
  #quitter
EndEnumeration

Declare sizeWindow()
Declare moveWindow()
Declare setSysTray()
Declare showWindow()

#FLAGS1=#PB_Window_ScreenCentered|#PB_Window_SizeGadget|#PB_Window_Invisible
#FLAGS2=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget;|#PB_Window_SizeGadget

Define X,Y,W,H,win1,win2
Define Event,indexGadget,indexGadgetType,indexMenu

#WMIN=854:#HMIN=480:#HTOP=50
W=#WMIN
H=#HMIN
;
; CRÉATION FENÊTRE PRINCIPALE
;
win1=OpenWindow(#WinApp,0,0,W,H,"win1",#FLAGS1)
If win1
  SetWindowColor(#WinApp,#White)
  WebGadget(#webView,0,0,W,H,#Empty$,#PB_Web_Edge)
  SetGadgetAttribute(#webView,#PB_Web_BlockPopups,#True)
  SetGadgetAttribute(#webView,#PB_Web_BlockPopupMenu,#True)
  SetGadgetText(#webView,"https://www.jango.com/")
  SetWindowLong_(win1,#GWL_EXSTYLE,#WS_EX_TOOLWINDOW) ;Astuces pour empecher la fenetre d'apparaitre dans la barre des taches
EndIf
X=WindowX(#winApp)
Y=WindowY(#winApp)
;
; CRÉATION FENÊTRE SECONDAIRE
;
win2=OpenWindow(#winTop,X-3,Y,W,#HTOP,"win2",#FLAGS2)
If win1 And win2
 ;SetWindowLong_(win2,#GWL_EXSTYLE,#WS_EX_TOOLWINDOW)
  HideWindow(#winApp,#False,#PB_Window_NoActivate|#PB_Window_ScreenCentered)
  StickyWindow(#winTop,#True)
  SetWindowColor(#winTop,#Yellow)
  ;CanvasGadget(#canvas,0,0,W,#HTOP,#PB_Canvas_Keyboard)
Else
  End
EndIf

UsePNGImageDecoder()
setSysTray()

If CreatePopupImageMenu(#MenuTray, #PB_Menu_ModernLook)
  MenuItem(#showApp,"App WebView")
  MenuBar()
  MenuItem(#quitter,"Quitter")
EndIf

SmartWindowRefresh(#winApp,#True)
SmartWindowRefresh(#wintop,#True)

BindEvent(#PB_Event_MoveWindow,@moveWindow())
BindEvent(#PB_Event_SizeWindow,@sizeWindow())

Define fullscreen=#False,N

Repeat
  If GetAsyncKeyState_(#VK_ESCAPE)
    HideWindow(#winApp,#True)
    SetWindowState(#winTop, #PB_Window_Minimize)
  EndIf
  If GetAsyncKeyState_(#VK_Q)
    Break
  EndIf
  Event = WaitWindowEvent(20)
  Select Event
    Case #PB_Event_Menu
      indexMenu = EventMenu()
      Select indexMenu
        Case #showApp : showWindow()
        Case #quitter : Break
      EndSelect
    Case #PB_Event_Gadget
      indexGadget     = EventGadget()
      indexGadgetType = EventType()
      Select indexGadget
        ;; Traitement des évenements des Gadgets
      EndSelect
    Case #PB_Event_MoveWindow
      ;Debug "MOVE"
    Case #PB_Event_Repaint
      ;Debug "REPAINT"
    Case #PB_Event_SizeWindow
      ;Debug "SIZE"
    Case #PB_Event_MaximizeWindow
      ;Debug "MAXIMIZE"+fullscreen
      If fullscreen=#False
        SetWindowState(#winApp, #PB_Window_Maximize)
        SetWindowState(#winTop, #PB_Window_Maximize)
        ResizeWindow(#winTop,0,0,WindowWidth(#winApp),#HTOP)
        ResizeGadget(#webView,0,0,WindowWidth(#winApp),WindowHeight(#winApp))
        fullscreen=#True
      Else
        If N=0
          N+1
          Continue
        Else
          N=0
        EndIf
        SetWindowState(#winApp, #PB_Window_Normal)
        ResizeWindow(#winTop,WindowX(#winApp),WindowY(#winApp),WindowWidth(#winApp),#HTOP)
        fullscreen=#False
      EndIf
      Delay(500)
    Case #PB_Event_MinimizeWindow
      HideWindow(#winApp,#True)
      HideWindow(#winTop,#True)
      HideGadget(#webView,#True)
      SetWindowState(#winTop, #PB_Window_Minimize)
      ;
    Case #PB_Event_RestoreWindow
      HideWindow(#winApp,#False)
      X=WindowWidth(#winApp)
      Y=WindowHeight(#winApp)
      ResizeGadget(#webView,0,0,X,Y)
      HideGadget(#webView,#False)
      ;
    Case #PB_Event_ActivateWindow
      ;
    Case #PB_Event_CloseWindow
      Break
      ;
    Case #PB_Event_SysTray
      Select EventType()
        Case #PB_EventType_RightClick
          DisplayPopupMenu(#MenuTray, WindowID(#WinApp))
        Case #PB_EventType_LeftClick
          showWindow()
      EndSelect
  EndSelect
ForEver
End
Procedure moveWindow()
  Debug "moveWin"
  ResizeWindow(#winApp,WindowX(#winTop)+3,WindowY(#winTop),#PB_Ignore,#PB_Ignore)
EndProcedure

Procedure sizeWindow()
  Debug "sizeWin"
  ResizeWindow(#winTop,WindowX(#winApp)-3,WindowY(#winapp),WindowWidth(#winapp),#PB_Ignore)
  ResizeGadget(#webView,0,0,WindowWidth(#winApp),WindowHeight(#winApp))
EndProcedure

Procedure setSysTray()
  If FindWindow_("Progman",#NUL) <> 0
    AddSysTrayIcon(#WinApp,WindowID(#WinApp),LoadImage(0, #PB_Compiler_Home + "examples/sources/Data/world.png"))
    SysTrayIconToolTip(#WinApp,"App WebView")
  EndIf
EndProcedure

Procedure showWindow()
  HideWindow(#WinApp, #False)
  HideWindow(#WinTop, #False)
  SetWindowState(#winTop, #PB_Window_Normal)
  SetWindowState(#WinApp, #PB_Window_Normal)
  StickyWindow(#winApp,#True)
  StickyWindow(#winApp,#False)
  StickyWindow(#winTop,#True)
  SetActiveWindow(#winTop)
  SetActiveWindow(#WinApp)
EndProcedure
cage
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Question de WebGadget + option #PB_Web_Edge (WebView2)

Message par Ar-S »

Une remarque comme ça. Je crois qu'on peut ajouter du javascript dans le gadget non ? Si oui, tu pourrais simplement passer les balises <nav> en display:none; ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Question de WebGadget + option #PB_Web_Edge (WebView2)

Message par Ar-S »

J'ai fait un teste avec mon site, j'ai réussi à virer le menu :)
- 1 seule fenêtre
- pas de canvas
juste du JS

Code : Tout sélectionner

#WinApp = 0
#webEdge = 0
#FLAGS = #PB_Window_ScreenCentered | #PB_Window_SizeGadget | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget
W = 1200 : H = 480

If OpenWindow(#WinApp, 0, 0, W, H, "WebView2", #FLAGS)
  SetWindowColor(#WinApp, #Black)
  WebGadget(#webEdge, 0, 0, W, H, #Empty$, #PB_Web_Edge)
  
  ; Bloquer les popups et les menus contextuels
  SetGadgetAttribute(#webEdge, #PB_Web_BlockPopups, #True)
  SetGadgetAttribute(#webEdge, #PB_Web_BlockPopupMenu, #True)
  
  ; Charger la page
  SetGadgetText(#webEdge, "https://www.ldvmultimedia.com/")
  
  
; essaye sans ce qui suite puis essaye avec.
;------------------------------------------
; Injecter le JavaScript pour masquer les balises <nav> après le chargement
  WebViewExecuteScript(#webEdge, ~"document.addEventListener('DOMContentLoaded', () => {" +
                                    "const navElements = document.querySelectorAll('nav');" +
                                    "navElements.forEach(nav => {" +
                                    "nav.style.display = 'none';" +
                                    "});" +
                                    "});")
  ;------------------------------------------
  Repeat
    Event = WaitWindowEvent(20)
    Select Event
      Case #PB_Event_CloseWindow
        Break
    EndSelect
  ForEver
EndIf

J'espère que ça te conviendra.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Question de WebGadget + option #PB_Web_Edge (WebView2)

Message par cage »

Bonjour,

Avec le site Web que je dois afficher, je n'y arrive pas avec JavaScript.
Il est impossible de voir le code de la page d'accueil et tout fonctionne a base de JavaScript obfusqué.
Même avec l'Inspecteur de Firefox, je ne retrouve pas mes petits.
Mais je garde ta solution sous le coude, ça me servira certainement pour d'autres projets.

Par contre, comme je suis têtu, j'ai continué avec mon idée de cacher la partie haute de la page Web.
Et sans le vouloir, je suis tombé sur une solution qui me satisfait.
Les menus sont toujours visibles mais non cliquables avec la souris.
Par contre, la touche tabulation permet de se balader dans les menus et la touche Entrée valide le menu.
Il faut que je regarde si je peux dévalider cette fonctionnalité.
La solution que j'ai accidentellement trouvée est d'utiliser un ImageGadget() a la place d'un canvas.
Si l'ImageGadget() est créé avant le WebGadget(), la zone couverte par l'image n'est plus accessible a la souris.
Voici le code:

Code : Tout sélectionner

#WinApp = 0
#webEdge = 0
#FLAGS = #PB_Window_ScreenCentered|#PB_Window_MinimizeGadget
W = 1200 : H = 600

If OpenWindow(#WinApp, 0, 0, W, H, "WebView2", #FLAGS)
  SetWindowColor(#WinApp, #Black)
  
  ; Création d'une image qui désactivera les menus mais pas l'ascenseur vertical
  CreateImage(10,W,200,24,#Black)
  ImageGadget(11,0,0,W-20,200,ImageID(10))
  
  WebGadget(#webEdge, 0, 0, W, H, #Empty$, #PB_Web_Edge)
  
  ; Bloquer les popups et les menus contextuels
  SetGadgetAttribute(#webEdge, #PB_Web_BlockPopups, #True)
  SetGadgetAttribute(#webEdge, #PB_Web_BlockPopupMenu, #True)
  
  ; Charger la page
  SetGadgetText(#webEdge, "https://www.ldvmultimedia.com/")
  
  Repeat
    ; Trouver une autre solution pour bloquer la touche Tabulation
    If GetAsyncKeyState_(#VK_TAB)
      SetGadgetText(#webEdge, "https://www.ldvmultimedia.com/")
    EndIf
    Event = WaitWindowEvent(20)
    Select Event
      Case #PB_Event_CloseWindow
        Break
    EndSelect
  ForEver
EndIf
cage
Dernière modification par cage le jeu. 24/oct./2024 22:22, modifié 1 fois.
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
cage
Messages : 604
Inscription : ven. 16/oct./2015 18:22
Localisation : France
Contact :

Re: Question de WebGadget + option #PB_Web_Edge (WebView2)

Message par cage »

Une solution pour inhiber la touche Tabulation.
Remplacer le code:

Code : Tout sélectionner

  Repeat
    ; Trouver une autre solution pour bloquer la touche Tabulation
    If GetAsyncKeyState_(#VK_TAB)
      SetGadgetText(#webEdge, "https://www.ldvmultimedia.com/")
    EndIf
    Event = WaitWindowEvent(20)
Par celui-ci:

Code : Tout sélectionner

  Repeat
    If GetAsyncKeyState_(#VK_TAB)
      SetFocus_(WindowID(#WinApp))
    EndIf
    Event = WaitWindowEvent(20)
Le fait de donner le focus a la fenêtre retire le focus des éléments qui l'obtenaient via cette touche Tab
cage
■ Win10 Pro 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 6.12 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Gérard sur le forum Anglais
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Question de WebGadget + option #PB_Web_Edge (WebView2)

Message par Ar-S »

Avec le site Web que je dois afficher, je n'y arrive pas avec JavaScript.
Il est impossible de voir le code de la page d'accueil et tout fonctionne a base de JavaScript obfusqué.
Même avec l'Inspecteur de Firefox, je ne retrouve pas mes petits.
Donc ça doit être du react.. Avec un peu de chance en Node géré par le serveur..
J'avoue que je reste intrigué par ce projet :twisted:

Cool que tu ais réussi en tout cas.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Répondre