Edit: Neues "problem", dafür bitte in den 2ten Post schauen.
Hallo alle miteinander,
Also irgendwie komm ich nicht weiter - ich habe mir gestern abend überlegt einen eigenen Musikexplorer zu erstellen - Mich hat es total genervt dass ich die Schriftgröße meiner Musikordner (da windows explorer) nicht mit STRG+Mausrad vergrößern kann, so wie ich es zb. vom Firefox gewohnt bin. Also hab ich mich da mal rangesetzt und wollte natürlich das "zoomen", bzw das ändern der schriftgröße hinbekommen. Soweit auch kein Problem - das ganze schaut dann so aus:
(benötigt wird die MouseSetOnEvent_UDF.au3)
Spoiler anzeigen
#include <MouseSetOnEvent_UDF.au3>
#include <Misc.au3>
HotKeySet("{ESC}", "_stirb")
$Font = 12
$mGUI = GUICreate("Teste",800,600)
$mxPlore = GUICtrlCreateLabel("Hier kommt der Explorer", 50, 200, 600, 50)
GUICtrlSetFont(-1,$Font)
GUISetState()
_MouseSetOnEvent($MOUSE_WHEELSCROLLUP_EVENT, "_zoom", 1,"",$mGUI)
_MouseSetOnEvent($MOUSE_WHEELSCROLLDOWN_EVENT, "_zoom", 2,"",$mGUI)
Func _stirb()
Exit
EndFunc ;==>_stirb
Func _zoom($iDir)
If _IsPressed(11) AND WinActive($mGUI) Then
Switch $iDir
Case 1
$Font += 1
GUICtrlSetFont($mxPlore,$Font)
Case 2
$Font -= 1
GUICtrlSetFont($mxPlore,$Font)
EndSwitch
EndIf
EndFunc ;==>_zoom
While 1
Sleep(20)
WEnd
Jetzt habe ich mir allerdings gedacht, dass ich mit sicherheit später nicht nur eine Control in meinem GUI haben werde, die ich vergrößern möchte, sonder mehrere _einzeln_
Also habe ich das ganze ein bisschen erweitert.
Das Ziel des ganzen ist es, die Schriftgröße des aktuell unter der Maus befindlichen Controls zu ändern - Da ich aber nicht wusste wie ich den Handle eine Controls unter der Maus herausbekomme, habe ich übergangsweise mit ControlGetFocus gearbeitet - also das zuletzt angeklickte Control soll vergrößert / verkleinert werden.
Die Handles sowie die aktuelle schriftgröße werden in einem Array gespeichert, eigentlich sollte innerhalb der Funktion im Array nach dem Handle gesucht werden, und die dazugehörige Schriftgröße bei einem WheelUp um 0.5 vergrößert und bei einem WheelDown um 0.5 verkleinert werden. Klappt auch bei den Werten im Array - nur leider übernimmt er diese nicht ins GUI...
Zum anschauen:
(Hier wird zusätzlich zur MouseSetOnEvent_UDF.au3 auch die ArrayMore.au3 benötigt.)
Spoiler anzeigen
#include <MouseSetOnEvent_UDF.au3>
#include <Misc.au3>
#include <GUIListBox.au3>
#include <GUIListView.au3>
#include <Array.au3>
#include <ArrayMore.au3>
HotKeySet("{ESC}", "_stirb")
HotKeySet("{-}","_ZeigFont")
Dim $Font[1][2]
$mGUI = GUICreate("Teste",1000,600)
$mLabel = GUICtrlCreateLabel("Das ist nur eine Test-GUI",20,20,800,100)
$mListBox = GUICtrlCreateList("Test",20,250,460,300)
$mListView = GUICtrlCreateListView("Test",500,250,480,300)
$mEdit = GUICtrlCreateEdit("Blabalabalbalba",20,150,300,100)
_Array2DAdd($Font,ControlGetHandle($mGUI,"",$mLabel)&'|'&8.5)
_Array2DAdd($Font,ControlGetHandle($mGUI,"",$mListBox)&'|'&8.5)
_Array2DAdd($Font,ControlGetHandle($mGUI,"",$mListView)&'|'&8.5)
_Array2DAdd($Font,ControlGetHandle($mGUI,"",$mEdit)&'|'&8.5)
_Array2DEmptyDel($Font)
_MouseSetOnEvent($MOUSE_WHEELSCROLLUP_EVENT, "_zoom", 1,"",$mGUI)
_MouseSetOnEvent($MOUSE_WHEELSCROLLDOWN_EVENT, "_zoom", 2,"",$mGUI)
GUISetState()
While 1
$mhWnd = ControlGetHandle($mGUI,"",ControlGetFocus($mGUI))
$n = _ArraySearch($Font,$mhWnd)
ToolTip($mhWnd,MouseGetPos(0),MouseGetPos(1),"")
;~ TrayTip("Handle",$mhWnd&@CRLF&@CRLF&$n&@CRLF&@CRLF&$Font[$n][1],3)
Sleep(20)
WEnd
Func _zeigfont()
_ArrayDisplay($Font)
EndFunc
Func _stirb()
Exit
EndFunc ;==>_stirb
Func _zoom($iDir)
$mhWnd = ControlGetHandle($mGUI,"",ControlGetFocus($mGUI))
$n = _ArraySearch($Font,$mhWnd,0,0,1)
TrayTip("Handle",$mhWnd&@CRLF&@CRLF&$n&@CRLF&@CRLF&$Font[$n][1],3)
If _IsPressed(11) Then
Switch $iDir
Case 1
$Font[$n][1] = $Font[$n][1] + 0.5
GUICtrlSetFont($mhWnd,$Font[$n][1])
Case 2
$Font[$n][1] = $Font[$n][1] - 0.5
GUICtrlSetFont($mhWnd,$Font[$n][1])
EndSwitch
EndIf
;
EndFunc ;==>_zoom
Wenn ihr mir helfen könnt den Fehler zu finden / mir eine alternative zu meiner vorgehensweise sagen könntet, wär ich schonmal ein gutes stück weiter
Danke & Gruß
SEuBo
EDIT: Habe grad nochmal einen genauen blick in die Hilfe geworfen und auch dort steht ja, dass man dafür die ControlID braucht. Nicht den ControlHandle. jetzt brauch ich entweder eine lösung die schriftgröße über den handle zu verändern, ODER die ControlID des zuletzt aktiven Controls auszulesen.. sowas wie
[autoit]ControlGetID(ControlGetFocus(""))
[/autoit];/
EDIT: Titel nochmal angepasst - vielleciht schauen dann mehr hier in den thread