nein, (leider) keine errors.
Beiträge von sc4ry
-
-
also, wenn ich die udf includiere, verschwinden die buttons, mit den normalen funktionen oder deiner, lasse ich sie weg, funktionieren beide.
-
Hallo zusammen,
ich möchte in eine Script die Button-Farbe anpassen. Sobald diese Funktion jedoch ausgeführt wird, sind die Button unsichtbar. Ich habe das Problem nun auf die ModernMenuRaw.au3 eingeschränkt und ein bsp-script erstellt, leider aber kein plan, wo der Fehler jetzt genauer liegt. Kann mir jmd helfen?
[autoit]#include "O:\DropBox\AutoIT\Includes\ModernMenuRaw.au3"
[/autoit][autoit][/autoit][autoit]Opt("GUIOnEventMode", 1)
[/autoit][autoit][/autoit][autoit];~ If Not IsDeclared("GWL_EXSTYLE") Then Global Const $GWL_EXSTYLE = -20
[/autoit][autoit][/autoit][autoit]
$WinWidth = 200$SettingGUI = GUICreate("", $WinWidth, 176, @DesktopWidth / 2, 25, BitOR($WS_BORDER,$WS_POPUP,$WS_VISIBLE,$DS_SETFOREGROUND,$WS_SYSMENU), BitOR($WS_EX_OVERLAPPEDWINDOW,$WS_EX_TOPMOST,$WS_EX_TOOLWINDOW))
[/autoit][autoit][/autoit][autoit]
WinSetOnTop($SettingGUI, "", 1)
WinSetTrans($SettingGUI, "", 200)
GUISetFont(7, 350, Default, "Comic Sans MS", $SettingGUI)
GUISetState(@SW_SHOW, $SettingGUI)GUICtrlCreateButton("push", 0, 0, $WinWidth, 17)
[/autoit][autoit][/autoit][autoit]
GUICtrlSetOnEvent(-1, "Check")
$TransButton = GUICtrlCreateButton("1", 0, 17, $WinWidth, 17)
$OnTopButton = GUICtrlCreateButton("2", 0, 34, $WinWidth, 17)
$VisibleButton = GUICtrlCreateButton("3", 0, 51, $WinWidth, 17)
$WinHandle = WinGetHandle($SettingGUI)
While 1
Sleep(100)
WEndFunc Check()
[/autoit]
GUICtrlSetDefColor(0xFF0000)
GUICtrlSetColor($VisibleButton, 0x787878)
GUICtrlSetColor($OnTopButton, 0x787878)
EndFunc -
ja, das denke ich auch. wenn man es weiß, ist es ok, ka ob man an der array-funktion was ändern kann.
-
Fehler behoben
[autoit]$WindowArray[$i][1] = Hwnd($WindowArray[$i][1])
[/autoit]THX =)
-
also ich frage ja das handle ab, da liegt wohl der fehler. aber warum kann man ausgerechnet nicht in dieser funktion mit dem handle arbeiten?
selbst so funktioniert es nicht: WinExists(WinGetTitle($WindowArray[$i][1]))gibt es noch eine andere möglichkeit abzufragen, ob ein fenster existiert?
EDIT: ok, winexists nimmt natürlich das handle, grad wie folgt getestet:
MsgBox(0, $WindowArray[$i][1], IsVisible("AutoIt 1") & @CRLF & WinExists("AutoIt 1"))
d. h. das handle aus dem array wird nicht als solches erkannt ... aber warum?
-
nein, genau da liegt er ja nicht begraben, weshalb ich den code weggelassen habe. denn wenn das array nicht gefüllt wäre, würde consolewrite nicht ausgeführt werden. und in der ausgabe von CW sieht man, dass das handle auch korrekt übergeben wurde und auch existiert (siehe autoit info tool). im grunde muss ja nur im array ein existierendes handle stehen, was der fall ist.
meiner meinung nach kann das problem hier nicht liegen. das handle ist im array und das fenster existiert, winexists gibt aber 0 zurück, darum wird die falsche if-anweisung ausgeführt. der fehler ist winexists, nur warum???
[autoit]Func ClickWindowTitle()
[/autoit]
$SearchHwnd = _ArraySearch($WindowArray, $WinHandle)
If $SearchHwnd = -1 Then
_Array2DAdd($WindowArray, $WinTitle & "|" & $WinHandle)
ConsoleWrite(@CRLF & "Window added: " & $WinHandle & @CRLF)
Else
;~ If $WindowArray[$SearchHwnd][1] <> "" Then
_Array2DDelete($WindowArray, $SearchHwnd)
;~ Else
;~ _Array2DInsert($WindowArray, $WinTitle, $SearchHwnd)
;~ EndIf
EndIf
$WindowArray[0][0] = UBound($WindowArray) - 1
;~ _ArrayDisplay($WindowArray)
EndFunc -
Hallo zusammen,
ich weiß grad nicht, wo der Fehler ist. Ich lasse beim Klick ein Window-Handle in 1 Array schreiben und möchte später prüfen, ob dieses Handle/ Fenster noch existiert. Bei dieser Prüfung kommt jedoch stehts 0 raus.
Das adden ins Array funktioniert einwandfrei, da er auch sonst nicht in die Prüfung springen würde. Aber weder mit Handle noch mit dem Title wird das Fenster gefunden, obwohl es da ist. Wer kann mir helfen?
Anbei der Code und 1 Screen als Proof.
[autoit]If $WindowArray[0][0] > 0 Then
[/autoit]
For $i = $WindowArray[0][0] To 1 Step -1
If WinExists($WindowArray[$i][1]) Then
If $WindowArray[$i][1] <> WinGetTitle($WindowArray[$i][1]) Then WinSetTitle($WindowArray[$i][1], "", $WindowArray[$i][0])
Else
$test = $WindowArray[$i][1]
ConsoleWrite($WindowArray[$i][1] & @TAB & WinExists($test) & @TAB & WinExists(WinGetTitle($test)) & @CRLF)
_ArrayDelete($WindowArray, $i)
$WindowArray[0][0] = UBound($WindowArray) - 1
EndIf
Next
EndIfErgebnis:
[autoit]Window added: 0x0014085C
[/autoit]
0x0014085C 0 0Das Window added kommt aus der besagten Funktion, in der das Handle zum Array zugefügt wird. Das passiert immer, da ConsoleWrite ja nur dann angezeigt wird, wenn das Handle wieder aus dem Array gelöscht wird.
-
hi,
thx für den tip, ich habs aber dann doch net hinbekommen und mir eine alternative überlegt.
ich hab quasi das array um die fenster bereinigt, die nicht angezeigt werden und dann das fenster direkt in der größe erstellt, dass alle buttons reinpassen. mit winmove hats immer die koordinaten zerhauen.ich denke das sollte auch iO sein, es sein denn, einer hat soviele fenster, dass das fenster größer wird, als der desktop ... das wäre natürlich dann doof
[autoit]$Windows = WinList()
[/autoit]
For $i = $Windows[0][0] To 1 Step -1
If $Windows[$i][0] = "" Or WinGetState($Windows[$i][0]) < 5 Or Not IsVisible($Windows[$i][1]) Then
_ArrayDelete($Windows, $i)
Else
ConsoleWrite($Windows[$i][0] & @TAB & WinGetState($Windows[$i][0]) & @CRLF)
EndIf
Next
$Windows[0][0] = UBound($Windows) - 1
$WindowGUI = GUICreate($Title & " Windows", $WinWidth, 20 * $Windows[0][0], @DesktopWidth / 2 + $WinWidth + 7, 0, BitOR($WS_BORDER,$WS_POPUP,$WS_VISIBLE,$DS_SETFOREGROUND,$WS_SYSMENU), BitOR($WS_EX_OVERLAPPEDWINDOW,$WS_EX_TOPMOST,$WS_EX_TOOLWINDOW), $MainGui)
GUISetOnEvent($GUI_EVENT_CLOSE, "WindowESC", $WindowGUI)
WinSetOnTop($WindowGUI, "", 1)
WinSetTrans($WindowGUI, "", $WinTransActive)
WinSetTrans($MainGUI, "", $WinTransActive)
GUISetFont(7, 350, Default, "Comic Sans MS", $WindowGUI)
For $i = 1 To $Windows[0][0]
GUICtrlCreateButton($Windows[$i][0], 0, 20 * ($i - 1), $WinWidth, 17)
GUICtrlSetOnEvent(-1, "ChangeFocusWindows")
Next
GUISetState(@SW_SHOW, $WindowGUI) -
Hallo zusammen,
ich möchte in einem GUI mit fester Größe, eine variable Anzahl an Buttons anzeigen. Im Fenster wird einen vertikale Scrollleiste angezeigt, das Fenster lässt sich aber trotzdem nicht scrollen, obwohl noch Buttons ausgeblendet sein müssten.
Was mache ich faslch?
[autoit]$WinWidth = 200
[/autoit][autoit][/autoit][autoit]
$WindowGUI = GUICreate($Title & " Windows", $WinWidth +17, 176 + 25, @DesktopWidth / 2 + $WinWidth + 7, 0, BitOR($WS_BORDER,$WS_POPUP,$WS_VISIBLE,$DS_SETFOREGROUND,$WS_SYSMENU, $WS_VSCROLL), BitOR($WS_EX_OVERLAPPEDWINDOW,$WS_EX_TOPMOST,$WS_EX_TOOLWINDOW))
GUISetOnEvent($GUI_EVENT_CLOSE, "SettingESC", $WindowGUI)
WinSetOnTop($WindowGUI, "", 1)
WinSetTrans($WindowGUI, "", $WinTransActive)
GUISetFont(7, 350, Default, "Comic Sans MS", $WindowGUI)
GUISetState(@SW_SHOW, $WindowGUI)$Windows = WinList()
[/autoit]
$top = 0
For $i = 1 To $Windows[0][0]
If $Windows[$i][0] <> "" And WinGetState($Windows[$i][0]) > 5 And IsVisible($Windows[$i][1]) Then
GUICtrlCreateButton($Windows[$i][0], 0, $top, $WinWidth, 17)
ConsoleWrite($Windows[$i][0] & @TAB & WinGetState($Windows[$i][0]) & @TAB & $top & @CRLF)
$top += 20
EndIf
Next -
hi,
meine derzeitige lösung haben im verlinkten thread gepostet, falls es jmd braucht/ interessiert.
-
Hi,
folgende Lösung funzt bei mir bis jetzt perfekt, danke für eure hilfe.
[autoit]While 1
[/autoit]
$Info = GUIGetCursorInfo($MainGUI)
If $Info[4] = 3 And WinGetState($Title) = 5 Then
$WinHandleOld = $WinHandle
$WinHandle = WinGetHandle("[active]")
If $WinHandle = WinGetHandle($MainGUI) Then
$WinHandle = $WinHandleOld
EndIf
ConsoleWrite($Info[4]&" "&WinGetTitle($WinHandle)&" "&@CRLF)
EndIf
Sleep(100)
WEnd -
hmm, peinlich, aber ich muss sagen, es funktioniert schon so (wenn das fenster/ der slider aktiv ist). komisch, gestern hab ich das eigentlich getestet, vllt hatte ich vorher nicht ins fenster reingeklickt. thx trotzdem, fürs nächste mal
-
hmm, bin damit doch nicht zurecht gekommen und hab dann kurzerhand doch die hotkey.au3 genommen.
[autoit]Title: Management of Hotkeys UDF Library for AutoIt3
[/autoit]
Filename: HotKey.au3
Description: Sets a hot key that calls a user function
Author: Yashied
Version: 1.6 -
Hallo,
in der Suche habe ich grad nichts entsprechendes gefunden, in der hilfe leider auch nicht. kann man das mausrad als eingabe-methode nutzen?
ich habe derzeit ein fenster mit einem slider, damit verändere ich die transparenz eines fensters. nun würde ich das ganze etweder nur, oder optional, direkt mit dem mausrad machen können.also slider(-fenster) öffnen, maus über slider und dann drehen (slider und transparenz verändern sich entsprechend). wie müsste ich hier vorgehen?
-
besten dank euch beiden für die tips. hatte es schon nach haukes methode probiert, was auch funktioniert, aber das andere gefällt mir noch besser. jetzt wo du es sagst, hab ich doch glatt schonmal davon gehört ... ich glaub das ist, was ich suche, besten dank =)
-
thx für den tip. naja, esc funzt natürlich nicht "automatisch", nur wenn ich es explizit hinzufüge, aber das hab ich nun gemacht (GUISetOnEvent($GUI_EVENT_CLOSE, "RenameESC", $RenameGUI))
mit Enter hab ich noch nicht ganz verstanden. es geht hier um ein popup, dass nur ein input-feld hat, keine buttons!?
-
hotkeys sind ja systemweit. ok, ich kenne auch die fenster-gebundenen, aber es muss doch eine rückmeldung geben, die ich abfangen und verwerten kann.
-
Hallo zusammen,
ich habe mehrere Fenster und nutze den OnEventMode. Wenn ich auf einen Button klicke, öffnet sich folgendes Fenster:
[autoit]$RenameGUI = GUICreate($Title & " Rename", $WinWidth, 17, @DesktopWidth / 2 + $WinWidth +5 , 25, BitOR($WS_BORDER,$WS_POPUP,$WS_VISIBLE,$DS_SETFOREGROUND,$WS_SYSMENU), BitOR($WS_EX_OVERLAPPEDWINDOW,$WS_EX_TOPMOST,$WS_EX_TOOLWINDOW), $MainGui)
[/autoit]
GUICtrlCreateInput($Wintitle, 0, 0, $WinWidth, 17, BitOR($ES_WANTRETURN, $ES_LEFT, $ES_AUTOHSCROLL))
GUISetState(@SW_SHOW, $RenameGUI)Per klick auf den Button schließt sich das Fenster wieder (GUIDelete). Es soll aber ebenfalls geschlossen werden, wenn der User ENTER oder ESC in diesem Fenster drückt. Ich komm einfach nicht drauf, wie man das umsetzt oO
-
Hi, dank euch.
was ist denn 3D oO
also ich glaube, 2D reicht mir, wobei ich grad dran arbeite, wie ich dort einträge hinzufüge, mit _ArrayAdd. Geht das Überhaupt? Was ist die Alternative, ReDim und ???
PS: Ah, jetzt kommt _Array2DAdd zum einsatz