Ouvrir un screen plus grand que la fenetre
Re: Ouvrir un screen plus grand que la fenetre
Pas de phrase d'intro... Bon... Et bien, en attendant, je remercie Christophe qui a fait surgir cette idée d'écran accéléré fenêtré. Et le principe de gadget image qui supplante le gadget MDI, dans le cadre du support d'écran fenêtré.
Et, bien que Zorro indique, que dans deux passés plus ou moins lointains d'autres ont aussi ajouté l'idée suivante (discussions de dräc en 2004 et Graph100 en 2014), Christophe a émis l'hypothèse efficace qu'un Windowed Screen pouvait être ouvert grâce au handle non pas d'une fenêtre explicite, mais d'une fenêtre implicite, tel que le gadget.
Petit rappel : un handle, c'est un manipulateur technique, une main, tel que la main que l'on garde ou que l'on passe dans certains jeux, le self contrôle dans la vie quotidienne, le tour dans la française des jeux, formidable officine qui colle un placard << Philosophy forever >> à quiconque anti-capitaliste qui s'achète son ticket à gratter.
Et, en PureBasic, un handle, c'est un identifiant, un ID.
Aussi Zorro, fin limier porte une soufflée en scotchant l'écran graphique dans un Gadget Container. Mais... Il y a un mais...
Comme son nom l'indique, et, mieux que le MDI et le Container, le Gadget Image contient une image. Et, rien ne m'indique que le MDI ou le Container n'ont pas non plus une image inaccessible en natif, une zone mémoire, allouée pour rien. Rien ne m'indique non plus que j'affabule. Mais, dans le doute, le Gadget Image m'apporte cette sensation de contrôle. Alleluiah, shalom, amine, et, Hextril cul-sec, pour ne pas faire de jaloux.
Comme je disais, j'ai légué le resizing au rang des écrans freezés. J'ai renoncé, j'ai abandonné. Je suis, à ce sujet, parti le slip baissé en suçant mon pouce. Et Zorro, dans son Container is the winner.
En effet, j'ai décidé que l'application, c'était l'application et, l'OS, ben c'était l'OS. Et qu'une application qui exige de l'OS de couvrir ou découvrir une zone de son interface, c'était une exigence irresponsable.
Après tout ? On a une option SystemMenu, elle ne crashe pas. On peut resizer : c'est l'utilisateur qui décide avec sa souris, ou bien c'est l'application qui demande. Mais une application qui exige, c'est envoyer des utilisateurs au goulag.
C'est comme ça qu'on se retrouve avec des artifacts, sans l'heure, sans son niveau de batterie, avec sa SysTray qui déconne, et surtout, c'est comme ça qu'on dicerne une application de chez Symantec d'une autre application.
Donc le resizing, la seule chose qu'il faut se contraindre à faire c'est de le détecter, de le mesurer et de l'enregistrer.
Par contre, le scrolling, on va se faire un plaisir de le prendre en main. Et puisque le sujet c'est "screen" qui signifie thématiquement << Ecran avec accélération matérielle >>, sur le plan de l'affichage, on ne va pas en laisser une goutte à l'OS qui va rester se débrouiller à afficher l'heure, etc...
Alors il y a un << mais >> technique : que deviennent ExamineMouse() et ExamineKeyboard() lorsque l'on a fourré son écran fenêtré, accéléré, resizable, mouvable, etc... dans la redirection d'un handle de gadget ?
Et, bien que Zorro indique, que dans deux passés plus ou moins lointains d'autres ont aussi ajouté l'idée suivante (discussions de dräc en 2004 et Graph100 en 2014), Christophe a émis l'hypothèse efficace qu'un Windowed Screen pouvait être ouvert grâce au handle non pas d'une fenêtre explicite, mais d'une fenêtre implicite, tel que le gadget.
Petit rappel : un handle, c'est un manipulateur technique, une main, tel que la main que l'on garde ou que l'on passe dans certains jeux, le self contrôle dans la vie quotidienne, le tour dans la française des jeux, formidable officine qui colle un placard << Philosophy forever >> à quiconque anti-capitaliste qui s'achète son ticket à gratter.
Et, en PureBasic, un handle, c'est un identifiant, un ID.
Aussi Zorro, fin limier porte une soufflée en scotchant l'écran graphique dans un Gadget Container. Mais... Il y a un mais...
Comme son nom l'indique, et, mieux que le MDI et le Container, le Gadget Image contient une image. Et, rien ne m'indique que le MDI ou le Container n'ont pas non plus une image inaccessible en natif, une zone mémoire, allouée pour rien. Rien ne m'indique non plus que j'affabule. Mais, dans le doute, le Gadget Image m'apporte cette sensation de contrôle. Alleluiah, shalom, amine, et, Hextril cul-sec, pour ne pas faire de jaloux.
Comme je disais, j'ai légué le resizing au rang des écrans freezés. J'ai renoncé, j'ai abandonné. Je suis, à ce sujet, parti le slip baissé en suçant mon pouce. Et Zorro, dans son Container is the winner.
En effet, j'ai décidé que l'application, c'était l'application et, l'OS, ben c'était l'OS. Et qu'une application qui exige de l'OS de couvrir ou découvrir une zone de son interface, c'était une exigence irresponsable.
Après tout ? On a une option SystemMenu, elle ne crashe pas. On peut resizer : c'est l'utilisateur qui décide avec sa souris, ou bien c'est l'application qui demande. Mais une application qui exige, c'est envoyer des utilisateurs au goulag.
C'est comme ça qu'on se retrouve avec des artifacts, sans l'heure, sans son niveau de batterie, avec sa SysTray qui déconne, et surtout, c'est comme ça qu'on dicerne une application de chez Symantec d'une autre application.
Donc le resizing, la seule chose qu'il faut se contraindre à faire c'est de le détecter, de le mesurer et de l'enregistrer.
Par contre, le scrolling, on va se faire un plaisir de le prendre en main. Et puisque le sujet c'est "screen" qui signifie thématiquement << Ecran avec accélération matérielle >>, sur le plan de l'affichage, on ne va pas en laisser une goutte à l'OS qui va rester se débrouiller à afficher l'heure, etc...
Alors il y a un << mais >> technique : que deviennent ExamineMouse() et ExamineKeyboard() lorsque l'on a fourré son écran fenêtré, accéléré, resizable, mouvable, etc... dans la redirection d'un handle de gadget ?
Re: Ouvrir un screen plus grand que la fenetre
Concernant nos deux fonctions vitales pour récupérer les états du clavier et de la souris, des indices nous viennent du Professeur Solex Abatari-Tuora, diplômé ès Sciences post-Fukushima :
<< Il est probable que vos deux fonctions ExamineKeyboard() et ExamineMouse() soient observables au téléscope à balayage coloscopique par interaction des écarts de branes, ou par effet tunnel.
- Des précisions plus terre à terre, Professeur Abatari-Tuora ?
- Oui... Mon premier est l'opposé de dehors...
Mon second est un célèbre poisson, au naturel, comme à la Catalane...
Mon 3ème est la lettre entre P et R...
Et mon tout est l'endroit où se cachent vos deux fonctions ExamineMouse() et ExamineKeyboard() une fois que vous avez fait les malins à ouvrir un screen accéléré dans un gadget.
- Merci Professeur. >>
Il semblerait donc que nos deux fonctions vitales pour trouver un clavier vivant et une souris qui fonctionne, soient dans une constellation trop chargée d'émotions pour tenter une routine classique en plein écran.
Nous allons donc appliquer un théorème efficace dans ces cas hostiles de force majeure. Découvrons... Le Théorème M.P.G., plus connu sous le nom de théorème multi-plateforme de la Gougoutte.
<< Il est probable que vos deux fonctions ExamineKeyboard() et ExamineMouse() soient observables au téléscope à balayage coloscopique par interaction des écarts de branes, ou par effet tunnel.
- Des précisions plus terre à terre, Professeur Abatari-Tuora ?
- Oui... Mon premier est l'opposé de dehors...
Mon second est un célèbre poisson, au naturel, comme à la Catalane...
Mon 3ème est la lettre entre P et R...
Et mon tout est l'endroit où se cachent vos deux fonctions ExamineMouse() et ExamineKeyboard() une fois que vous avez fait les malins à ouvrir un screen accéléré dans un gadget.
- Merci Professeur. >>
Il semblerait donc que nos deux fonctions vitales pour trouver un clavier vivant et une souris qui fonctionne, soient dans une constellation trop chargée d'émotions pour tenter une routine classique en plein écran.
Nous allons donc appliquer un théorème efficace dans ces cas hostiles de force majeure. Découvrons... Le Théorème M.P.G., plus connu sous le nom de théorème multi-plateforme de la Gougoutte.
Re: Ouvrir un screen plus grand que la fenetre
Ollivier, si je puis me permettre, tu papotes beaucoup (en etant plusieurs fois HS) pour peu de resultat/code a proposer...
Mais ce n'est que mon avis hein !
Par exemple, sur ce sujet, je ne sais pas si tu as prouvé que l'on pouvais ou pas ouvrir un screen plus grand que la fenetre...
Mais ce n'est que mon avis hein !
Par exemple, sur ce sujet, je ne sais pas si tu as prouvé que l'on pouvais ou pas ouvrir un screen plus grand que la fenetre...
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Re: Ouvrir un screen plus grand que la fenetre
de plus le examine mouse est PResent Dans mon code LIGNE 87 (prend ton telescope LOL ) , puisque
d'ailleurs si tu avais testé mon code, tu aurai vu que lorsque le pointeur entre dans l'ecran un SPrite rouge Carré
sert de curseur a l'interieur de l'ecran , il suit donc bien la souris !
quand au examine Keyboard, ça peut aussi ce gerer .. t'as qu'a chercher un peu ...
ps revoici mon code (des fois que tu n'aurai pas pu le voir page precedente :
et la :
d'ailleurs si tu avais testé mon code, tu aurai vu que lorsque le pointeur entre dans l'ecran un SPrite rouge Carré
sert de curseur a l'interieur de l'ecran , il suit donc bien la souris !
quand au examine Keyboard, ça peut aussi ce gerer .. t'as qu'a chercher un peu ...
ps revoici mon code (des fois que tu n'aurai pas pu le voir page precedente :
Code : Tout sélectionner
;***********************************************
;Titre :Fenetre_ecran_scroll2
;Auteur : Dobro
;Date :13/05/2019
;Heure :21:29:33
;Version Purebasic : PureBasic 5.70 LTS (Windows - x64)
;Version de l'editeur :EPB V2.68
; Libairies necessaire : Aucune
;***********************************************
;- Window Constants
;
Declare open_window_0()
Enumeration
#win ; numero de la fenetre
#sprite ; numero du sprite
#Button_0 ; numero du bouton
#Gadget_scroll
#Container
#sprite_curseur
#timer
EndEnumeration
Structure sprite
num.l ; numero du sprite
x.l ; la coordonée x du sprites
Y.l ; la coordonée y du sprites
sensx.l ; le sens du deplacement x du sprite
sensy.l ; le sens du deplacement y du sprite
coul.l ; la couleur du sprite
EndStructure
Global nombre_de_Sprite=1000
Global Dim sprite.sprite(nombre_de_Sprite)
Global offset_x , offset_y ; determine la decalage entre pointeur souris et curseur Graphique
For i=20 To nombre_de_Sprite
sprite(i)\x=Random(1920) +32; on donne une coordonée de depart au sprite
sprite(i)\Y=Random(1080)+32
de=Random(1)
If de=1
sprite(i)\sensx=1 ; on donne un sens de deplacement par defaut au sprite
sprite(i)\sensy=1 ; ce chiffre correspond a la vitesse de deplacement du sprite
Else
sprite(i)\sensx=-1 ; on donne un sens de deplacement par defaut au sprite
sprite(i)\sensy=1 ; ce chiffre correspond a la vitesse de deplacement du sprite
EndIf
sprite(i)\coul = RGB(Random(200)+50,Random(200)+50,Random(200)+50) ; attribut une couleur
Next i
;
InitSprite():initmouse()
Open_Window_0() ; appel de la procedure qui ouvre la fenetre
CreateSprite(#sprite_curseur,16,16)
StartDrawing(SpriteOutput(#sprite_curseur))
Box(0,0,16,16,$0000FF)
StopDrawing()
; ****** creation des sprites *********
For i=20 To nombre_de_Sprite
CreateSprite(i,16,16) ; creation d'une cellule vide (un sprite)
StartDrawing( SpriteOutput(i)) ; on va dessiner dans notre sprite un carre coloré
Box(1,1,16,16,sprite(i)\coul) ; voila le dessin du carre vert dans notre sprite
StopDrawing()
Next i
;**************************************
CreateSprite(300,32,32) ; creation d'une cellule vide (un sprite)
StartDrawing( SpriteOutput(300)) ; on va dessiner dans notre sprite un carre coloré
circle(1,1,16,rgb(0,255,0)) ; voila le dessin du carre vert dans notre sprite
StopDrawing()
;
;
Repeat ; boucle principale , qui gere les affichages dans l'ecran graphique et les evenement de la fenetre
ExamineMouse()
select WaitWindowEvent(50)
; ************************* Les Gadgets *******************************************************
Case #PB_Event_CloseWindow
End
Case #PB_Event_SizeWindow
Largeur = WindowWidth(#win, #PB_Window_InnerCoordinate)
Hauteur = WindowHeight(#win, #PB_Window_InnerCoordinate)
ResizeGadget(#Button_0,#Pb_ignore,Hauteur-88,#Pb_ignore,#Pb_ignore)
ResizeGadget(#Gadget_scroll,#Pb_ignore,#Pb_ignore,largeur-224,Hauteur-168)
Case #PB_Event_Timer
If EventTimer() = #timer
; ******************** Sprite en mouvement **************************
For i=20 to nombre_de_Sprite
sprite(i)\x=sprite(i)\x+sprite(i)\sensx
sprite(i)\y=sprite(i)\y+sprite(i)\sensy
if sprite(i)\x<=0 or sprite(i)\x>=1920
sprite(i)\sensx=-sprite(i)\sensx
Endif
if sprite(i)\y<=0 or sprite(i)\y>=1080
sprite(i)\sensy=-sprite(i)\sensy
Endif
DisplaySprite(i,sprite(i)\x,sprite(i)\Y) ; Affiche les Sprites
compteur=compteur+1
if compteur=10
compteur=1
;WindowEvent(); SI actif, on a le scroll fluide mais plus la reactivité du bouton !
Endif
Next i
; ce sprite indique la coordonée 1920x1080 pour repere(quart de rond Vert)
DisplaySprite(300,1920-32,1080-32)
FlipBuffers()
ClearScreen(0)
Endif
Case #PB_Event_Gadget
Select EventGadget()
Case #Button_0
Debug "appuis sur le bouton ok"
;End
EndSelect
EndSelect
;- *****************************************************************************************************
;- *************************** Gestion de la souris et de son Sprite *********************************************************
if WindowMouseX(#win)<gadgetWidth(#Gadget_scroll) and WindowMouseY(#win)<GadgetHeight(#Gadget_scroll) ; on est dans l'ecran ???
If WindowMouseX(#win)>GadgetX(#Gadget_scroll) and WindowMouseY(#win)>GadgetY(#Gadget_scroll) ; on est dans l'ecran !
; showcursor_(0) ; Dans l'ecran on affiche le Sprite et efface le curseur souris Windows (api window)
StartDrawing(WindowOutput(#win))
FrontColor(RGB(255,255,255))
DrawingMode(1)
DrawText(80,80,"Position de la souris = " + Str(WindowMouseX(#win)) + " / " + Str(WindowMouseY(#win)))
StopDrawing()
offset_x =GetGadgetAttribute(#Gadget_scroll, #PB_ScrollArea_X)
offset_Y=GetGadgetAttribute(#Gadget_scroll, #PB_ScrollArea_Y)
DisplaySprite(#sprite_curseur,WindowMouseX(#win)-70+offset_x ,WindowMouseY(#win)-70+offset_y) ; oui , alors on affiche le Sprite
Else ; non ! , donc on a quitté l'ecran (enfin.. on n'est plus dessus , car en mode fenetré on ne quitte jamais vraiment l'ecran.. puisqu'il est enfant d'une fenetre !!
; contrairement au mode Full Screen()
;showcursor_(1) ; hors de l'ecran on affice le curseur Souris window mais pas le sprite (api window)
Endif
EndIf
;- ***********************************************************************************************************************
Until Event = #PB_Event_CloseWindow ; End of the event loop
End
;
;- ******************** Zone des Procedures ********************************
Procedure Open_Window_0()
If OpenWindow(#win, 363, 117, 1024, 768, "test", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar ) ; on ouvre une fenetre
ButtonGadget(#Button_0, 10, 680, 100, 30, "ok") ; voila le bouton
AddWindowTimer(#win, #timer, 30)
ScrollAreaGadget(#Gadget_scroll, 50, 50, 800, 600,1920,1080,1,#PB_ScrollArea_Flat) ; dans un scroll AREA
ContainerGadget(#Container,10,10,1920,1080,#PB_Container_Double) ; on met un container
OpenWindowedScreen(gadgetID(#Container), 1, 1, 1920, 1080, 0, 1, 1) ; et on creer un ecran graphique dedans
CloseGadgetList()
CloseGadgetList()
EndIf
EndProcedure
; Epb
et la :
pour repondre a ta charade , c'est dans TON Cul !Ollivier a écrit :Concernant nos deux fonctions vitales pour récupérer les états du clavier et de la souris, des indices nous viennent du Professeur Solex Abatari-Tuora, diplômé ès Sciences post-Fukushima :
<< Il est probable que vos deux fonctions ExamineKeyboard() et ExamineMouse() soient observables au téléscope à balayage coloscopique par interaction des écarts de branes, ou par effet tunnel.
- Des précisions plus terre à terre, Professeur Abatari-Tuora ?
- Oui... Mon premier est l'opposé de dehors...
Mon second est un célèbre poisson, au naturel, comme à la Catalane...
Mon 3ème est la lettre entre P et R...
Et mon tout est l'endroit où se cachent vos deux fonctions ExamineMouse() et ExamineKeyboard() une fois que vous avez fait les malins à ouvrir un screen accéléré dans un gadget.
- Merci Professeur. >>
Il semblerait donc que nos deux fonctions vitales pour trouver un clavier vivant et une souris qui fonctionne, soient dans une constellation trop chargée d'émotions pour tenter une routine classique en plein écran.
Nous allons donc appliquer un théorème efficace dans ces cas hostiles de force majeure. Découvrons... Le Théorème M.P.G., plus connu sous le nom de théorème multi-plateforme de la Gougoutte.
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Re: Ouvrir un screen plus grand que la fenetre
Oh non !
J'abrège l'introduction et poste mon code...
J'abrège l'introduction et poste mon code...
Re: Ouvrir un screen plus grand que la fenetre
Sans ExamineMouse() ni ExamineKeyboard() qui plantent selon les OS.
Contient l'interface semblable à celle pour OpenGLGadget(), donc accès multi-écran, multi-fenêtres.
Merci à Christophe d'avoir eu l'idée : ne pas hésiter à apporter un retour si petite config pour optimisation.
Contient l'interface semblable à celle pour OpenGLGadget(), donc accès multi-écran, multi-fenêtres.
Merci à Christophe d'avoir eu l'idée : ne pas hésiter à apporter un retour si petite config pour optimisation.
Code : Tout sélectionner
;****************************************************************************************************************************************************************************************************************
Structure WinScrDims
realW.I ; Largeur (zone réelle)
realH.I ; Hauteur
ViewX.I ; X (Coordonnées de la visu dans l'écran)
ViewY.I ; Y
ViewW.I ; Largeur
ViewH.I ; Hauteur
OffsetX.I ; X (Coordonnées de la visu dans la zone réelle)
OffsetY.I ; Y
OffMaxX.I
OffMaxY.I
OffX.I
OffY.I
hScale.D
vScale.D
Partial.I ; Drapeau d'états partiels des dimensions. Bit 0 = état partiel horizontal. Bit 1 = état partiel vertical.
BarThickness.I ; Epaisseur des bordures de scrolling
hSlideX.I
hSlideY.I
hSlideW.I ; Largeur de la zone de glissement de la barre horizontale de scrolling
hSlideH.I
vSlideX.I
vSlideY.I
vSlideH.I ; Hauteur de la zone de glissement de la barre verticale de scrolling
vSlideW.I
hBarX.I
hBarY.I
hBarW.I ; Largeur de la barre horizontale de scrolling
hBarH.I
vBarX.I
vBarY.I
vBarW.I
vBarH.I ; Hauteur de la barre verticale de scrolling
EndStructure
Structure WinScr
SubSys.I ; Handle sous-système
Win.I ; Numéro de fenêtre de visu
WinFlags.I ; Configuration de la fenêtre de visu
Img.I ; Numéro d'image de visu
Ggt.I ; Numéro de gadget (ImageGadget) de visu
Scr.I ; Numéro/handle d'écran / de visu
cWin.I ; Numéro de fenêtre (canvas)
cGgt.I ; Numéro de gadget (canvas)
inKey.S ; Touche clavier (local)
inText.S ; Texte clavier
Array CharKey.I(255) ; Tableau des appuis direct de touche
Ev.I ; Evènement GUI OS
EvWin.I ; Fenêtre concernée par un évènement
EvType.I ; Type d'évènement
msBts.I ; Etat des boutons de la souris
msWheelD.I ; Etat de l'évolution de la molette de la souris
msWheel.I ; Etat de la molette de la souris
msDeskX.I ; X (coordonnées de la souris dans le bureau)
msDeskY.I ; Y
msOn.I ; Etat de présence de la souris au-dessus de la visu
msOn0.I ; Ancien état de présence de la souris au-dessus de la visu
msOnExtra.I ; Etat des boutons de la souris quand celle-ci a quitté la visu malgré le maintien appuyé
msX.I ; X (coordonnées de la souris dans la vue graphique
msY.I ; Y
msDrag.I
msDragX.I
msDragY.I
Array LineSp.I(7) ; N° des sprites pour le tracé des lignes (8 couleurs)
Dims.WinScrDims
EndStructure
Declare WinScrDims(*WS.WinScr)
Procedure Extrema(*a.Integer, min, max)
If *a\I < Min
*a\I = Min
EndIf
If *a\I > Max
*a\I = Max
EndIf
;
EndProcedure
Procedure WinScrOpen(WinX.I = 100, WinY.I = 100, WinW.I = 400, WinH.I = 300, WinT.S = "", WinF.I = 0)
Define *WS.WinScr = AllocateStructure(WinScr)
*WS\SubSys = InitSprite()
*WS\WinFlags = WinF
*WS\WinFlags | #PB_Window_SystemMenu
*WS\WinFlags | #PB_Window_SizeGadget
*WS\WinFlags | #PB_Window_MaximizeGadget
*WS\WinFlags | #PB_Window_MinimizeGadget
*WS\Win = OpenWindow(#PB_Any, WinX, WinY, WinW, WinH, WinT, *WS\WinFlags)
ExamineDesktops()
*WS\Dims\RealW = DesktopWidth(0)
*WS\Dims\RealH = DesktopHeight(0)
*WS\Img = CreateImage(#PB_Any, *WS\Dims\RealW, *WS\Dims\RealH, DesktopDepth(0), RGBA(0, 0, 0, 0) )
*WS\Ggt = ImageGadget(#PB_Any, 0, 0, 1, 1, ImageID(*WS\Img) )
*WS\Scr = OpenWindowedScreen(GadgetID(*WS\Ggt), 0, 0, *WS\Dims\RealW, *WS\Dims\RealH)
StickyWindow(*WS\Win, #True)
*WS\cWin = OpenWindow(#PB_Any, 0, 0, 1, 1, "", #PB_Window_BorderLess, WindowID(*WS\Win) )
*WS\cGgt = CanvasGadget(#PB_Any, 0, 0, 1, 1, #PB_Canvas_Keyboard)
StickyWindow(*WS\cWin, #True)
*WS\Dims\BarThickness = 24
ProcedureReturn *WS
EndProcedure
Procedure In(x0, y0, x, y, w, h)
If x0 => x
If y0 => y
If x0 < x + w
If y0 < y + h
ProcedureReturn 1
EndIf
EndIf
EndIf
EndIf
EndProcedure
Procedure WinScrGetEvent(*WS.WinScr)
Repeat
*WS\Ev = WindowEvent()
*WS\EvWin = EventWindow()
*WS\EvType = 0
Select *WS\EvWin
Case *WS\Win
Select *WS\Ev
Case #PB_Event_CloseWindow
End
Case #PB_Event_SizeWindow, #PB_Event_MoveWindow, #PB_Event_Repaint
*WS\Dims\ViewX = WindowX(*WS\Win, #PB_Window_InnerCoordinate)
*WS\Dims\ViewY = WindowY(*WS\Win, #PB_Window_InnerCoordinate)
*WS\Dims\ViewW = WindowWidth(*WS\Win)
*WS\Dims\ViewH = WindowHeight(*WS\Win)
WinScrDims(*WS)
Extrema(@*WS\Dims\OffsetX, 0, *WS\Dims\OffMaxX)
Extrema(@*WS\Dims\OffsetY, 0, *WS\Dims\OffMaxY)
EndSelect
Case *WS\cWin
Select *WS\Ev
Case #PB_Event_Gadget
*WS\EvType = EventType()
*WS\msBts = GetGadgetAttribute(*WS\cGgt, #PB_Canvas_Buttons)
*WS\msWheelD = GetGadgetAttribute(*WS\cGgt, #PB_Canvas_WheelDelta)
Select *WS\EvType
Case #PB_EventType_MouseWheel
*WS\msWheel + *WS\msWheelD
Case #PB_EventType_Input
*WS\inKey = Chr(GetGadgetAttribute(*WS\cGgt, #PB_Canvas_Input) )
*WS\inText + *WS\inKey
Case #PB_EventType_KeyDown
*WS\CharKey(GetGadgetAttribute(*WS\cGgt, #PB_Canvas_Key) ) = 1
Case #PB_EventType_KeyUp
*WS\CharKey(GetGadgetAttribute(*WS\cGgt, #PB_Canvas_Key) ) = 0
EndSelect
EndSelect
EndSelect
Until *WS\Ev = 0
*WS\msDeskX = DesktopMouseX()
*WS\msDeskY = DesktopMouseY()
*WS\msOn0 = *WS\msOn
*WS\msOn = 0
If *WS\msDeskX => *WS\Dims\ViewX
If *WS\msDeskY => *WS\Dims\ViewY
If *WS\msDeskX < *WS\Dims\ViewX + *WS\Dims\ViewW
If *WS\msDeskY < *WS\Dims\ViewY + *WS\Dims\ViewH
*WS\msOn = 1
EndIf
EndIf
EndIf
EndIf
If (*WS\msOn And Not *WS\msOn0) Or (*WS\msOn And (GetActiveWindow() <> *WS\cWin) )
HideWindow(*WS\cWin, #False)
SetActiveGadget(*WS\cGgt)
EndIf
If Not *WS\msOn And *WS\msOn0
If *WS\msBts
*WS\msOnExtra = *WS\msBts
Else
HideWindow(*WS\cWin, #True)
EndIf
EndIf
If *WS\msOn Or *WS\msOnExtra
ResizeWindow(*WS\cWin, *WS\msDeskX, *WS\msDeskY, #PB_Ignore, #PB_Ignore)
EndIf
*WS\msX = *WS\msDeskX - *WS\Dims\ViewX
*WS\msY = *WS\msDeskY - *WS\Dims\ViewY
If *WS\msBts = 0 And *WS\msOn = 0
*WS\msOnExtra = 0
HideWindow(*WS\cWin, #True)
EndIf
EndProcedure
Structure Graphic
*WS
Array CharFont.I(80)
Array CharS.I(80, 255)
Array CharW.I(80, 255)
Array CharH.I(80, 255)
MouseImage.I
MouseSprite.I
EndStructure
Procedure GraphicCreate(*WS)
Define *This.Graphic = AllocateMemory(SizeOf(Graphic) )
InitializeStructure(*This, Graphic)
*This\WS = *WS
ProcedureReturn *This
EndProcedure
Procedure GraphicInitFont(*This.Graphic, FontName.S, SizeList.S)
Define SizeSize = CountString(SizeList, ";")
Dim Size.I(SizeSize)
For K = 0 To SizeSize
Size(K) = Val(StringField(SizeList, 1 + K, ";") )
Next
For K = 0 To SizeSize
J = Size(K)
*This\CharFont(J) = LoadFont(#PB_Any, FontName, J)
Next
StartDrawing(ScreenOutput() )
For K = 0 To SizeSize
J = Size(K)
DrawingFont(FontID(*This\CharFont(J) ) )
For I = 1 To 255
*This\CharW(J, I) = TextWidth(Chr(I) )
If *This\CharW(J, I) = 0
*This\CharW(J, I) = 1
EndIf
*This\CharH(J, I) = TextHeight(Chr(I) )
Next
Next
StopDrawing()
For K = 0 To SizeSize
J = Size(K)
For I = 1 To 255
*This\CharS(J, I) = CreateSprite(#PB_Any, *This\CharW(J, I), *This\CharH(J, I), #PB_Sprite_AlphaBlending)
StartDrawing(SpriteOutput(*This\CharS(J, I) ) )
DrawingFont(FontID(*This\CharFont(J) ) )
DrawingMode(#PB_2DDrawing_AllChannels)
DrawText(0, 0, Chr(I), RGBA(0, 0, 0, 255), RGBA(255, 255, 255, 0) )
StopDrawing()
Next
Next
EndProcedure
Procedure GraphicDisplay(*This.Graphic, x, y, A$, Size, ColorAlpha, Angle = 0)
Define *WS.WinScr = *This\WS
Alpha = Alpha(ColorAlpha)
Color = RGB(Red(ColorAlpha), Green(ColorAlpha), Blue(ColorAlpha) )
Define AngleRad.F = Angle * #PI / 180.0
If Angle
For I = 1 To Len(A$)
A = Asc(Mid(A$, I, 1) )
If Angle
RotateSprite(*This\CharS(Size, A), Angle, #PB_Absolute)
EndIf
DisplayTransparentSprite(*This\CharS(Size, A), X - *WS\Dims\OffsetX, Y - *WS\Dims\OffsetY, Alpha, Color)
X + (*This\CharW(Size, A) * Cos(AngleRad) )
Y + (*This\CharW(Size, A) * Sin(AngleRad) )
Next
Else
For I = 1 To Len(A$)
A = Asc(Mid(A$, I, 1) )
RotateSprite(*This\CharS(Size, A), 0, #PB_Absolute)
DisplayTransparentSprite(*This\CharS(Size, A), X - *WS\Dims\OffsetX, Y - *WS\Dims\OffsetY, Alpha, Color)
X + *This\CharW(Size, A)
Next
EndIf
EndProcedure
Procedure LineCreate(*WS.WinScr)
For I = 0 To 7
*WS\LineSp(I) = CreateSprite(#PB_Any, 256, 4, #PB_Sprite_AlphaBlending)
If StartDrawing(SpriteOutput(*WS\LineSp(I) ) )
DrawingMode(#PB_2DDrawing_AllChannels)
W = OutputWidth()
H = OutputHeight()
Box(0, 0, W, H, RGBA(0, 0, 0, 0) )
BCr = I >> 2 & 1
BCg = I >> 1 & 1
BCb = I & 1
Cr = 255 * BCr
Cg = 255 * BCg
Cb = 255 * BCb
Box(0, 1, W, 2, RGBA(Cr, Cg, Cb, 255) )
StopDrawing()
EndIf
Next
EndProcedure
Procedure LineDisplay(xa.D, ya.D, xb.D, yb.D, SpriteN)
Define.D Ang, x0, y0, x1, y1, x2, y2, x3, y3, dx, dy
Ang = ATan2(xb - xa, yb - ya)
dx = Cos(Ang + #PI / 2.0) * 1.5
dy = Sin(Ang + #PI / 2.0) * 1.5
x0 = xa + dx
y0 = ya + dy
x1 = xb + dx
y1 = yb + dy
x2 = xb - dx
y2 = yb - dy
x3 = xa - dx
y3 = ya - dy
;TransformSprite(SpriteN, x0, y0, x1, y1, x2, y2, x3, y3)
;DisplayTransparentSprite(SpriteN, 0, 0)
TransformSprite(SpriteN, x3, y3, x2, y2, x1, y1, x0, y0)
DisplayTransparentSprite(SpriteN, 0, 0)
EndProcedure
Procedure CliffDisplay(*WS.WinScr, xa.D, ya.D, xb.D, yb.D)
LineDisplay(xa, ya, xb, ya, *WS\LineSp(7) )
LineDisplay(xa, ya, xa, yb, *WS\LineSp(7) )
LineDisplay(xb, ya, xb, yb, *WS\LineSp(0) )
LineDisplay(xa, yb, xb, yb, *WS\LineSp(0) )
EndProcedure
Procedure CliffDisplayWH(*WS.WinScr, x.D, y.D, w.D, h.D)
CliffDisplay(*WS, x, y, x + w - 1, y + h - 1)
EndProcedure
Procedure WinScrDims(*WS.WinScr)
With *WS\Dims
\Partial = 0
If \ViewW < \RealW
\Partial | 1
EndIf
If \ViewH < \RealH
\Partial | 2
EndIf
If \Partial & 1
If \Partial & 2
Thickness = \BarThickness
Else
Thickness = 0
EndIf
\hSlideX = 0
\hSlideY = \ViewH - \BarThickness
\hSlideW = \ViewW - Thickness
\hSlideH = \BarThickness
\hScale = \hSlideW / \RealW
\hBarX = \OffsetX * \hScale
\hBarY = \hSlideY
\hBarW = \ViewW * \hScale
\hBarH = \hSlideH
CliffDisplayWH(*WS, \hBarX, \hBarY, \hBarW, \hBarH)
Else
\hSlideX = 0
\hSlideY = 0
\hSlideH = 0
\hScale = 1.0
EndIf
If \Partial & 2
\vSlideX = \ViewW - \BarThickness
\vSlideY = 0
\vSlideW = \BarThickness
\vSlideH = \ViewH - \hSlideH
\vScale = \vSlideH / \RealH
\vBarX = \vSlideX
\vBarY = \OffsetY * \vScale
\vBarW = \vSlideW
\vBarH = \ViewH * \vScale
CliffDisplayWH(*WS, \vBarX, \vBarY, \vBarW, \vBarH)
Else
\vSlideX = 0
\vSlideY = 0
\vSlideW = 0
\vScale = 1.0
EndIf
\OffMaxX = (\hSlideW - \hBarW) / \hScale
\OffMaxY = (\vSlideH - \vBarH) / \vScale
If \Partial & 3
CliffDisplayWH(*WS, \vSlideX, \hSlideY, \vSlideW, \hSlideH)
EndIf
If In(*WS\MsX, *WS\MsY, \hBarX, \hBarY, \hBarW, \hBarH)
If *WS\msBts & 1
If *WS\msDrag = 0
*WS\msDrag | 1
*WS\msDragX = *WS\msX
*WS\msDragY = *WS\msY
\OffX = \OffsetX
\OffY = \OffsetY
EndIf
EndIf
EndIf
If *WS\msDrag & 1
If (*WS\msBts & 1) = 0
*WS\msDrag = 0
Else
\OffsetX = \OffX + ((*WS\msX - *WS\msDragX) / \hScale)
Extrema(@\OffsetX, 0, \OffMaxX)
EndIf
EndIf
If In(*WS\MsX, *WS\MsY, \vBarX, \vBarY, \vBarW, \vBarH)
If *WS\msBts & 1
If *WS\msDrag = 0
*WS\msDrag | 2
*WS\msDragX = *WS\msX
*WS\msDragY = *WS\msY
\OffX = \OffsetX
\OffY = \OffsetY
EndIf
EndIf
EndIf
If *WS\msDrag & 2
If (*WS\msBts & 1) = 0
*WS\msDrag = 0
Else
\OffsetY = \OffY + ((*WS\msY - *WS\msDragY) / \vScale)
Extrema(@\OffsetY, 0, \OffMaxY)
EndIf
EndIf
EndWith
EndProcedure
CompilerIf #PB_Compiler_IsMainFile ; Exemple
Define *WS.WinScr = WinScrOpen(100, 100, 276, 350)
Define *GR.Graphic = GraphicCreate(*WS)
GraphicInitFont(*GR, "verdana", "12;20")
Size = 8
CreateSprite(1, Size, Size, #PB_Sprite_AlphaBlending)
If StartDrawing(SpriteOutput(1) )
W = OutputWidth()
H = OutputHeight()
W2 = W / 2
W4 = W / 4
W8 = W / 8
DrawingMode(#PB_2DDrawing_AllChannels)
Box(0, 0, W, H, RGBA(0, 0, 0, 0) )
Box(W4, W4, W4, W4, RGBA(0, 0, 0, 255) )
Box(W4, W2, W4, W4, RGBA(0, 0, 255, 255) )
Box(W2, W4, W4, W4, RGBA(0, 255, 0, 255) )
Box(W2, W2, W4, W4, RGBA(0, 255, 255, 255) )
StopDrawing()
EndIf
Size = 8
CreateSprite(2, Size, Size, #PB_Sprite_AlphaBlending)
If StartDrawing(SpriteOutput(2) )
W = OutputWidth()
H = OutputHeight()
DrawingMode(#PB_2DDrawing_AllChannels)
Box(0, 0, W, H, RGBA(0, 0, 0, 0) )
Box(W4, W4, W4, W2, RGBA(0, 0, 0, 255) )
Box(W2, W4, W4, W2, RGBA(0, 0, 0, 255) )
StopDrawing()
EndIf
Size = 8
CreateSprite(3, Size, Size, #PB_Sprite_AlphaBlending)
If StartDrawing(SpriteOutput(3) )
W = OutputWidth()
H = OutputHeight()
DrawingMode(#PB_2DDrawing_AllChannels)
Box(0, 0, W, H, RGBA(0, 0, 0, 0) )
Box(W4, W4, W4, W2, RGBA(0, 0, 0, 0) )
Box(W2, W4, W4, W2, RGBA(255, 0, 0, 255) )
StopDrawing()
EndIf
Size = 8
CreateSprite(4, Size, Size, #PB_Sprite_AlphaBlending)
If StartDrawing(SpriteOutput(4) )
W = OutputWidth()
H = OutputHeight()
DrawingMode(#PB_2DDrawing_AllChannels)
Box(0, 0, W, H, RGBA(255, 255, 255, 255) )
StopDrawing()
EndIf
LineCreate(*WS)
Repeat
WinScrGetEvent(*WS)
ClearScreen(RGB(0, 0, 0) )
SpriteQuality(#PB_Sprite_NoFiltering)
ClipSprite(1, W2-1, W2-1, 2, 2)
x = *WS\Dims\RealW
y = *WS\Dims\RealH
TransformSprite(1, 0 - *WS\Dims\OffsetX, 0 - *WS\Dims\OffsetY, x - *WS\Dims\OffsetX, 0 - *WS\Dims\OffsetY, x - *WS\Dims\OffsetX, y - *WS\Dims\OffsetY, 0 - *WS\Dims\OffsetX, y - *WS\Dims\OffsetY)
SpriteQuality(#PB_Sprite_BilinearFiltering)
DisplaySprite(1, 0, 0)
GraphicDisplay(*GR, 0, 0, "Théorème multi-plateforme de la Gougoutte de... Canvas", 20, RGBA(63, 127, 255, 255) )
If *WS\msOn Or *WS\msOnExtra
c = RGBA(255, 159, 255, 255)
Else
c = RGBA(63, 91, 191, 255)
EndIf
GraphicDisplay(*GR, 0, 64, "Texte = «" + *WS\inText + "»", 20, c)
For Y = 0 To 15
For X = 0 To 15
GraphicDisplay(*GR, X * 16, Y * 16 + 96, Str(*WS\CharKey(Y * 16 + X) ), 12, c)
Next
Next
GraphicDisplay(*GR, 0, 352, "Boutons souris : " + RSet(Bin(*WS\msBts), 3, "0"), 20, c)
GraphicDisplay(*GR, 0, 384, "Molette souris : " + Str(*WS\msWheel), 20, c)
GraphicDisplay(*GR, 0, 416, "Position souris : " + Str(*WS\msX) + " x " + Str(*WS\msY), 20, c)
GraphicDisplay(*GR, 0, 448, "Horloge : " + Str(ElapsedMilliseconds() ), 20, c)
GraphicDisplay(*GR, 0, 480, Str(*WS\Dims\OffsetX), 20, c)
WinScrDims(*WS)
FlipBuffers()
ForEver
CompilerEndIf
Re: Ouvrir un screen plus grand que la fenetre
j'ai bien un peut laché Pb , mais j'ai JAMAIS entendu parler de ça !Ollivier a écrit :Sans ExamineMouse() ni ExamineKeyboard() qui plantent selon les OS.
par contre , je suis pas sur que d'utiliser la gestion de la souris et du clavier par le canvaGadget soit bien opportun ...
mais bon ... pourquoi pas... surtout que je crois me rappeler que sous Linux, la souris c'est deja galere d'entrée de jeux
par contre tes ascenseurs , ils partent au camping paradis ...
je reste persuadé, que l'ideal est quand meme de coder selon le systeme d'exploitation
et sur windows on a les api, et le callback qui va avec
si je compte en qualité de longueur de code , je prefere le miens ....
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Re: Ouvrir un screen plus grand que la fenetre
De toute façon, t'as mis une soufflée, c'est pas débattable. C'est juste que les bandes blanches qui apparaissent quand tu scrolles dans ton code, c'est pas contrôlable.
Alors j'ai préféré l'aventure : refaire le système, c'est plus contrôlable, et ça ouvre d'autres possibilités.
Dans ton code, tu rajoutes un timer. Si je le pique pour synchro le redimensionnement, si ça se trouve, ça va fonctionner. Et je ne sais pas pourquoi, l'écran graphique au moins sous MDI et sous Gadget Image annule ExamineMouse et Keyboard (ils retournent 0). Pareil avec le container : pas souris pas clavier. Dès que je lui indique WindowId au lieu de GadgetId et que la fenêtre n'est pas sorti d'un MDI, ça marche.(Windows 8.1 PB5.50)
La réalité, c'est qu'on a pondu deux codes bien différents, et ça montre les choix possibles.
Le gros regret sans ExamineMouse() c'est l'absence de deltaX et deltaY en natif : c'est contraignant et ça alourdit le code. Le mieux serait de faire une exception et récupérer les 2 ou 3 APIs pour déplacer la souris du bureau.
T'as un ScreenShoot des ascenseurs qui fuguent en camping ? C'est d'office? T'es sous W10 ? Moi, à part un bug lors de la maximization, ils se présentent et se déplacent parfaitement...
Alors j'ai préféré l'aventure : refaire le système, c'est plus contrôlable, et ça ouvre d'autres possibilités.
Dans ton code, tu rajoutes un timer. Si je le pique pour synchro le redimensionnement, si ça se trouve, ça va fonctionner. Et je ne sais pas pourquoi, l'écran graphique au moins sous MDI et sous Gadget Image annule ExamineMouse et Keyboard (ils retournent 0). Pareil avec le container : pas souris pas clavier. Dès que je lui indique WindowId au lieu de GadgetId et que la fenêtre n'est pas sorti d'un MDI, ça marche.(Windows 8.1 PB5.50)
La réalité, c'est qu'on a pondu deux codes bien différents, et ça montre les choix possibles.
Le gros regret sans ExamineMouse() c'est l'absence de deltaX et deltaY en natif : c'est contraignant et ça alourdit le code. Le mieux serait de faire une exception et récupérer les 2 ou 3 APIs pour déplacer la souris du bureau.
T'as un ScreenShoot des ascenseurs qui fuguent en camping ? C'est d'office? T'es sous W10 ? Moi, à part un bug lors de la maximization, ils se présentent et se déplacent parfaitement...
Re: Ouvrir un screen plus grand que la fenetre
https://www.purebasic.fr/french/posting ... =203911des le lancement du code j'ai :
et si j’agrandis la fenetre j'ai :
systématiquement ... les ascenseurs n'apparaissent JAMAIS......(enfin ils sont transparent) ..ils fonctionnent si on les cherches... mais
on le les voient pas ... (surtout les boutons en haut et en bas de chaque ascenseurs)
je suis Sur Windows 10 a jour 1809...
PS: j'ai eu un doute, je pensais que cela pouvais venir de "WindowBlind" un changeur de look de windows 10 (voir le look de mes fenetres dans les captures)
mais meme si WindowBlind est desactivé, j'ai toujours le probleme
et si j’agrandis la fenetre j'ai :
systématiquement ... les ascenseurs n'apparaissent JAMAIS......(enfin ils sont transparent) ..ils fonctionnent si on les cherches... mais
on le les voient pas ... (surtout les boutons en haut et en bas de chaque ascenseurs)
je suis Sur Windows 10 a jour 1809...
PS: j'ai eu un doute, je pensais que cela pouvais venir de "WindowBlind" un changeur de look de windows 10 (voir le look de mes fenetres dans les captures)
mais meme si WindowBlind est desactivé, j'ai toujours le probleme
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Re: Ouvrir un screen plus grand que la fenetre
M'enfin Zorro... C'est design : ils SONT transparents !!! Je vais te mettre une option d'opacité si ça te semble trop furtif...
Et tu veux des flèches en plus... Râh... Allez... Ça me fait plaisir : je vais rajouter ça...
Mets "opengl" en sous-système, et là, tu verras que ça fait de la vraie bouse à critiquer ! Heureusement Demivec a posté un code de rappel et, a priori ça fonctionne impeccablement.
Et tu veux des flèches en plus... Râh... Allez... Ça me fait plaisir : je vais rajouter ça...
Mets "opengl" en sous-système, et là, tu verras que ça fait de la vraie bouse à critiquer ! Heureusement Demivec a posté un code de rappel et, a priori ça fonctionne impeccablement.
Re: Ouvrir un screen plus grand que la fenetre
C'est un week-end de trois jours ?
On va en profiter pour fignoler....
On va en profiter pour fignoler....
Re: Ouvrir un screen plus grand que la fenetre
7 heures pour redémarrer une vieille bécane (par contre 36W, vieu mais pas gourmand, malgré 11 ans d'âge)
- charger la batterie (avec contrôleur pour vérifier les tensions et éviter de mettre le feu, et forçage des premiers milliwatts)
- remettre à l'heure
- virer le réseau
- mettre le bon écran de 30W en principal
- remettre un clavier qui n'a pas la vache folle quand un véhicule passe à côté
Je suis vraiment pas à la page.
Bon, il y a une version 5.50 sur XP, c'est un 1 GHz mono-core 20 Giga de HD, 1 Giga dont 64 Méga pour la vidéo.
On peut considérer ça comme une petite configuration. Si mes souvenirs sont bons, c'est 256 sprites non alpha ou 9 sprites alpha superposés (ce qui est peu, très peu) qui s'affichent sans ralentir. Au-delà, ça rame. Notez qu'en parallèle, en utilisant la lib Ogre, c'est un peu plus de polygones, mais pas tant que ça...
Donc je repars de zéro. Je vais récupérer la fonction WinScrOpen() et refaire une structure WinScr que WinScrOpen() va initialiser.
WinScrOpen() pour << WindowedScreenOpen() >>
Après, libre à chacun de nommer ses fonctions et structures comme il veut...
- charger la batterie (avec contrôleur pour vérifier les tensions et éviter de mettre le feu, et forçage des premiers milliwatts)
- remettre à l'heure
- virer le réseau
- mettre le bon écran de 30W en principal
- remettre un clavier qui n'a pas la vache folle quand un véhicule passe à côté
Je suis vraiment pas à la page.
Bon, il y a une version 5.50 sur XP, c'est un 1 GHz mono-core 20 Giga de HD, 1 Giga dont 64 Méga pour la vidéo.
On peut considérer ça comme une petite configuration. Si mes souvenirs sont bons, c'est 256 sprites non alpha ou 9 sprites alpha superposés (ce qui est peu, très peu) qui s'affichent sans ralentir. Au-delà, ça rame. Notez qu'en parallèle, en utilisant la lib Ogre, c'est un peu plus de polygones, mais pas tant que ça...
Donc je repars de zéro. Je vais récupérer la fonction WinScrOpen() et refaire une structure WinScr que WinScrOpen() va initialiser.
WinScrOpen() pour << WindowedScreenOpen() >>
Après, libre à chacun de nommer ses fonctions et structures comme il veut...
Re: Ouvrir un screen plus grand que la fenetre
Euh... Tu as quelques précisions ? Je vais reprendre ce code plus haut et le garnir un peu...Zorro a écrit :surtout que je crois me rappeler que sous Linux, la souris c'est deja galere d'entrée de jeux
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Ouvrir un screen plus grand que la fenetre
L'art de déterrer un sujet de 2019. Ollivier a envie de discuter
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Ouvrir un screen plus grand que la fenetre
@ZorroOllivier a écrit :Sans ExamineMouse() ni ExamineKeyboard() qui plantent selon les OS.
Contient l'interface semblable à celle pour OpenGLGadget(), donc accès multi-écran, multi-fenêtres.
Merci à Christophe d'avoir eu l'idée : ne pas hésiter à apporter un retour si petite config pour optimisation.
Le code qui suit cette citation de ma part : ça me semble faux ta remarque :
J'avais fait en sorte que, justement, dans ce code, ça glisse ce problème. Alors, je souhaite des précisions. Pas de code, juste des explications pour déterminer si ce code a besoin d'être aussi adapté à ce sujet que tu informes.Zorro a écrit :surtout que je crois me rappeler que sous Linux, la souris c'est deja galere d'entrée de jeux