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

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Répondre
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

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

#1

Message 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 :) )
Modifié en dernier par ani le jeu. 30 août 2007 00:29, modifié 1 fois.
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1550
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

#2

Message 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
 
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

#3

Message 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
Modifié en dernier par ani le lun. 27 août 2007 01:24, modifié 1 fois.
Répondre