Moin zusammen,
Hab da mal wieder was, wo ich nicht selber hinter komme
folgendes Script :
Spoiler anzeigen
#include <Array.au3>
#include <File.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <FileEx.au3>
#include <GUIScrollBars.au3>
#include <ScrollBarConstants.au3>
Global $aPics_Viewer
#Region ### START Koda GUI section ### Form=
$Viewer = GUICreate("Viewer", 1017, 769, 192, 124, BitOR($WS_SYSMENU, $WS_VSCROLL))
$Pic1 = GUICtrlCreatePic("", 16, 16, 185, 193)
$Pic2 = GUICtrlCreatePic("", 216, 16, 185, 193)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
_GUIScrollBars_Init($Viewer)
[/autoit] [autoit][/autoit] [autoit]$aPics_Viewer = liste($aPics_Viewer)
GUIRegisterMsg($WM_VSCROLL, "WM_VSCROLL")
While 1
$nMsg = GUIGetMsg()
[/autoit] [autoit][/autoit] [autoit]Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $GUI_EVENT_PRIMARYDOWN
$Pos = GetPos()
If $Pos >= 5 Then
ShellExecute($aPics_Viewer[$Pos - 5])
EndIf
EndSwitch
WEnd
Func GetPos()
Local $a
$a = GUIGetCursorInfo()
Return $a[4]
EndFunc ;==>GetPos
Func liste($aPics_Viewer)
Local $aPics = _FileListTreeToArray(@ScriptDir & "\Pflanzen DB\pics\")
Local $left = 16
Local $top = 16
Local $width = 185
Local $height = 193
Local $nr = 0
Dim $aPics_Viewer[UBound($aPics) - 1]
_deleteBlanks($aPics)
;~ _ArrayDisplay($aPics)
For $i = 1 To UBound($aPics) - 1
GUICtrlCreatePic($aPics[$i], $left, $top, $width, $height)
$aPics_Viewer[$i] = $aPics[$i]
$left = $left + 200
$nr = $nr + 1
If $nr = 5 Then
$top = $top + 208
$left = 16
$nr = 0
EndIf
Next
_deleteBlanks($aPics_Viewer)
MsgBox(0,"","Liste fertig. Es wurden " & UBound($aPics) - 1 & " Bilder erstellt")
Return $aPics_Viewer
EndFunc ;==>liste
Func _deleteBlanks(ByRef $array)
If IsArray($array) < 1 Then Return 0
$bound = UBound($array) - 1
Local $i = 0
Local $isZeroIndex = 0
If $array[0] = $bound Then
$isZeroIndex = 1
$i = 1
EndIf
While $i <= $bound
If $array[$i] = "" Or StringIsSpace($array[$i]) > 0 Or Not StringInStr($array[$i], '.') Or StringInStr($array[$i], "blau.jpg") Or StringInStr($array[$i], "platzhalter.jpg") Or StringInStr($array[$i], "background.jpg") Then
_ArrayDelete($array, $i)
$bound = $bound - 1
If $isZeroIndex > 0 Then $array[0] = $array[0] - 1
Else
$i = $i + 1
EndIf
WEnd
EndFunc ;==>_deleteBlanks
Func WM_VSCROLL($hWnd, $Msg, $wParam, $lParam)
#forceref $Msg, $wParam, $lParam
Local $nScrollCode = BitAND($wParam, 0x0000FFFF)
Local $index = -1, $yChar, $yPos
Local $Min, $Max, $Page, $Pos, $TrackPos
For $x = 0 To UBound($aSB_WindowInfo) - 1
If $aSB_WindowInfo[$x][0] = $hWnd Then
$index = $x
$yChar = $aSB_WindowInfo[$index][3]
ExitLoop
EndIf
Next
If $index = -1 Then Return 0
; Ermittelt alle Informationen der vertikalen Scrollbar
Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hWnd, $SB_VERT)
$Min = DllStructGetData($tSCROLLINFO, "nMin")
$Max = DllStructGetData($tSCROLLINFO, "nMax")
$Page = DllStructGetData($tSCROLLINFO, "nPage")
$yPos = DllStructGetData($tSCROLLINFO, "nPos")
$TrackPos = DllStructGetData($tSCROLLINFO, "nTrackPos")
; Speichert die y-Position für einen späteren Vergleich
$Pos = $yPos
; Auswertung der vom System gemeldeten Scroll-Nachricht
Switch $nScrollCode
Case $SB_TOP ; Der Anwender klickte auf die "Pos1"-Taste
DllStructSetData($tSCROLLINFO, "nPos", $Min)
Case $SB_BOTTOM ; Der Anwender klickte auf die "Ende"-Taste
DllStructSetData($tSCROLLINFO, "nPos", $Max)
Case $SB_LINEUP ; Der Anwender klickte auf den oberen Pfeil
DllStructSetData($tSCROLLINFO, "nPos", $Pos - 1)
Case $SB_LINEDOWN ; Der Anwender klickte auf den unteren Pfeil
DllStructSetData($tSCROLLINFO, "nPos", $Pos + 1)
Case $SB_PAGEUP ; Der Anwender klickte oberhalb des Scrollbalkens
DllStructSetData($tSCROLLINFO, "nPos", $Pos - $Page)
Case $SB_PAGEDOWN ; Der Anwender klickte unterhalb des Scrollbalkens
DllStructSetData($tSCROLLINFO, "nPos", $Pos + $Page)
Case $SB_THUMBTRACK ; Der Anwender zog den Scrollbalken
DllStructSetData($tSCROLLINFO, "nPos", $TrackPos)
EndSwitch
;~ // Setzt die neue Position und ermittelt sie danach erneut.
;~ // Abhängig von den Windows-Einstellungen kann es sein, dass die gelesenen Werte nicht die gleichen sind, wie die vorher gesetzten.
DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS)
_GUIScrollBars_SetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO)
_GUIScrollBars_GetScrollInfo($hWnd, $SB_VERT, $tSCROLLINFO)
; // Falls sich die y-Position der Scrollbar geändert hat, den Fensterbereich verschieben und aktualisieren
$Pos = DllStructGetData($tSCROLLINFO, "nPos")
If ($Pos <> $yPos) Then
_GUIScrollBars_ScrollWindow($hWnd, 0, $yChar * ($yPos - $Pos))
$yPos = $Pos
EndIf
Return $GUI_RUNDEFMSG
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>WM_VSCROLL
[/autoit]Es werden ca. 45 Bilder erstellt. Das klappt auch, nur reicht mein Scrollbereich nicht, da er ungefähr nur doppelte GUI Höhe beträgt. wo kann man das einstellen. Forste im Moment die GUIScrollBars.au3 durch und versuch die zu verstehen.
Ist mein erster Versuch in der Richtung. Wer also Tips hat immer her damit