Page 1 sur 1

[..] Créer une GUICreate autre que rectangle ou carrée

Posté : ven. 07 déc. 2007 11:35
par MiXS
Bonjour a tous, (Heureux de retrouver le forum :wink: )
1- Voila je souhaiterais créer une GUICreate d'une autre forme (arrondi) que rectangle est-ce possible ?

2-Est-ce possible sinon de'integrer dans le GUICreate rectangle une forme arrondi ?

Merci de votre aide ! :D

Posté : ven. 07 déc. 2007 18:09
par sylvanie
oui oui.
voilà un vieille exple que j'avais fait il y a qq années, depuis j'ai amélioré le drag n drop de la GUI (remarquez qu'à l'époque _ispressed ne faisait pas parti des udf, et il fallait la recopier en local ^^, je pense qu'on l'enlevée modulo l'include) :

Code : Tout sélectionner

opt ( "GUIONEVENTMODE" , 1 )
#include <GUIConstants.au3>
;GUI
GUICreate ( "title" , 300 , 300 , 30 , 30 , $WS_POPUP , $WS_EX_LAYERED )
$B = GUICtrlCreateButton ( "TEST" , 100 , 100 , 50 , 50 , - 1 , 0x00000020 )
GuiCtrlSetOnEvent ( $B , "hello" )
$B2 = GUICtrlCreateButton ( "quit" , 200 , 100 , 50 , 50 , - 1 , 0x00000020 )
GuiCtrlSetOnEvent ( $B2 , "_exit" )
$inp = GUICtrlCreateInput ( "world" , 150 , 220 , 50 , 20 )
$n = GUICtrlCreatePic ( "Background1.gif" , 0 , 0 , 300 , 300 , - 1 , 0x00000020 )
GuiCtrlSetOnEvent ( $n , "_move" )
GUISetState ( @SW_SHOW )
GuiCtrlSetState ( $B , $GUI_FOCUS )
GuiCtrlSetState ( $B2 , $GUI_FOCUS )
GuiCtrlSetState ( $inp , $GUI_FOCUS )
GuiCtrlSetState ( $B , $GUI_FOCUS )
GUISetOnEvent ( $GUI_EVENT_CLOSE , "_Exit" )
while 1
Wend
func _exit ( )
Exit
EndFunc
Func Hello ( )
MsgBox ( 0 , "hello" , GUICtrlRead ( $inp ) )
EndFunc
func _move ( )
opt ( "GUIONEVENTMODE" , 0 )
$posw = WinGetPos ( "title" )
$poss = MouseGetPos ( )
$deltax = $poss[0] - $posw[0]
$deltay = $poss[1] - $posw[1]
Do
$msg = GUIGetMsg ( )
Until $msg == $GUI_EVENT_PRIMARYUP
$pos = MouseGetPos ( )
WinMove ( "title" , "" , $pos[0] - $deltax , $pos[1] - $deltay )
opt ( "GUIONEVENTMODE" , 1 )
EndFunc
Func _IsPressed ( $hexKey )
Local $aR , $bRv
$hexKey = '0x' & $hexKey
$aR = DllCall ( "user32" , "int" , "GetAsyncKeyState" , "int" , $hexKey )
If $aR[0] <> 0 Then
$bRv = 1
Else
$bRv = 0
EndIf
Return $bRv
EndFunc


ps1 : le background était un gif de la terre dont j'avais dégagé les bords en les rendant transparent, et donc cette GUI est "ronde" comme la terre. En réalité c'est un rectangel déguisé , mais la var $WS_EX_LAYERED fait que même si on clique dans la zone transparente, rien ne se passe


[ edit ] : finalement dans cette version on n'a plus besoin de _ispressed. Avant j'utilisait une touche pour déplacer la fenêtre, voilà voilà ...

Posté : ven. 07 déc. 2007 18:24
par MiXS
Ah ca fais plaisir de voir que l'on peut !
Merci Sylvanie ! :wink:

Posté : ven. 07 déc. 2007 19:17
par MiXS
Euh ...
J'ai essayé sur un script modifié mais je n'y arrive pas les boutons ne marchent pas :?
Si vous pouviez m'aider :wink:

Script :
MiXS Media Player version 1.1.au3
Image :
Image

Posté : ven. 07 déc. 2007 21:38
par sylvanie
mince, je ne trouve pas la lib GuiList.au3 qui pourtant à l'air connue ...
tu as un lien pour la télécharger stp ?

Posté : ven. 07 déc. 2007 22:06
par MiXS
Voici un lien mais c'est a toi de le creer :wink:

GuiList.au3

Tu selectionne tout et tu copie le tout dans autoit et tu le met dans le dossier AutoIt3/Include :wink:

Ps:Désolé je n'ai rien trouvé de mieux :?

Posté : sam. 08 déc. 2007 00:07
par Tlem
Si Si , il y à plus simple : GuiList.au3

Posté : sam. 08 déc. 2007 12:53
par sylvanie
Ok, je viens de l'intégrer, j'ai juste dû faire une fonction bouchon _IsClassName qui était inconue dans mon environnement.

En tout cas la lecture, pause, arrêt, avance rapide / recule et volume sonore ont l'aire de marcher

effectivement pour la progressbar, et le temps évalué c'est pas encore prêt.

j'ai rebasculer en transparence, et ai constaté qu'il faudra imposer des background aux controles de type listebox, edit ... sinon les fonds deviennent transparent.

reste à creuser

Posté : sam. 08 déc. 2007 13:20
par sylvanie
juste un ajout : tu devrais utiliser un slider vertical (maintenant que j'y pense je crois que t'avais poser la question avant le problème du site) :

Code : Tout sélectionner

GUICtrlCreateSlider (10,10,20,200,$TBS_VERT)
GUICtrlSetLimit(-1,100,0)   ; change min/max value
après tu lis la valeur, et tu interprètres la valeur comme un pourcentage du volume

Posté : sam. 08 déc. 2007 13:29
par ani
Pour créer une interface de forme non conventionnel (ronde, polygone, pyramide,....) on a la possibilité d'utiliser la dll GDI, celle-ci signifie Graphique disegn interface, les possibilités sont immense.

Pour cela on va faire appel a une fonction du user32, setwindowrgn (fixer fenêtre region), couplé par les fonctions du GDI.

Pour le reste il existe une bibliotheque Skin.au3, faite les recherche concernant ceux-ci.

Posté : sam. 08 déc. 2007 14:53
par MiXS
Merci a tous pour vos essai/réponses !
Mais sylvanie quand tu palre du slider je l'ai mis moi mais le son ne se regle pas ! :(
Comment faire ?


PS:j'essaye toujours de faire la forme au choix mais sans succès les boutons ne repondent plus !

Posté : dim. 09 déc. 2007 12:53
par sylvanie
lance la lecture d'un mp3, puis lance ce script pour le tester.
En gros, il suffit de mettre un évènement sur le slider lui même

Code : Tout sélectionner

#include <GUIConstants.au3>
GUICreate ( "slider" , 220 , 400 , 200 , 200 )
GUISetBkColor ( 0x00E0FFFF ) ; will change background color
SoundSetWaveVolume ( 50 )
$slider1 = GUICtrlCreateSlider ( 10 , 10 , 20 , 200 , $TBS_VERT )
GUICtrlSetLimit ( - 1 , 100 , 0 ) ; change min/max value
GUICtrlSetData ( - 1 , 50 )
;$button = GUICtrlCreateButton ( "Value?" , 75 , 70 , 70 , 20 )
GUISetState ( )
GUICtrlSetData ( $slider1 , 45 ) ; set cursor
$start = TimerInit ( )
Do
$n = GUIGetMsg ( )
If $n = $slider1 Then
$val = GUICtrlRead ( $slider1 )
SoundSetWaveVolume ( 100 - $val ) ; comme la position haute correspond à0 , l semble plus naturel d'inverser
EndIf
Until $n = $GUI_EVENT_CLOSE

Posté : dim. 09 déc. 2007 13:52
par MiXS
Ca marche pas encore pour le reglage du volume :?
Mais toujours ce probleme de boutons qui ne reagissent pas quand on appuye dessus si on change de forme :shock:

Posté : dim. 09 déc. 2007 16:53
par sylvanie
quand tu dis que ça ne marche pas, tu parles au niveau de l'intégration dans ton code ? car dans l'exple envoyé, j'ai bien le volume qui chande en fonction du slider. Cependant, il ne s'agit que du son "wave" pas le général.

Pour les pbs de bouton par contre, je n'arrive pas à reprobduire le problème. La gui arrive bien sous la forme autre que rectangulaire, et le bouton déclanchent bien les actions ... hormis les pbs évoqués plus haut (background ...)

Posté : dim. 09 déc. 2007 17:19
par MiXS
Non le reglage du volume ne marche pas integré ou pas !
Dans le mixeur du volume (windows) on voit bien que le son du slider se regle mais il ne change pas le volume du player :?

Pour les contours je l'ai fais avec EzSkin donc ca marche mieux !
Mais seul probleme avec celui ci c'est que je ne peut pas enlever le contour de la fenetre (fermer,reduir,aggrandir)!
Pour les boutons avec EzSkin ils marchent nickel ! :wink: