Ich find meine Stoppuhr gerade nicht
Frag lieber noch mal jemand anderes aber ich denke schon.
mfg Ubuntu
Ich find meine Stoppuhr gerade nicht
Frag lieber noch mal jemand anderes aber ich denke schon.
mfg Ubuntu
Wenn man sich mit GDI+ auskennt ist es auf jeden Fall schneller und es sieht besser aus ;).
Scheinst dich ja damit aus zu kennen. Gib mir mal einen Richtwert, wie lange es dauert, GDi soweit zu beherrschen, dass man meine Sache lösen kann. Bezogen auf einen Normalsterblichen der nicht ganz auf den Kopf gefallen ist, nur ein bisschen. Hmm, funktionieren die Smilies bei euch ?
ZitatGib mir mal einen Richtwert, wie lange es dauert, GDi soweit zu beherrschen, dass man meine Sache lösen kann
Das kommt erstens darauf an wie kompliziert du das machen willst und zweitens wie gut du dich überhaupt mit AutoIt auskennst ;).
Einen simplen ImageViewer der nur Bild für Bild in ein Fenster packt mache ich in 5 Minuten.
ZitatHmm, funktionieren die Smilies bei euch ?
Ähh ja?
Merk schon, ich muss mich selber entscheiden (Smilies gehen bei mir nicht mehr) Nichts kompliziertes, also werd ich´s schon rallen
P.S.: Hast Recht, ist bedeutend schneller
Bei mir funktioniert das Skript so:
[autoit]Dim $aPics_Viewer[UBound($aPics) - 1]
[/autoit]
oder so:
Dim $aPics_Viewer[UBound($aPics)]
[/autoit]
nicht.
Woran kann das liegen
PS: FileEx.au3 hab ich bereits.
Fehlermeldung wäre nicht schlecht
Hab schon soweit das alle Bilder erstellt werden, nur hab ich das Problem, dass alle Bilder die nicht im sichtbaren Bereich sind auch nicht gezeichnet werden. Scrolle ich dahin sind auch alle anderen weg
Hier mal das Script so wie ichs im Moment hab:
#include <Array.au3>
#include <FileEx.au3>
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <GuiScrollBars.au3>
#include <ScrollBarConstants.au3>
#include <WindowsConstants.au3>
$msg = MsgBox(4, "", "Möchtest du die Galerie jetzt erstellen ?")
[/autoit] [autoit][/autoit] [autoit]If $msg = 6 Then
#region ### START Koda GUI section ### Form=
$MainForm = GUICreate("Status", 1024, 768, Default, Default)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###
_GUIScrollBars_Init($MainForm)
_GUIScrollBars_ShowScrollBar($MainForm, $SB_VERT, $ESB_DISABLE_BOTH)
galerie()
[/autoit] [autoit][/autoit] [autoit]GUIRegisterMsg($WM_VSCROLL, "WM_VSCROLL")
[/autoit] [autoit][/autoit] [autoit]While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
EndIf
[/autoit] [autoit][/autoit] [autoit]Func galerie()
[/autoit] [autoit][/autoit] [autoit]Local $aPics = _FileListTreeToArray(@ScriptDir & "\Pflanzen DB\pics\")
Local $left = 16
Local $top = 38
Local $Width = 185
Local $Height = 185
Local $nr = 0
Local $count = 0
Local $top_label = 223
Local $height_label = 17
Local $scrollbar_height = 0
Dim $aPics_Viewer[UBound($aPics)]
_deleteBlanks($aPics)
[/autoit] [autoit][/autoit] [autoit]For $i = 1 To UBound($aPics) - 1
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile($aPics[$i])
$x = _GDIPlus_ImageGetWidth($hImage)
$y = _GDIPlus_ImageGetHeight($hImage)
_GDIPlus_ImageDispose($hImage)
$format = $x / $y
[/autoit] [autoit][/autoit] [autoit]If $format > 1 Then ;breiter wie hoch
Do
$x = $x - (10 * $format)
$y = $y - 10
;~ ToolTip("Breite: " & $x & " Höhe: " & $y)
Until $x < 185; Or $y < 185
EndIf
If $format < 1 Then ; höher wie breit
Do
$x = $x - (10 * $format)
$y = $y - 10
;~ ToolTip("Höhe: " & $y & " Breite: " & $x)
Until $y < 185; Or $x < 185
EndIf
$hBitmap = _GDIPlus_BitmapCreateFromFile($aPics[$i])
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($MainForm)
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, $left, $top,$x,$y)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()
;~ GUICtrlCreatePic($aPics[$i], $left, $top, $x, $y)
$pfad = StringSplit($aPics[$i], "\")
$aPics_Viewer[$i] = $aPics[$i]
$left = $left + 193
$nr = $nr + 1
$count = $count + 1
If $nr = 5 Then
$top = $top + 223
$top_label = $top_label + 223
$left = 16
$scrollbar_height = $scrollbar_height + 240
$nr = 0
[/autoit] [autoit][/autoit] [autoit]If $scrollbar_height > 769 Then
$vert = _GUIScrollBars_GetScrollRange($MainForm, $SB_VERT)
_GUIScrollBars_SetScrollRange($MainForm, $SB_VERT, 0, ($vert[1] + 9.83))
EndIf
EndIf
Next
$nr = 0
$left = 16
$top_label = 223
For $i = 1 To UBound($aPics) - 1
$pfad = StringSplit($aPics[$i], "\")
GUICtrlCreateLabel("" & $pfad[UBound($pfad) - 3] & "\" & $pfad[UBound($pfad) - 2] & "\" & $pfad[UBound($pfad) - 1], $left, $top_label, $x, $height_label)
$left = $left + 200
$nr = $nr + 1
If $nr = 5 Then
$top_label = $top_label + 223
$left = 16
$nr = 0
EndIf
Next
EndFunc ;==>galerie
[/autoit] [autoit][/autoit] [autoit]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)
;~ ToolTip("Handle : " & $hWnd & " Msg : " & $Msg & "wParam : " & $wParam & "lParam : " & $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]Gib mal PLS einen Tip.
Ein vollständiges Script wäre hilfreich ;).
Außerdem fällt mir auf, dass du ein Bilde lädst, seine Größe ausliest es wieder aus dem Speicher löschst dann eine Bitmap von dem Bild erstellst und diese in die Grafik zeichnest :D.
Ich glaube das ganze lässt sich überhaupt effektiver gestalten...
Bitte
#include <Array.au3>
#include <FileEx.au3>
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <GuiScrollBars.au3>
#include <ScrollBarConstants.au3>
#include <WindowsConstants.au3>
$msg = MsgBox(4, "", "Möchtest du die Galerie jetzt erstellen ?")
[/autoit] [autoit][/autoit] [autoit]If $msg = 6 Then
#region ### START Koda GUI section ### Form=
$MainForm = GUICreate("Status", 1024, 768, Default, Default)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###
_GUIScrollBars_Init($MainForm)
_GUIScrollBars_ShowScrollBar($MainForm, $SB_VERT, $ESB_DISABLE_BOTH)
galerie()
[/autoit] [autoit][/autoit] [autoit]GUIRegisterMsg($WM_VSCROLL, "WM_VSCROLL")
[/autoit] [autoit][/autoit] [autoit]While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
EndIf
[/autoit] [autoit][/autoit] [autoit]Func galerie()
[/autoit] [autoit][/autoit] [autoit]Local $aPics = _FileListTreeToArray(@ScriptDir & "\Pflanzen DB\pics\")
Local $left = 16
Local $top = 38
Local $Width = 185
Local $Height = 185
Local $nr = 0
Local $count = 0
Local $top_label = 223
Local $height_label = 17
Local $scrollbar_height = 0
Dim $aPics_Viewer[UBound($aPics)]
_deleteBlanks($aPics)
[/autoit] [autoit][/autoit] [autoit]For $i = 1 To UBound($aPics) - 1
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_Startup()
$hImage = _GDIPlus_BitmapCreateFromFile($aPics[$i])
$x = _GDIPlus_ImageGetWidth($hImage)
$y = _GDIPlus_ImageGetHeight($hImage)
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($MainForm)
[/autoit] [autoit][/autoit] [autoit]$format = $x / $y
[/autoit] [autoit][/autoit] [autoit]If $format > 1 Then ;breiter wie hoch
Do
$x = $x - (10 * $format)
$y = $y - 10
;~ ToolTip("Breite: " & $x & " Höhe: " & $y)
Until $x < 185; Or $y < 185
EndIf
If $format < 1 Then ; höher wie breit
Do
$x = $x - (10 * $format)
$y = $y - 10
;~ ToolTip("Höhe: " & $y & " Breite: " & $x)
Until $y < 185; Or $x < 185
EndIf
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hImage, $left, $top, $x, $y)
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_Shutdown()
;~ GUICtrlCreatePic($aPics[$i], $left, $top, $x, $y)
$pfad = StringSplit($aPics[$i], "\")
$aPics_Viewer[$i] = $aPics[$i]
$left = $left + 193
$nr = $nr + 1
$count = $count + 1
If $nr = 5 Then
$top = $top + 223
$top_label = $top_label + 223
$left = 16
$scrollbar_height = $scrollbar_height + 240
$nr = 0
[/autoit] [autoit][/autoit] [autoit]If $scrollbar_height > 769 Then
$vert = _GUIScrollBars_GetScrollRange($MainForm, $SB_VERT)
_GUIScrollBars_SetScrollRange($MainForm, $SB_VERT, 0, ($vert[1] + 9.83))
EndIf
EndIf
Next
$nr = 0
$left = 16
$top_label = 223
For $i = 1 To UBound($aPics) - 1
$pfad = StringSplit($aPics[$i], "\")
GUICtrlCreateLabel("" & $pfad[UBound($pfad) - 3] & "\" & $pfad[UBound($pfad) - 2] & "\" & $pfad[UBound($pfad) - 1], $left, $top_label, $x, $height_label)
$left = $left + 200
$nr = $nr + 1
If $nr = 5 Then
$top_label = $top_label + 223
$left = 16
$nr = 0
EndIf
Next
EndFunc ;==>galerie
[/autoit] [autoit][/autoit] [autoit]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)
;~ ToolTip("Handle : " & $hWnd & " Msg : " & $Msg & "wParam : " & $wParam & "lParam : " & $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]Schau nicht nach dem Code. Ist der erste Gedanke. Verbessert wird noch, wenn´s funktioniert. Mit dem Bild hast recht, war noch von vorher über geblieben.
Die Bilder werden gezeichnet ;). Nur wird alles gelöscht was außerhalb der GUI liegt, du müsstest es also neu zeichnen sobald gescrollt wird (so machen die Controls das auch).
Außerdem Ist eine GDI+ Grafik kein Control, das heißt du musst wahrscheinlich die Scroll Funktion anpassen... Schau dir mal das hier an.
Das sagst du so einfach in deinem jugendlichen Leichtsinn ! (geht wieder)
Erstmal raus finden wie! Komplett alles dauert zu lange