Page 1 sur 1

[R] Détruire proprement une fenêtre pour la refaire plus tard

Posté : mer. 01 juil. 2015 22:46
par sozary
Bonsoir!
Tout d'abord, il n'y avait plus de place pour le "d" dans le titre du sujet!

Ensuite, mon problème est le suivant:
J'ai deux fonctions:

Code : Tout sélectionner

Func _CursorCreate($hBitmap)
    ;curseur begin -------------------------------------------------------------------------------------------------------
    Global $gui = GUICreate('curs',200,200,MouseGetPos()[0],MouseGetPos()[1],$WS_POPUP, $WS_EX_LAYERED)
    GUISetBkColor($color, $gui)
    _WinAPI_SetLayeredWindowAttributes($gui, $color)
    GUISetState()
    $ImageSelec=_GDIPlus_GraphicsCreateFromHWND($gui)
    GUICtrlSetBkColor($ImageSelec, $GUI_BKCOLOR_TRANSPARENT)
    _GDIPlus_GraphicsDrawImageRect($ImageSelec,$hBitmap,0,0,200,200)
    Return $gui
;curseur end -------------------------------------------------------------------------------------------------------
EndFunc

Func _CursorDispose($hCurseur)
    GUIDelete($hCurseur)
EndFunc
La première se déclenche lors de l'appui sur un boutton, et me permet, comme mikell me l'a conseillé il y a longtemps, de déplacer la gui avec le curseur. J'ai donc une petite image qui suit ma souris, que je peux détruire quand je veux avec la deuxième fonction!

Problème: quand je veux ensuite réutiliser la première fonction, AutoIt me fait la tête et refuse de l'afficher...
Je sais que c'est un problème lier à gdi, lors du chargement de l'image sur la gui, et vous allez peut être me dire que gdi est inutile ici, mais je n'arrive pas à mettre une image transparente (donc en png) sans utiliser d'udf (icon.au3) utilisant aussi gdi+!

Merci d'avance pour d'avantage d'éclaircissement!

Re: [..] Détruire proprement un fenêtre pour la refaire plus

Posté : mer. 01 juil. 2015 23:11
par mikell
GUISetState(@SW_HIDE) ?

Re: [..] Détruire proprement un fenêtre pour la refaire plus

Posté : mer. 01 juil. 2015 23:16
par sozary

Code : Tout sélectionner

Func _CursorCreate($hBitmap)

    If $z<10 Then
        $scale=(256/((10-$z)/.3))/2
    ElseIf $z=10 Then
        $scale=256/2
    Else
        $scale=(256*(($z-10)/.3))/2
    EndIf

    ;curseur begin -------------------------------------------------------------------------------------------------------
    if WinExists("curs","") Then
        GUISetState(@SW_SHOW,$cursor)
        Return $cursor
    EndIf
    Global $gui = GUICreate('curs',$scale,$scale,MouseGetPos()[0],MouseGetPos()[1],$WS_POPUP, $WS_EX_LAYERED)

    GUISetBkColor($color, $gui)
    _WinAPI_SetLayeredWindowAttributes($gui, $color)
    GUISetState()
    WinSetTrans($gui,"",155)
    $ImageSelec=_GDIPlus_GraphicsCreateFromHWND($gui)
    GUICtrlSetBkColor($ImageSelec, $GUI_BKCOLOR_TRANSPARENT)
    _GDIPlus_GraphicsDrawImageRect($ImageSelec,$hBitmap,0,0,$scale,$scale)
    Return $gui
;curseur end -------------------------------------------------------------------------------------------------------
EndFunc

Func _CursorDispose($hCurseur)
    GUISetState(@SW_HIDE,$hCurseur)
EndFunc

;-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 
Sachant que le $cursor est défini en début de programme, et reçois la valeur de la fenêtre quand elle est créée, néanmoins ça ne fonctionne pas :(

Re: [..] Détruire proprement un fenêtre pour la refaire plus

Posté : mer. 01 juil. 2015 23:20
par sozary
Problème résolu, j'avais oublié de mettre un boléan à false :mrgreen: !
Du coup le guidelete() marche bien en fin de compte!

P-S: Juste Mikell, avec ta technique, l'image du gdi n'est plus visible quand on a utilisé un @sw_hide puis @sw_show !

Re: [R] Détruire proprement un fenêtre pour la refaire plus

Posté : mer. 01 juil. 2015 23:25
par mikell
C'est pour ça que j'avais mis un "?" :mrgreen:

Re: [R] Détruire proprement un fenêtre pour la refaire plus

Posté : mer. 01 juil. 2015 23:28
par sozary
:wink:

Re: [R] Détruire proprement un fenêtre pour la refaire plus

Posté : mer. 01 juil. 2015 23:53
par Tlem
sozary a écrit :Bonsoir!
Tout d'abord, il n'y avait plus de place pour le "d" dans le titre du sujet!
Voilà, je l'ai ajouté. ;)

Envoyé de mon appareil mobile avec Tapatalk.

Re: [R] Détruire proprement un fenêtre pour la refaire plus

Posté : jeu. 02 juil. 2015 07:58
par jguinch
Du coup, ça aurait été bien de mettre une fenêtre :mrgreen: