Page 1 sur 1

[Ex] Créer un séparateur sur une interface.

Posté : sam. 25 août 2007 12:33
par ani

Code : Tout sélectionner

#include <GUIConstants>

$Width = "600"
Global $Separate[2] = [10,20]

GUICreate("Exemple Separate Gui ?",$Width ,200,-1,-1)
GUICtrlCreateLabel("",$Separate[0], 30,($width - $Separate[1]),1,$SS_SUNKEN )

GUISetState()
Do
$msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSE
Explication

Width correspond à la dimension (largeur) de l'interface gui.
On construit une variable globale qui correspond au séparateur
  1. Pour le 1er chiffre, cette valeur (variable) correspond à la disposition du label (left::gauche)
  2. Pour le second chiffre, c'est une valeur que l'on va soustraire à la largeur de la gui
Vous remarquerez surement que le deuxième chiffre à une valeur double au premier, c'est l'astuce ;)
Je m'explique si on part de la gauche en décallant de 10 (left=10) il faudra faire idem pour la droite mais comment si on ne connait pas la largeur du label (la valeur de gauche n'est pas soustraite a la largeur de la gui donc faudra multiplier la valeur left par deux comme çà on obtiendra sur est certain la valeur du label (width) ,,, calcul::Gui_Width - (2*left) = donnera la largeur du label

Excusé si je m'exprime mal :D

C'est pour un centrage (testé avec d'autre chiffre genre (20,40) ou 50,100 ect

On aura utilisé le style du label $ss_sunken

Et pour finir on passe par un boucle do until pour sortir de l'application (appuyer sur ESC)


Si vous connaissez une autre manière pour la création d'un séparateur gui,, n'hésitez pas à le poster (on réeditera :) )

Posté : sam. 25 août 2007 14:28
par sylvanie
Salut,

pour créer des séparateurs, on peut aussi passer par les zone graphiques.
J'ai tout mis dans les commentaires :

Code : Tout sélectionner

#include <GUIConstants.au3>

$Width = "600" 
Global $Separate[2] = [10,20] 

$long_separateur=($width - $Separate[1]) ; ça c'est juste pour éviter de faire le calcul à chaque fois

GUICreate("Exemple Separate Gui ?",$Width ,200,-1,-1) 

;façon Label proposée par Ani
GUICtrlCreateLabel("",$Separate[0], 30,$long_separateur,1,$SS_SUNKEN ) 

;façon graphic
GUICtrlCreateGraphic ( $Separate[0], 40 , $long_separateur, 1 ) ; construction de la zone de graphique qui contiendra la ligne décalée de 10 pixels par rapport au label 
GUICtrlSetGraphic(-1,$GUI_GR_MOVE, 0,0); va en 0,0 de la zone de graphique cad ($Separate[0], 40) dans la gui
GUICtrlSetGraphic(-1,$GUI_GR_LINE, $long_separateur,0) ; création de la ligne dans la zone graphique, un trait qui va par défaut de la coordonnée (0,0) de la zone graphique jusqu'à ($long_separateur,0) 

;inconvéniant : 3 lignes au lieu d'une
;avantage : les couleurs ^^
#
for $ind=1 to 5
    GUICtrlCreateGraphic ( $Separate[0], 40+10*$ind , $long_separateur, 1 )
    GUICtrlSetGraphic(-1,$GUI_GR_COLOR,Random(0,16777215,1)) ; choisi au pseudo hasard une couleur
    GUICtrlSetGraphic(-1,$GUI_GR_MOVE, 0,0)
    GUICtrlSetGraphic(-1,$GUI_GR_LINE, $long_separateur,0) ;
Next

;et enfin changement des couleurs par segment

GUICtrlCreateGraphic ( $Separate[0], 100 , $long_separateur, 1 ) ; la zone doit être créée à l'extérieure de la boucle puisque cette fois, on utilise toujours la même zone graphique pour créer plusieur segments
GUICtrlSetGraphic(-1,$GUI_GR_MOVE,0,0);
$step=10
for $ind=0 to $long_separateur-$step step $step
    GUICtrlSetGraphic(-1,$GUI_GR_COLOR,int(16777215*$ind/($long_separateur-$step))) ; etallage de 0 à 16777215
    GUICtrlSetGraphic(-1,$GUI_GR_LINE, $step+$ind,0) ;dessine de la position courrante (0,0) au début de boucle jusqu'à positon courrante +10, soit un segment de 10 pixels
Next

GUISetState() 
Do 
$msg = GUIGetMsg() 
Until $msg = $GUI_EVENT_CLOSE
 

Posté : sam. 25 août 2007 14:56
par ani
Voici une autre manière en utilisant les dll (user & gdi)
merci sylvanie pour m'avoir remis sur la route ;)

Code : Tout sélectionner

 #include <GUIConstants>
Global $USER32 = DllOpen ( "user32.dll" )
Global $GDI32 = DllOpen ( "gdi32.dll" )

Dim $Gui

$gui=GUICreate ( "Exemple Separate Gui ?" , 600 , 200 , - 1 , - 1 )
GUISetState ( )

Do
Separateur ( )
$msg = GUIGetMsg ( )
Until $msg = $GUI_EVENT_CLOSE

func Separateur ( )
$Form = getdc ( $Gui )
$Pen1 =CreatePen ( 0 , 1 , 0xFFFFFF )
SelectObject ( $Form , $Pen1 ) ;on donne ici l'attribut de couleur pour l'objet choisis
MoveToEx ( $form , 10 , 50 , 0 ) ;gui , x , y , point
LineTo ( $form , 590 , 50 ) ;gui , x , y
EndFunc

func SelectObject ( $HDC , $Object )
Local $ret = DllCall ( $GDI32 , "hwnd" , "SelectObject" , "ptr" , $HDC , "hwnd" , $Object )
Return $ret[0]
EndFunc

func GetDC ( $handle )
Local $ret = dllcall ( $USER32 , "int" , "GetDC" , "ptr" , $handle )
Return $ret[0]
EndFunc

func CreatePen ( $Style , $Epaisseur , $Couleur ) ;
Local $ret = dllcall ( $GDI32 , "hwnd" , "CreatePen" , "int" , $Style , "int" , $Epaisseur , "hwnd" , $Couleur )
return $ret[0]
EndFunc

Func MoveToEx ( $hdc , $x , $y , $point )
Local $ret = DllCall ( $GDI32 , 'int' , 'MoveToEx' , 'ptr' , $hdc , 'int' , $x , 'int' , $y , 'ptr' , $point )
Return $ret[0]
EndFunc

Func LineTo ( $hdc , $x , $y )
Local $ret = DllCall ( $GDI32 , 'int' , 'LineTo' , 'ptr' , $hdc , 'int' , $x , 'int' , $y )
Return $ret[0]
EndFunc