Hi ist es eigentlich möglich mit Autoit einen Farbferlauf zu machen
zb. oben dunkel mitte ein wenig heller und unten hell
wenn ja wie
Hi ist es eigentlich möglich mit Autoit einen Farbferlauf zu machen
zb. oben dunkel mitte ein wenig heller und unten hell
wenn ja wie
Wo möchtest du einen Farbverlauf erzeugen? Titelbar, Control, GUI...?
Grundsätzlich: Ja, es geht. Du kannst mit GDI+ zeichnen. Hängt dann vom verwendeten Brush ab.
Hier: [ offen ] Farbübergang von Schwarz nach Grau?
In einem controll zb. label
Ich kenne mich mit den zahlen von dem link nicht aus kann mir das mal jemand erklären
Die Farbverwaltung bei AutoIt entspricht einem 24bit RGB-Farbraum. Für jede der drei Grundfarben stehen 8bit zur Verfügung. Mit 8bit kann man 256 verschiedene Zustände speichern (siehe Dualsystem). Jede der drei Grundfarben kann also einen Wert von 0...255 (dezimal) oder 00...FF (hexadezimal) annehmen. Je höher der Wert, umso heller wird die Farbe.
Ein Farbwert von 0x000000 (hexadezimal) entspricht der Farbe Schwarz, 0xFFFFFF hingegen repräsentiert die Farbe Weiß. Verändert man nur eine der Grundfarben erhält man Rot (0xFF0000), Grün (0x00FF00) oder Blau (0x0000FF).
Dabei kann man die drei Grundfarben beliebig mischen. Bei einem Farbverlauf von Dunkel nach Hell verändert man die Werte der drei Grundfarben gleichmäßig (z.B. indem man für jede Abstufung jeweils einen bestimmten Wert addiert).
Ein Farbverlauf zwischen zwei, drei oder mehreren Farben ist hingegen abhängig vom Programmierer. Dabei kann man die Werte ganz unterschiedlich verändern, sodass es am Ende einen schönen Übergang ergibt. Was "schön" ist, liegt dann im Auge des Betrachters. ![]()
Also wenn das nicht ausfühlich ist
weis ich auch nicht ![]()
super Oscar !!
Schau dir das z.B. mal an: Gui-Styling ohne Bilder (Farbübergänge)
Aha
wie bekomme ich dann folgndes mit orange hin, komm mit dem hex zeug noch nicht ganz mit
$hGui = GUICreate('test', 400, 256)
For $i = 0 To 255
GUICtrlCreateLabel('', 0, $i, 400, 1)
$sColor = '0x' & Hex($i, 2) & Hex($i, 2) & Hex($i, 2)
GUICtrlSetBkColor(-1, $sColor)
Next
GUISetState()
Do
Until GUIGetMsg() = -3
Von schwarz nach orange:
[autoit]
$hGui = GUICreate('test', 400, 330)
For $i = 0 To 165
GUICtrlCreateLabel('', 0, $i * 2, 400, 2)
$sColor = '0x' & Hex(90 + $i, 2) & Hex($i, 2) & '00'
GUICtrlSetBkColor(-1, $sColor)
Next
GUISetState()
Do
Until GUIGetMsg() = -3
und hier noch mehr: http://www.autoitscript.com/forum/index.php?showtopic=71625
//Edit: nur die Farben werden falsch zusammengesetzt. Statt
Dec(Hex($blue,2) & Hex($green,2) & Hex($red,2))
muss es das sein:
Dec(Hex($red,2) & Hex($green,2) & Hex($blue,2))
@progandy danke
wie kann ich dann hier die farbe ändern
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
Dim $GUIWidth = 400
Dim $GUIHeight = 400
GUICreate("Vertical Gradient", $GUIWidth, $GUIHeight) ; will create a dialog box that when displayed is centered
GUISetState(@SW_SHOW) ; will display an empty dialog box
$Graphic = GUICtrlCreateGraphic (0,0, $GUIWidth, $GUIHeight) ;Fill GUI wwith vertical gradient
GradientFill($Graphic, 0, 0, $GUIWidth, $GUIHeight, _ArrayCreate(0,0,0), _ArrayCreate(255,255,255));
[/autoit] [autoit][/autoit] [autoit]GUICtrlSetGraphic($Graphic,$GUI_GR_REFRESH)
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
Func GradientFill($im, $x1, $y1, $width, $height, $left_color, $right_color)
$color0=($left_color[0]-$right_color[0])/$height
$color1=($left_color[1]-$right_color[1])/$height
$color2=($left_color[2]-$right_color[2])/$height
For $Y=0 to $height
$red=$left_color[0]-floor($Y*$color0)
$green=$left_color[1]-floor($Y*$color1)
$blue=$left_color[2]-floor($Y*$color2) ;Convert RGB to decimal
$col = Dec(Hex($red,2) & Hex($green,2) & Hex($blue,2))
GUICtrlSetGraphic($im,$GUI_GR_COLOR, $col)
GUICtrlSetGraphic($im,$GUI_GR_MOVE,0,$Y)
GUICtrlSetGraphic($im,$GUI_GR_LINE,$GUIWidth,$Y)
Next
EndFunc
siehst du die beiden _ArrayCreate? da werden die beiden Farben angegeben, aufgetrennt in die Werte für die 3 Grundfarben.
//Edit: ich habs mal geändert, dass auch wirklich die Parameter der Funktion verwendet werden und die Farben "normal" angegeben werden:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
Dim $GUIWidth = 400
Dim $GUIHeight = 400
GUICreate("Vertical Gradient", $GUIWidth, $GUIHeight) ; will create a dialog box that when displayed is centered
GUISetState(@SW_SHOW) ; will display an empty dialog box
$Graphic = GUICtrlCreateGraphic (0,0, $GUIWidth, $GUIHeight) ;Fill GUI wwith vertical gradient
GradientFill($Graphic, 40, 40, $GUIWidth-80, $GUIHeight-80, 0xFF0000, 0x00FF00);
[/autoit] [autoit][/autoit] [autoit]GUICtrlSetGraphic($Graphic,$GUI_GR_REFRESH)
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
Func GradientFill($im, $x1, $y1, $width, $height, $left_color, $right_color)
Local $left_red = BitAND(BitShift($left_color,16), 0xFF)
Local $left_green = BitAND(BitShift($left_color,8), 0xFF)
Local $left_blue = BitAND($left_color, 0xFF)
Local $right_red = BitAND(BitShift($right_color,16), 0xFF)
Local $right_green = BitAND(BitShift($right_color,8), 0xFF)
Local $right_blue = BitAND($right_color, 0xFF)
Local $color0=($left_red-$right_red)/$height
Local $color1=($left_green-$right_green)/$height
Local $color2=($left_blue-$right_blue)/$height
Local $red, $green, $blue, $col
For $Y=0 to $height
$red=$left_red-floor($Y*$color0)
$green=$left_green-floor($Y*$color1)
$blue=$left_blue-floor($Y*$color2) ;Convert RGB to decimal
$col = Dec(Hex($red,2) & Hex($green,2) & Hex($blue,2))
GUICtrlSetGraphic($im,$GUI_GR_COLOR, $col)
GUICtrlSetGraphic($im,$GUI_GR_MOVE,$x1,$Y+$y1)
GUICtrlSetGraphic($im,$GUI_GR_LINE,$x1+$width,$Y+$y1)
Next
EndFunc
Vielen Dank
Hab noch ne Frage
Wie kann ich hier
Func GraphicDots($id, $x, $y, $width, $height,$color)
For $y = 0 to $height
GUICtrlSetGraphic($id,$GUI_GR_COLOR, $color)
GUICtrlSetGraphic($id,$GUI_GR_MOVE,$x+$x,$y+$y)
GUICtrlSetGraphic($id,$GUI_GR_DOT,$x+$x,$y+$y)
Next
GUICtrlSEtGraphic($id,$GUI_GR_CLOSE)
EndFunc
Die Punkte über die Ganze gui verteilen
Edit:
So komme ich schon rechts und oben entlang+
Func GraphicDots($id, $x, $y, $width, $height,$color)
For $y = 0 to $height
GUICtrlSetGraphic($id,$GUI_GR_COLOR, $color)
GUICtrlSetGraphic($id,$GUI_GR_MOVE,$x+$x,$y+$y)
GUICtrlSetGraphic($id,$GUI_GR_DOT,$x+$x,$y+$y)
Next
For $y = 0 to $width
GUICtrlSetGraphic($id,$GUI_GR_COLOR, $color)
GUICtrlSetGraphic($id,$GUI_GR_MOVE,$y+$y,$x+$x)
GUICtrlSetGraphic($id,$GUI_GR_DOT,$y+$y,$x+$x)
Next
GUICtrlSEtGraphic($id,$GUI_GR_CLOSE)
EndFunc
Hat keiner eine Idee oder Lösung