Je cherche à rendre transparent une courbe affichée sur un GUI. J'arrive à rendre transparent un GUI avec:
► Afficher le texte
Code : Tout sélectionner
#include <GuiConstantsEx.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
$hGUI = GUICreate("Test", 600, 400, -1 , -1, -1, $WS_EX_LAYERED)
GUISetBkColor(0xABCDEF, $hGUI)
GUISetState(@SW_SHOW, $hGUI)
_WinAPI_SetLayeredWindowAttributes($hGUI, 0xABCDEF)
GUICtrlCreateLabel("Mon texte est visible et pas le font de mon GUI", 50, 100, 200, 50, -1, $GUI_WS_EX_PARENTDRAG)
GUICtrlSetTip(-1, "Cliquer sur le label pour bouger la fenêtre")
Do
Until GUIGetMsg() = -3
Exit► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ListviewConstants.au3>
#Include <Array.au3>
Opt("MouseCoordMode", 2)
Opt("GUIOnEventMode", 1)
Global $Hcourbe = 400, $Wcourbe = 600, $left = 40
Global $array[1][2], $a, $max_x, $max_y, $g, $my_file, $fichierOK = false
Global $hGui, $child, $bord_sup, $bord_D, $coeffV, $coeffH, $LV, $LVitem
_BuildZeMainGui()
_OpenAndLoadAllZeStuff()
While 1
_Display()
Sleep(10)
Wend
;============================================
Func _OpenAndLoadAllZeStuff()
$my_file = _ChouzeFile()
$fichierOK = false
Dim $array[1][2] = [["", ""]]
_BuildZeArrays()
_BuildZeChildGui()
EndFunc
Func _ReInitZeGrafik()
If WinExists("courbe") Then GuiDelete($child)
GUICtrlSetData($LVitem, " | | ")
_OpenAndLoadAllZeStuff()
EndFunc
Func _ChouzeFile()
Local $var = FileOpenDialog("Choisir un fichier...", @ScriptDir & "\", "TXT (*.txt)", 1)
If @error Then Return
Return $var
EndFunc
Func _BuildZeMainGui()
$hGui = GUICreate("Graph", $left+$Wcourbe+60, $Hcourbe+90, -1, 30)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
$open = GuiCtrlCreateButton("ouvrir", $left+$Wcourbe+10, 20, 40, 20)
GUICtrlSetOnEvent(-1, "_ReInitZeGrafik")
;== listview
$LV = GuiCtrlCreateListview(" | | ", $left+100, $Hcourbe+40, 250, 35, _
$LVS_NOCOLUMNHEADER, $LVS_EX_GRIDLINES)
GUICtrlSendMsg($LV, $LVM_SETCOLUMNWIDTH, 0, 80)
GUICtrlSendMsg($LV, $LVM_SETCOLUMNWIDTH, 1, 80)
GUICtrlSendMsg($LV, $LVM_SETCOLUMNWIDTH, 2, 80)
GuiCtrlCreateListViewItem("index|mm|kN|", $LV)
$LVitem = GuiCtrlCreateListViewItem(" | | ", $LV)
GUISetState()
EndFunc
Func _BuildZeArrays()
$file = FileRead($my_file)
$res = StringRegExp($file, '([\d.]+;\h*[\d.]+)', 3)
If not IsArray($res) Then
$fichierOK = false
Return Msgbox(0,"", "mauvais fichier")
EndIf
$fichierOK = true
ReDim $array[UBound($res)][2]
For $i = 0 to UBound($res)-1
$split = StringRegExp($res[$i], '[\d.]+', 3)
$array[$i][0] = $split[0]
$array[$i][1] = $split[1]
Next
;_ArrayDisplay($array)
;;== valeurs extrêmes
$max_x = _ArrayMaxOrMin($array, "max", 1)
; $min_x = _ArrayMaxOrMin($array, "min", 1)
$max_y = _ArrayMaxOrMin($array, "max", 2)
; $min_y = _ArrayMaxOrMin($array, "min", 2)
;msgbox(0,"", "$min_x = " & $min_x &@crlf& _
; "$max_x = " & $max_x &@crlf&@crlf& _
; "$min_y = " & $min_y &@crlf& _
; "$max_y = " & $max_y )
;;== échelle verticale
; Local $bord_inf = 0
$na = Number(StringLen(Int($max_y))-1)
$b = 10^$na
$bord_sup = Ceiling($max_y/$b)*$b
$middleV = $bord_sup/2
$coeffV = $Hcourbe/$bord_sup
;;== échelle horizontale
; Local $bord_G = 0
$bord_D = Ceiling($max_x)
$middleH = ($bord_D)/2
$coeffH = $Wcourbe/$bord_D
;;== array pour les coordonnées sur le graphique
Dim $a[UBound($res)][2]
For $i = 0 to UBound($res)-1
$a[$i][0] = $array[$i][0]*$coeffH
$a[$i][1] = $Hcourbe - $array[$i][1]*$coeffV
Next
;_ArrayDisplay($a)
EndFunc
Func _BuildZeChildGui()
If $fichierOK = false Then Return
$child = GUICreate("courbe", $left+$Wcourbe+5, $Hcourbe+30, 0, 0, $WS_POPUP, _
BitOR($WS_EX_MDICHILD, $WS_EX_COMPOSITED), $hGui)
;== affichage de l'échelle y
Local $na = Number(StringLen(Int($bord_sup))-1)
Local $b = 10^$na
$n = 0
For $i = 0 to $bord_sup step $b/2
GuiCtrlCreateLabel("", 0, $Hcourbe-$i*$coeffV+3, $left, 17, 2)
GuiCtrlSetFont(-1, 8, 400, 0, "Arial Unicode MS")
GuiCtrlSetData(-1, Round($i, 2) & " " & ChrW(9472) )
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
$n += 1
If $i>0 AND $i<$bord_sup Then
GuiCtrlCreateLabel("", $left, $Hcourbe-$i*$coeffV+10, $Wcourbe, 1)
GUICtrlSetBkColor(-1, 0xaaaaff)
EndIf
Next
;msgbox(0,"", $bord_sup &@crlf& $b/2 &@crlf& $n &@crlf& $bord_sup/($b/2)+1)
;== affichage du y maxi
For $i = 0 to UBound($array)-1
If $array[$i][1] = $max_y Then
GuiCtrlCreateLabel("max_y = " &$array[$i][0] &" x "& $max_y, _
$left+10, $Hcourbe-$max_y*$coeffV-5, 120, 15)
GUICtrlSetBkColor(-1, 0xeeeeff)
GUICtrlSetColor(-1, 0xff0000)
GuiCtrlCreateLabel("", $left, $Hcourbe-$max_y*$coeffV+9, $Wcourbe, 1)
GUICtrlSetBkColor(-1, 0xffaaaa)
EndIf
Next
;== affichage de l'échelle x
Local $na = Number(StringLen(Int($bord_D))-1)
Local $b = 10^$na
For $i = 0 to $bord_D step $b
GuiCtrlCreateLabel("I", $left+$i*$coeffH, $Hcourbe+10-1, 2, 10, 1)
GuiCtrlCreateLabel($i, $left+$i*$coeffH-4, $Hcourbe+10+8, 10, 12, 1)
GuiCtrlSetFont(-1, 8, 400, 0, "Arial Unicode MS")
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
Next
;== graphique
$g = GUICtrlCreateGraphic($left, 10, $Wcourbe, $Hcourbe)
GUICtrlSetBkColor(-1, 0xeeeeff)
GUICtrlSetColor(-1, 0)
GUICtrlSetGraphic($g, $GUI_GR_MOVE, $a[0][0], $a[0][1])
GUICtrlSetGraphic($g, $GUI_GR_PENSIZE, 2)
For $i = 0 to UBound($a)-1
GUICtrlSetGraphic($g, $GUI_GR_COLOR, 0xff)
GUICtrlSetGraphic($g, $GUI_GR_LINE, $a[$i][0], $a[$i][1])
Next
GUISetState()
EndFunc
Func _Exit()
Exit
EndFunc
Func _Display()
If $fichierOK = false Then Return
Local $j = "", $tolerance = 2
Local $b = GUIGetCursorInfo($child)
;If @error Then Return
If $b[4] = $g Then
Local $pos = MouseGetPos()
For $i = 0 to UBound($a)-1
If $pos[0]-$left>$a[$i][0]-$tolerance AND $pos[0]-$left<$a[$i][0]+$tolerance AND _
$pos[1]-10>$a[$i][1]-$tolerance AND $pos[1]-10<$a[$i][1]+$tolerance Then
Do
$pos2 = MouseGetPos()
If $array[$i][0]<>$j Then
ToolTip($array[$i][0] &" x "& $array[$i][1])
GUICtrlSetData($LVitem, $i &"|"& $array[$i][0] &"|"& $array[$i][1])
$j = $array[$i][0]
EndIf
Until $pos[0]<$pos2[0]-$tolerance OR $pos[0]>$pos2[0]+$tolerance OR _
$pos[1]<$pos2[1]-$tolerance OR $pos[1]>$pos2[1]+$tolerance
ToolTip("")
EndIf
Next
EndIf
EndFunc
Func _ArrayMaxOrMin($avArray, $op = "max", $iCol = 1)
Local $iIndex = 0, $iRows = UBound($avArray), $iDims = UBound($avArray, 0)
If $op = "max" Then $op = "<"
If $op = "min" Then $op = ">"
Switch $iDims
Case 1 ; 1D
For $i = 0 To $iRows-1
If Execute(Number($avArray[$iIndex]) &$op& Number($avArray[$i])) Then $iIndex = $i
Next
Return $avArray[$iIndex]
Case 2 ; 2D
For $i = 0 To $iRows-1
If Execute(Number($avArray[$iIndex][$iCol-1]) &$op& _
Number($avArray[$i][$iCol-1])) Then $iIndex = $i
Next
;Local $Ret[2]
;$Ret[0] = $avArray[$iIndex][0]
;$Ret[1] = $avArray[$iIndex][$iCol-1]
;Return $Ret
Return $avArray[$iIndex][$iCol-1]
EndSwitch
EndFunc


