brossden évoquait un virus. Bien que je doute, ça me laisse perplexe.
Ce code exécuté se quitte avec la touche [Echap].
Je trifouillait les divers sources et je reteste celui-là que j'avais abandonné il y a 1 ou 2 mois, suite à un comportement complètement hallucinant.
Et là, même délire ! Ce code me provoque un truc de psychopathe !
Je suis en version pureBasic démo 5.73 LTS X64. Le source a été déplacé (changement de répertoire) : même effet.
Je suis sous Windows 10 sans réseau.
Ce code fonctionnait bien, puis soudain, sans que j'ai pu isoler les causes, il me fait le truc de fada suivant :
J'appuie sur F5. Dès que je veux bouger la souris, le curseur système de la souris apparait sur l'icône du réseau de la barre des tâches de W10. La bulle pop up de W10 s'affiche (<< Non connecté - La communication sans fil est désactivée. >>) Je bouge physiquement la souris (pour retourner par exemple appuyer sur la croix du KillProgram de l'IDE de pureBasic, mais, et c'est là que j'hallucine : le curseur de la souris "frétille" sur l'icône de réseau dans la barre des tâches !!! Je vous le jure !!! Impossible de bouger la souris de cet endroit !! Le délire s'arrête en appuyant sur [Echap] comme programmé dans ce code, et là, retour complet à la normale. Aucun problème de ressource CPU, rien, que dalle !!! Et c'est CE programme, ce programme-là qui n'a rien à voir avec le réseau !
Aidez-moi les gars ! Dites-moi que vous savez quelle paire de glaouïes j'ai, complètement par mégarde, saigné dans le code suivant pour déclencher un tel délire que je n'arrive absolument pas à analyser ou reproduire.
Avant de tester ce code avec F5, surtout, coupez votre réseau ! ! ! (Ce n'est pas un canular)
Code : Tout sélectionner
Global *screen
Global *keyboard
Global *mouse
Structure screen
w.I
h.I
EndStructure
Procedure screenCreate(windowed.I = 0, window.I = -1)
Define *this.screen = AllocateMemory(SizeOf(screen) )
With *this
InitSprite()
InitKeyboard()
InitMouse()
If windowed
\w = WindowWidth(window)
\h = WindowHeight(window)
OpenWindowedScreen(WindowID(window), 0, 0, \w, \h)
Else
ExamineDesktops()
\w = DesktopWidth(0)
\h = DesktopHeight(0)
OpenScreen(\w, \h, 32, "", #PB_Screen_SmartSynchronization)
EndIf
EndWith
*screen = *this
EndProcedure
Structure mouse
sprite.I
EndStructure
Procedure mouseCreate()
Define *this.mouse = AllocateMemory(SizeOf(mouse) )
With *this
\sprite = CreateSprite(#PB_Any, 16, 16)
If StartDrawing(SpriteOutput(\sprite) )
w = OutputWidth()
h = OutputHeight()
Box(0, 0, w, h, RGB(0, 0, 0) )
Box(1, 1, w - 2, h - 2, RGB(255, 255, 255) )
StopDrawing()
EndIf
TransformSprite(\sprite, 0, 0, 23, 23, 15, 23, 0, 31)
EndWith
*mouse = *this
EndProcedure
Structure main
Array sp.I(255)
Array spW.I(255)
Array spH.I(255)
EndStructure
Structure textSprite
Spr.I
X.I
Y.I
W.I
H.I
C1.I
C0.I
Alig.I
EndStructure
Global NewMap TextSprite.textSprite()
Procedure TextDraw(X, Y, W, H, Text.S, C1, C0, Alig = 1)
KeyPtr = FindMapElement(TextSprite(), Text)
If KeyPtr
With TextSprite()
Spr = \Spr
DisplaySprite(Spr, \X, \Y)
EndWith
Else
With TextSprite(Text)
Spr = CreateSprite(#PB_Any, W, H)
\Spr = Spr
\X = X
\Y = Y
\W = W
\H = H
\C1 = C1
\C0 = C0
If StartDrawing(SpriteOutput(Spr) )
Box(0, 1, W - 1, H - 1, C0)
DrawingMode(#PB_2DDrawing_Transparent)
If Alig = 1: TX = 0: EndIf
If Alig = 2: TX = W - TextWidth(Text): EndIf
If Alig = 3: TX = (W - TextWidth(Text) ) / 2: EndIf
DrawText(TX, 0, Text, C1)
StopDrawing()
EndIf
EndWith
EndIf
EndProcedure
Structure palSprite
Spr.I
x1.I
y1.I
x2.I
y2.I
C0.I
C1.I
cQ.I
gradFlag.I
EndStructure
Global NewMap PalSprite.palSprite()
Procedure DispLine(x1, y1, x2, y2, c0, c1 = -1, gradFlag = 1)
Define ccode.S
Define.D angle, dx, dy
If c1 = -1
cQ = 1
ccode = RSet(Hex(c0), 6, "0")
Else
cQ = 2
ccode = RSet(Hex(c0), 6, "0") + RSet(Hex(c1), 6, "0")
EndIf
KeyPtr = FindMapElement(PalSprite(), ccode)
If KeyPtr
With PalSprite()
Spr = \Spr
;ClipSprite(Spr, 1, 0, 2, 1)
;ClipSprite(Spr, 0, 1, 1, 2)
angle = ATan2(x1 - x2, y2 - y1) - (#PI / 2)
dx = Cos(angle)
dy = - Sin(angle)
TransformSprite(Spr, x1 + dx, y1 + dy, x2 + dx, y2 + dy, x2, y2, x1, y1)
SpriteQuality(\gradFlag)
DisplaySprite(Spr, 0, 0)
EndWith
Else
With PalSprite(ccode)
Spr = CreateSprite(#PB_Any, 2 * CQ, 1)
\Spr = Spr
\X1 = X1
\Y1 = Y1
\X2 = X2
\Y2 = Y2
\CQ = CQ
\C0 = C0
\C1 = C1
\gradFlag = gradFlag
If StartDrawing(SpriteOutput(Spr) )
If CQ = 1
Box(0, 0, 2, 1, C0)
Else
If CQ = 2
Box(0, 0, 2, 1, C0)
Box(2, 0, 2, 1, C1)
EndIf
EndIf
StopDrawing()
EndIf
EndWith
EndIf
EndProcedure
Procedure DispBox(x1, y1, x2, y2, c0, c1 = -1, gradFlag = 1)
Define ccode.S
If c1 = -1
cQ = 1
ccode = RSet(Hex(c0), 6, "0")
Else
cQ = 2
ccode = RSet(Hex(c0), 6, "0") + RSet(Hex(c1), 6, "0")
EndIf
ccode + RSet(Hex(x1), 4, "0") + RSet(Hex(y1), 4, "0") + RSet(Hex(x2), 4, "0") + RSet(Hex(y2), 4, "0")
KeyPtr = FindMapElement(PalSprite(), ccode)
If KeyPtr
With PalSprite()
Spr = \Spr
If \cQ = 2
;ClipSprite(Spr, 1, 0, 2, 1)
ClipSprite(Spr, 1, 0, 2, -2)
EndIf
TransformSprite(Spr, \x1, \y1, \x2, \y1, \x2, \y2, \x1, \y2)
SpriteQuality(\gradFlag)
DisplaySprite(Spr, 0, 0)
EndWith
Else
With PalSprite(ccode)
Spr = CreateSprite(#PB_Any, 2 * CQ, 1)
\Spr = Spr
\X1 = X1
\Y1 = Y1
\X2 = X2
\Y2 = Y2
\CQ = CQ
\C0 = C0
\C1 = C1
\gradFlag = gradFlag
If StartDrawing(SpriteOutput(Spr) )
If CQ = 1
Box(0, 0, 2, 1, C0)
Else
If CQ = 2
Box(0, 0, 2, 1, C0)
Box(2, 0, 2, 1, C1)
EndIf
EndIf
StopDrawing()
EndIf
EndWith
EndIf
EndProcedure
Procedure DispRect(x1, y1, x2, y2, c0)
DispLine(x1, y1, x2, y1, c0)
DispLine(x1, y1, x1, y2, c0)
DispLine(x2, y1, x2, y2, c0)
DispLine(x1, y2, x2, y2, c0)
EndProcedure
Procedure main()
Define.I win0 = OpenWindow(#PB_Any, DesktopScaledX(100), DesktopScaledY(100), DesktopScaledX(800), DesktopScaledY(600), "")
screenCreate(1, win0)
mouseCreate()
Define *ms.mouse = *mouse
Imax = Int(ScreenHeight() / 16) - 1
Repeat
Lap0 = Lap
Lap = ElapsedMilliseconds()
Delay(1) ; 100 hertz
ExamineKeyboard()
ExamineMouse()
TextDraw(0, 0, 64, 16, "Id", RGB(191, 191, 191), RGB(0, 127, 127), 3)
For I = 1 To Imax
Y = I * 16
TextDraw(0, Y, 64, 16, Str(I), RGB(191, 191, 191), RGB(0, 63, 127), 3)
Next
DispRect(100, 50, 300, 150, RGB(255, 255, 255) )
DispBox(100, 200, 300, 300, RGB(255, 255, 255) )
DispBox(100, 350, 300, 450, RGB(255, 0, 255), RGB(0, 255, 0) )
DisplaySprite(*ms\sprite, MouseX(), MouseY() )
FlipBuffers()
Cycle + 1
Until KeyboardPushed(#PB_Key_Escape) Or MouseButton(#PB_MouseButton_Right)
Repeat
Delay(1) ; 100 hertz
ExamineKeyboard()
ExamineMouse()
FlipBuffers()
Until Not MouseButton(#PB_MouseButton_Right)
EndProcedure
main()
; IDE Options = PureBasic 5.73 LTS (Windows - x64)
; CursorPosition = 185
; FirstLine = 167
; Folding = f-
; EnableXP