Ich glaube er will mit den Cursortasten seine Markierung bewegen können. Außerdem soll glaub ich immer der Button oben drüber und untendrunter eine andere Farbe habe, aber weis nicht ob ich dass 100% genau verstanden hab
Frage zu Bitand (Variablen zusammenfassen)
-
- [ gelöst ]
-
nuts -
11. Oktober 2008 um 18:40 -
Geschlossen -
Erledigt
-
-
- Offizieller Beitrag
Dann vielleicht so:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>;;;;;;;;;;;;;;;;;;;; Haupt-Menü Variablen
[/autoit] [autoit][/autoit] [autoit]
Opt("GUICoordMode", 1)
Global $last_focus = -1
Global $HauptGUI = GUICreate("HTPC", 400, 800, -1, -1, BitOR($WS_POPUP, $WS_BORDER, $WS_CLIPSIBLINGS))
GUICtrlSetState(-1, $GUI_DISABLE);;;;;;;;;;;;;;;;;;;;;;Buttons;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[/autoit] [autoit][/autoit] [autoit]
Dim $L = 100 ; Buttonleft
Dim $W = 200 ; Buttonwidth
Dim $H = 60; Buttonheight
Dim $F = GUISetFont(18, 800, 0, "MS Sans Serif") ;Schrift der ButtonsGlobal $TV = GUICtrlCreateButton("TV", $L, 8, $W, $H, -1, $WS_EX_STATICEDGE)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Global $DVD = GUICtrlCreateButton("DVD", $L, 88, $W, $H, -1, $WS_EX_STATICEDGE)
Global $Aufnahmen = GUICtrlCreateButton("Aufnahmen", $L, 168, $W, $H, -1, $WS_EX_STATICEDGE)
Global $Internet = GUICtrlCreateButton("Internet", $L, 248, $W, $H, -1, $WS_EX_STATICEDGE)
Global $Musik = GUICtrlCreateButton("Musik/Bilder", $L, 328, $W, $H, -1, $WS_EX_STATICEDGE)
Global $Bluray = GUICtrlCreateButton("Bluray", $L, 408, $W, $H, -1, $WS_EX_STATICEDGE)
Global $Einstellungen = GUICtrlCreateButton("Einstellungen", $L, 488, $W, $H, -1, $WS_EX_STATICEDGE)
Global $Beenden = GUICtrlCreateButton("Beenden", $L, 568, $W, $H, -1, $WS_EX_STATICEDGE)
Global $Exit = GUICtrlCreateButton("exit", $L, 648, $W, $H, -1, $WS_EX_STATICEDGE)GUISetState(@SW_SHOW, $HauptGUI)
[/autoit] [autoit][/autoit] [autoit]
GUISetState(@SW_MAXIMIZE, $HauptGUI)
While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_Close
Exit
Case $TV
_HauptReset($TV)
Case $DVD
_HauptReset($DVD)
Case $Aufnahmen
_HauptReset($Aufnahmen)
Case $Internet
_HauptReset($Internet)
Case $Musik
_HauptReset($Musik)
Case $Bluray
_HauptReset($Bluray)
Case $Einstellungen ;Aufruf Einstellungen
_HauptReset($Einstellungen)
Case $Beenden ;Aufruf Beenden
_HauptReset($Beenden)
Case $Exit
Exit
EndSwitch
_FokusReset(ControlGetFocus('',''))
WEndFunc _FokusReset($Button)
[/autoit] [autoit][/autoit] [autoit]
If $Button <> $last_focus Then
$last_focus = $Button
Local $FarbeNorm = 0x000080, $FarbeMark = 0x6189F1, $FarbeTeil = 0x1139b1
Local $aID = StringSplit('tv,dvd,aufnahmen,internet,musik,bluray,einstellungen,beenden,exit', ',')
Local $aButton = StringSplit('button1,button2,button3,button4,button5,button6,button7,button8,button9', ',')
For $i = 1 To $aID[0]
GUICtrlSetBkColor(Eval($aID[$i]), $FarbeNorm)
Next
For $i = 1 To $aID[0]
If $aButton[$i] = $Button Then
If $i > 1 Then GUICtrlSetBkColor(Eval($aID[$i-1]), $FarbeTeil)
GUICtrlSetBkColor(Eval($aID[$i]), $FarbeMark)
If $i < $aID[0] Then GUICtrlSetBkColor(Eval($aID[$i+1]), $FarbeTeil)
EndIf
Next
EndIf
EndFuncFunc _HauptReset($ID)
[/autoit]
Local $FarbeNorm = 0x000080, $FarbeMark = 0xFFFF44, $FarbeTeil = 0x1139b1
Local $aID = StringSplit('tv,dvd,aufnahmen,internet,musik,bluray,einstellungen,beenden,exit', ',')
For $i = 1 To $aID[0]
GUICtrlSetBkColor(Eval($aID[$i]), $FarbeNorm)
Next
For $i = 1 To $aID[0]
If Eval($aID[$i]) = $ID Then
If $i > 1 Then GUICtrlSetBkColor(Eval($aID[$i-1]), $FarbeTeil)
GUICtrlSetBkColor(Eval($aID[$i]), $FarbeMark)
If $i < $aID[0] Then GUICtrlSetBkColor(Eval($aID[$i+1]), $FarbeTeil)
EndIf
Next
EndFunc -
Einen Hovereffekt kannst du mit diesem UDF aus dem englischen Forum einfach erstellen:
http://www.autoitscript.com/forum/index.php?showtopic=55120&hl=hover -
Ich glaube er will mit den Cursortasten seine Markierung bewegen können. Außerdem soll glaub ich immer der Button oben drüber und untendrunter eine andere Farbe habe, aber weis nicht ob ich dass 100% genau verstanden hab
genau.
Der Button drüber und drunter soll einfach nur die Ursprungsfarbe wiederbekommen (was dann zur folge hat das nur der im Fokus anders gefärbt ist).das skript von oscar funktioniert auch bzw. ändert noch die umliegenden Buttons wie von anno2008 angesprochen.
und ändert sogar noch die button farbe onklick?
Ist auf jeden Fall eine schönere Lösung als meine
Was dagegen wenn ich die Funktionen so einfach abschreibe und anpasse?Den Hovereffekt kenn ich schon. Hier im Forum hat mal jemand eine vergleichbare und einfachere Lösung gepostet (Beispiel mit 2 buttons):
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
include <GUIConstants.au3>Opt("GUICoordMode", 1)
[/autoit] [autoit][/autoit] [autoit]
$HauptGUI = GUICreate("HTPC", 400, 600, 1000, 0)
GUISetBkColor(0x000000)
$Button1 = GUICtrlCreateButton("TV", 100, 8, 200, 60, 0)
GUICtrlSetFont(-1, 18, 800, 0, "MS Sans Serif")
GUICtrlSetBkColor(-1, 0x008080)
$Button2 = GUICtrlCreateButton("DVD", 100, 88, 200, 60, 0)
GUICtrlSetFont(-1, 18, 800, 0, "MS Sans Serif")
GUICtrlSetBkColor(-1, 0x008080)GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]
$Hover_Old = ""While 1
[/autoit] [autoit][/autoit] [autoit]
$Cursor = GUIGetCursorInfo($HauptGUI)
If $Cursor[4] <> $Hover_Old Then
Normal($Hover_Old) ; reset the previous control
Hover($Cursor[4]) ; set the new control hovered
$Hover_Old = $Cursor[4]
EndIf
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
Exit
Endselect
WendFunc Hover($ID)
[/autoit] [autoit][/autoit] [autoit]
Switch $ID
Case $Button1
GUICtrlSetBkColor($ID, 0xFFFF00)
Case $Button2
GUICtrlSetBkColor($ID, 0xFFFF00)
Endswitch
EndfuncFunc Normal($ID)
[/autoit]
Switch $ID
Case $Button1
GUICtrlSetBkColor($ID, 0x008080)
Case $Button2
GUICtrlSetBkColor($ID, 0x008080)
Endswitch
EndfuncDaran angelehnt war auch mein Ansatz. Hab aber auf den Fokus reagiert und nicht auf den Mauszeiger.
-
- Offizieller Beitrag
Was dagegen wenn ich die Funktionen so einfach abschreibe und anpasse?
Habe ich doch für Dich geschrieben!
Bau es weiter aus, pass es an, ganz wie Du es haben willst. -
Alles klar.
Die Funktion ersetzt in meinem Skript ca. 300 Zeilen
Nochmals vielen dank!
edit \ hm mir fällt da was auf:
Manchmal flackern die buttons wenn ich den Fokus über die Cursortasten ändere. Kann aber leider keine Regelmäßigkeit feststellen
Muss ich jetzt nochmal mit meiner Version gegenchecken. -
Hm ich hab jetzt die Funktion mal so angepasst wie ich es haben wollte:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>;;;;;;;;;;;;;;;;;;;; Haupt-Menü Variablen
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Opt("GUICoordMode", 1)
Global $last_focus = -1
Global $Farbe = 0x00BFFF
Global $HauptGUI = GUICreate("HTPC", 400, 800, -1, -1, BitOR($WS_POPUP,$WS_BORDER,$WS_CLIPSIBLINGS))
GUISetBkColor(000000);;;;;;;;;;;;;;;;;;;;;;Buttons;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[/autoit] [autoit][/autoit] [autoit]
Dim $L = 100 ; Buttonleft
Dim $W = 200 ; Buttonwidth
Dim $H = 60; Buttonheight
Dim $C = 4169E1 ;Hintergrundfarbe Button
Dim $F = GUISetFont( 18, 800, 0, "MS Sans Serif") ;Schrift der ButtonsGlobal $TV = GUICtrlCreateButton("TV", $L, 8, $W, $H, -1, $WS_EX_STATICEDGE)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Global $DVD = GUICtrlCreateButton("DVD", $L, 88, $W, $H, -1, $WS_EX_STATICEDGE)
Global $Aufnahmen = GUICtrlCreateButton("Aufnahmen", $L, 168, $W, $H, -1, $WS_EX_STATICEDGE)
Global $Internet = GUICtrlCreateButton("Internet", $L, 248, $W, $H, -1, $WS_EX_STATICEDGE)
Global $Musik = GUICtrlCreateButton("Musik/Bilder", $L, 328, $W, $H, -1, $WS_EX_STATICEDGE)
Global $Bluray = GUICtrlCreateButton("Bluray", $L, 408, $W, $H, -1, $WS_EX_STATICEDGE)
Global $Einstellungen = GUICtrlCreateButton("Einstellungen", $L, 488, $W, $H, -1, $WS_EX_STATICEDGE)
Global $Beenden = GUICtrlCreateButton("Beenden", $L, 568, $W, $H, -1, $WS_EX_STATICEDGE)
Global $Exit = GUICtrlCreateButton("exit", $L, 648, $W, $H, -1, $WS_EX_STATICEDGE)GUISetState(@SW_SHOW, $HauptGUI)
[/autoit] [autoit][/autoit] [autoit]
GUISetState(@SW_MAXIMIZE, $HauptGUI)
While 1
$msg = GUIGetMsg()
switch $msg
case $GUI_EVENT_Close
Exit
Case $TV
Case $DVD
Case $Aufnahmen
Case $Musik
Case $Bluray
Case $Einstellungen ;Aufruf Einstellungen
Case $Beenden ;Aufruf Beenden
Case $Exit
exit
EndSwitch_HauptReset(ControlGetFocus('',''))
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
WEndFunc _HauptReset($Button) ;Grundfunktion von Oscar http://www.autoit.de
[/autoit]
If $Button <> $last_focus Then
$last_focus = $Button
Local $Farbe = 0x1E90FF, $Fokusfarbe = 0x00BFFF
Local $aID = StringSplit('tv,dvd,aufnahmen,internet,musik,bluray,einstellungen,beenden,exit', ',')
Local $aButton = StringSplit('button1,button2,button3,button4,button5,button6,button7,button8,button9', ',')
For $i = 1 To $aID[0]
GUICtrlSetBkColor(Eval($aID[$i]), $Farbe)
Next
For $i = 1 To $aID[0]
If $aButton[$i] = $Button Then
GUICtrlSetBkColor(Eval($aID[$i]), $Fokusfarbe)
EndIf
Next
EndIf
EndFuncDas Problem mit den flackernden Buttons bleibt aber leider (mit scharzen Hintergrund wie im Beispiel sieht mans ganz gut)
Nach meinen Tests liegt das an der Resetfunktion. Ist wohl zu aufwendig alle Buttons gleichzeitig zurückzusetzen?
Bin mir aber auch nicht sicher, ob es mit dem jeweiligen System und den Komponenten bzw. den Treibern zusammenhängt. Daher würde ich mich über ein paar Tester freuen.Ich verwende:
amd x2 3800 ee
onboard graka auf 690G basis
WinXp inkl. sp2edit\ um das Flackern noch etwas zu beschreiben:
Beim Bewegen der Markierung zeigt sich z.b. ein Strich in der Hintergrundfarbe bei den nicht aktiven Buttons. -
Ebenfalls ein flackern bei mir
P4 @ 2.8Ghz
1GB RAM
onboard grafikkarte unbekannt(arbeitsrechner)
WinXp sp2 -
Hm wenn sich das bestättigt muss ich mir wohl was neues ausdenken.
Jemand ne ahnung woran das liegen könnte? Möglicherweise eine Laufzeitsgrenze von autoit? -
- Offizieller Beitrag
So flackert es weniger:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>;;;;;;;;;;;;;;;;;;;; Haupt-Menü Variablen
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Opt("GUICoordMode", 1)
Global $last_focus = -1
Global $Farbe = 0x00BFFF
Global $HauptGUI = GUICreate("HTPC", 400, 800, -1, -1, BitOR($WS_POPUP, $WS_BORDER, $WS_CLIPSIBLINGS))
GUISetBkColor(000000);;;;;;;;;;;;;;;;;;;;;;Buttons;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[/autoit] [autoit][/autoit] [autoit]
Dim $L = 100 ; Buttonleft
Dim $W = 200 ; Buttonwidth
Dim $H = 60; Buttonheight
Dim $C = 4169E1 ;Hintergrundfarbe Button
Dim $F = GUISetFont(18, 800, 0, "MS Sans Serif") ;Schrift der ButtonsGlobal $TV = GUICtrlCreateButton("TV", $L, 8, $W, $H, -1, $WS_EX_STATICEDGE)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
GUICtrlSetBkColor(-1, 0x00BFFF)
Global $DVD = GUICtrlCreateButton("DVD", $L, 88, $W, $H, -1, $WS_EX_STATICEDGE)
GUICtrlSetBkColor(-1, 0x4169E1)
Global $Aufnahmen = GUICtrlCreateButton("Aufnahmen", $L, 168, $W, $H, -1, $WS_EX_STATICEDGE)
GUICtrlSetBkColor(-1, 0x4169E1)
Global $Internet = GUICtrlCreateButton("Internet", $L, 248, $W, $H, -1, $WS_EX_STATICEDGE)
GUICtrlSetBkColor(-1, 0x4169E1)
Global $Musik = GUICtrlCreateButton("Musik/Bilder", $L, 328, $W, $H, -1, $WS_EX_STATICEDGE)
GUICtrlSetBkColor(-1, 0x4169E1)
Global $Bluray = GUICtrlCreateButton("Bluray", $L, 408, $W, $H, -1, $WS_EX_STATICEDGE)
GUICtrlSetBkColor(-1, 0x4169E1)
Global $Einstellungen = GUICtrlCreateButton("Einstellungen", $L, 488, $W, $H, -1, $WS_EX_STATICEDGE)
GUICtrlSetBkColor(-1, 0x4169E1)
Global $Beenden = GUICtrlCreateButton("Beenden", $L, 568, $W, $H, -1, $WS_EX_STATICEDGE)
GUICtrlSetBkColor(-1, 0x4169E1)
Global $Exit = GUICtrlCreateButton("exit", $L, 648, $W, $H, -1, $WS_EX_STATICEDGE)
GUICtrlSetBkColor(-1, 0x4169E1)GUISetState(@SW_SHOW, $HauptGUI)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
GUISetState(@SW_MAXIMIZE, $HauptGUI)
While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_Close
Exit
Case $TV
Case $DVD
Case $Aufnahmen
Case $Musik
Case $Bluray
Case $Einstellungen ;Aufruf Einstellungen
Case $Beenden ;Aufruf Beenden
Case $Exit
Exit
EndSwitch
_HauptReset(ControlGetFocus('', ''))
WEndFunc _HauptReset($Button) ;Grundfunktion von Oscar http://www.autoit.de
[/autoit]
If $Button <> $last_focus Then
Local $aID = StringSplit('tv,dvd,aufnahmen,internet,musik,bluray,einstellungen,beenden,exit', ',')
Local $aButton = StringSplit('button1,button2,button3,button4,button5,button6,button7,button8,button9', ',')
Local $Farbe = 0x4169E1, $Fokusfarbe = 0x00BFFF
GUICtrlSetBkColor(Eval($aID[StringTrimLeft($last_focus, 6)]), $Farbe)
GUICtrlSetBkColor(Eval($aID[StringTrimLeft($Button, 6)]), $Fokusfarbe)
$last_focus = $Button
EndIf
EndFunc ;==>_HauptReset -
stimmt! so ists schon besser.
Hat jemand ne Idee woher das kommt?
-
- Offizieller Beitrag
Diese Version ist noch etwas besser:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include<WinAPI.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>;;;;;;;;;;;;;;;;;;;; Haupt-Menü Variablen
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Opt("GUICoordMode", 1)
Global $Farbe = 0x00BFFF
Global $HauptGUI = GUICreate("HTPC", 400, 800, -1, -1, BitOR($WS_POPUP, $WS_BORDER, $WS_CLIPSIBLINGS))
GUISetBkColor(000000);;;;;;;;;;;;;;;;;;;;;;Buttons;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[/autoit] [autoit][/autoit] [autoit]
Dim $L = 100 ; Buttonleft
Dim $W = 200 ; Buttonwidth
Dim $H = 60; Buttonheight
Dim $C = 4169E1 ;Hintergrundfarbe Button
Dim $F = GUISetFont(18, 800, 0, "MS Sans Serif") ;Schrift der ButtonsGlobal $TV = GUICtrlCreateButton("TV", $L, 8, $W, $H, -1, $WS_EX_STATICEDGE)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
GUICtrlSetBkColor(-1, 0x00BFFF)
Global $DVD = GUICtrlCreateButton("DVD", $L, 88, $W, $H, -1, $WS_EX_STATICEDGE)
GUICtrlSetBkColor(-1, 0x4169E1)
Global $Aufnahmen = GUICtrlCreateButton("Aufnahmen", $L, 168, $W, $H, -1, $WS_EX_STATICEDGE)
GUICtrlSetBkColor(-1, 0x4169E1)
Global $Internet = GUICtrlCreateButton("Internet", $L, 248, $W, $H, -1, $WS_EX_STATICEDGE)
GUICtrlSetBkColor(-1, 0x4169E1)
Global $Musik = GUICtrlCreateButton("Musik/Bilder", $L, 328, $W, $H, -1, $WS_EX_STATICEDGE)
GUICtrlSetBkColor(-1, 0x4169E1)
Global $Bluray = GUICtrlCreateButton("Bluray", $L, 408, $W, $H, -1, $WS_EX_STATICEDGE)
GUICtrlSetBkColor(-1, 0x4169E1)
Global $Einstellungen = GUICtrlCreateButton("Einstellungen", $L, 488, $W, $H, -1, $WS_EX_STATICEDGE)
GUICtrlSetBkColor(-1, 0x4169E1)
Global $Beenden = GUICtrlCreateButton("Beenden", $L, 568, $W, $H, -1, $WS_EX_STATICEDGE)
GUICtrlSetBkColor(-1, 0x4169E1)
Global $Exit = GUICtrlCreateButton("exit", $L, 648, $W, $H, -1, $WS_EX_STATICEDGE)
GUICtrlSetBkColor(-1, 0x4169E1)GUISetState(@SW_SHOW, $HauptGUI)
[/autoit] [autoit][/autoit] [autoit]
GUISetState(@SW_MAXIMIZE, $HauptGUI)Global $last_focus = GUICtrlGetHandle($TV)
[/autoit] [autoit][/autoit] [autoit]
GUIRegisterMsg($WM_USER, "MY_WM_USER")While 1
[/autoit] [autoit][/autoit] [autoit]
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_Close
Exit
Case $TV
Case $DVD
Case $Aufnahmen
Case $Musik
Case $Bluray
Case $Einstellungen ;Aufruf Einstellungen
Case $Beenden ;Aufruf Beenden
Case $Exit
Exit
EndSwitch
WEndFunc MY_WM_USER($hWnd, $msg, $wParam, $lParam)
[/autoit]
Local $Button = WinGetHandle(_WinAPI_GetFocus())
Local $Farbe = 0x4169E1, $Fokusfarbe = 0x00BFFF
GUICtrlSetBkColor(_WinAPI_GetDlgCtrlID($last_focus), $Farbe)
GUICtrlSetBkColor(_WinAPI_GetDlgCtrlID($Button), $Fokusfarbe)
$last_focus = $Button
EndFunc ;==>_HauptReset -
Hm jap - fast kein flackern mehr zu sehen.
Leider kann ich der letzten nichtmehr folgen
Dabei wird der Button schon am anfang eingefärbt und die Funktion ändert den Button im Fokus und setzt den zuletzt im Fokus gewesenen Button zurück auf die Defaultfarbe?
Darum flackerts höchstens ab und zu noch am "last_fokus" oder am "fokus" Button? -
- Offizieller Beitrag
Ja, mit GUIRegisterMsg wird eine Funktion (MY_WM_USER) registriert, die ausgeführt wird, wenn ein User-Ereignis eintritt (Up-/Down-Taste gedrückt).
In der Funktion (MY_WM_USER) wird dann mit WinGetHandle(_WinAPI_GetFocus()) das Handle zu dem Button geholt, der gerade den Focus besitzt.
Der Befehl _WinAPI_GetDlgCtrlID wandelt dann das Handle in die GUI-ID um, damit GUICtrlSetBKColor funktioniert. Der Rest ist, wie schon von Dir vermutet.Das Flackern tritt also nur noch (wenn überhaupt) beim gerade aktiven und/oder am zuletzt aktiven Button auf. Wobei ich nicht sagen kann, warum das so ist. Es tritt ja auch nicht jedesmal auf, sondern nur gelegentlich.
-
okay, großes Lob an Oscar.
Ich denke mit der letzten Version kann ich leben.
Wenn noch jemand was schlaues einfällt woher das Flackern kommen könnte: bitte melden!
Ansonsten: [Gelöst}
-