Hallo.
Ich habe hier gestern schon eine kleine Frage zu meinem Script geäußert und auf Wunsch von Oscar, der mir umbedingt bei der Fehlersuche helfen will möchte ich nun mal mein script zeigen. Bis jetzt hab ich noch jedes Problem selbst gelöst, aber hier komm ich einfach nicht weiter.
Beschreibung:
Dem Programm geht mein PhotoImporter vorraus, der die Bilder von meiner Kamera importiert. Die Namen der importierten Bilder werden in einer txt-Datei gespeichert und sollen dann im PhotoViewer (das Programm hier) angezeigt werden.
Aber in dieser Version wird das nicht berücksichtig und es werden nur Bilder aus dem Pics Ordner (der ist mit in der zip-Datei) geladen und angezeigt. Die Probleme stehen in der au3-Datei mit dabei.
Wichtig:
Bitte 3.2.11.0 Beta verwenden
Quelltext nur zum anschauen; zum Testen bitte die angehängte Datei mit Testbildern benutzen.
Spoiler anzeigen
;(c)fraengers 2008
;AutoIt 3.2.11.0 beta
;PhotoViewer
#cs
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!WICHTIG: AUTOIT 3.2.11.0 BETA VERWENDEN!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
PROBLEME
Wenn amn den Bildern beim Laden zuschaut, wird währendessen nur die erste Reihe richtig angezeigt.
Bei den Folgenden Reihen wir nur ein Streifen des Bildes angzeigt.In diesem Status ist es möglich
auch die Bilder der zweiten/dritten Reihe anzuklicken und es wird auch registriert. Wenn dann alle
Bilder geladen sind kann man die erste Bilderreihe anklicken und es passiert auch was. Wenn man die
anderen anklickt passiert nur mit einer Chance von vielleicht 1:50 was.
Die Funktion view() soll aufgerufen, wenn ein Bild angeklickt wurde. Diese soll dann in einem neuen
Fenster angezeigt werden. Bei klick auf das Bild soll das Fenster wieder geschlossen werden. Bei klick
auf den Button soll das Bild mit Photoshop geöffnent werden. Nur ich verstehe nicht, wie man das mit
OnEvent Modus löst.
(Scrollbar funktioniert noch nicht optimal. Hier hackt es an der Berechnung der maximalen Scrollhöhe)
/PROBLEME
#ce
#Region######Include#############################
#include <GUIConstantsEx.au3>
#include <GUIScrollBars.au3>
#include <File.au3>
#include <Array.au3>
#include <WindowsConstants.au3>
#include <ScrollBarConstants.au3>
#Include <Misc.au3>
#EndRegion###Include#############################
Opt("GUIOnEventMode", 1)
#Region#####Var##################################
Dim $pic[1000], $label[1000], $pic_date[1000], $pic_size[1000], $ar_pics[1], $show
$run = 0
$var_x = 0
$var_y = 0
;Bildgröße
$pic_size_x = 240
$pic_size_y = 160
;Guigröße
$gui_width = 900
$gui_heigth = 600
#EndRegion###Var#################################
#Region#####GUI##################################
$gui = GUICreate("PhotoViewer", $gui_width, $gui_heigth, -1, -1, BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU))
GUISetBkColor(0x222222);Hintergrundfarbe => Dunkelgrau
GUISetOnEvent($GUI_EVENT_CLOSE, "close")
;###########################################################
;~ $destpath = IniRead(@ScriptDir & "\photoimporter.ini", "Settings", "Ziel", "NA")
;~ $pic_path = $destpath
;~ _FileReadToArray($destpath & "\imp_logfile.txt", $ar_pics)
;~ _ArrayDelete($ar_pics, 1)
$destpath = @ScriptDir & "\pics\"
$pic_path = $destpath
$ar_pics = _FileListToArray($pic_path, "*.jpg", 1)
_ArraySort($ar_pics, 0, 1)
;###########################################################
;~ $preview = GUICreate("Vorschau wird erstellt", 140, 35, -1, -1, $WS_POPUP + $WS_BORDER)
;~ $lab_preview = GUICtrlCreateLabel("Vorschau wird erstellt...", 15, 10)
;~ GUISetState(@SW_SHOW,$gui)
;~ GUISetState(@SW_SHOW,$preview)
;~ GUISwitch($gui)
$pic_x = $gui_width
$pic_y = $gui_heigth
$1 = ($gui_width + 40) / ($pic_size_x + 15 + 15);40/2 = 20 ist min.abstand zum linken/rechten Rand
$1 = StringSplit($1, ".");Wie oft passen die Bilder horizontal ins Fenster? Ergebnis wird beim , (.) zerteilt...
$pic_xn = $1[1];...und nur die Zahl vorm , (.) wird verwendet
$l_space = ((($gui_width) - (($pic_xn * ($pic_size_x + 30)) - 30)) / 2)-5;Abstand vom linken Rand wird ermittelt, um die Bilder mittig im GUI zu plazieren -5 für Scrollbar
GUISetState()
For $i = 1 To UBound($ar_pics)-1; Bilder und Label werden plaziert
;Bilder
$pic[$i] = GUICtrlCreatePic($pic_path & $ar_pics[$i], ($l_space) + ($var_x * ($pic_size_x + 30)), 30 + ($var_y * ($pic_size_y + 40)), $pic_size_x, $pic_size_y)
GUICtrlSetOnEvent($pic[$i], "view")
;Datum
$pic_getdate = FileGetTime($pic_path & $ar_pics[$i], 1)
If Not @error Then $pic_date[$i] = $pic_getdate[2] & "." & $pic_getdate[1] & "." & $pic_getdate[0] & " " & $pic_getdate[3] & ":" & $pic_getdate[4] & ":" & $pic_getdate[5]
;Größe
$pic_getsize = FileGetSize($pic_path & $ar_pics[$i])
$pic_size[$i] = Round($pic_getsize / 1048576, 2)
;Label
$label[$i] = GUICtrlCreateLabel($ar_pics[$i] & " | " & $pic_date[$i] & " | " & $pic_size[$i] & "M", ($l_space) + ($var_x * ($pic_size_x + 30)), (40 + $pic_size_y) + ($var_y * ($pic_size_y + 40)), $pic_size_x, $pic_size_y)
GUICtrlSetColor($label[$i], 0xffffff)
$run = $run + 1;nicht wichtig nur zu Testzwecken
$var_x = $var_x + 1;wenn ein Bild plaziert wurde wird var_x um 1 erhöht um dann nächste Runde das nächste Bild weiter rechts zu plazieren
If $var_x = $pic_xn Then;wenn var_x gleich der vorher berechneten Bilderanzahl pro Reihe ist...
$var_x = 0;... wird var_x wieder auf 0 gesetzt...
$var_y = $var_y + 1;... und var_y um eins erhöht um in die nächste Zeile zu kommen
EndIf
Next
#EndRegion###GUI#################################
;~ GUIDelete($preview)
#Region#####SCROLLBAR############################
GUIRegisterMsg($WM_SIZE, "WM_SIZE")
GUIRegisterMsg($WM_VSCROLL, "WM_VSCROLL")
GUIRegisterMsg($WM_HSCROLL, "WM_HSCROLL")
$h = ($var_y * ($pic_size_y + 40))/15;warum? ich weis es nicht...
_GUIScrollBars_Init($gui,0,$h)
_GUIScrollBars_ShowScrollBar($gui, $SB_HORZ, False);Deaktiviert Horizontalscroll
#EndRegion###SCROLLBAR###########################
While 1
Sleep(20)
WEnd
#Region#####Funktions############################
Func view();Soll ein Fenster mit den Angeklickten Bild öffnen
For $i = 1 To UBound($ar_pics)-1
If @GUI_CTRLID = $pic[$i] Then
MsgBox(0,"","Hier soll später noch ein Fenster kommen, das das angeklickte Bild in groß zeigt.")
;~ GUISetOnEvent($GUI_EVENT_CLOSE, "show_close")
;~ $show = GUICreate($ar_pics[$i], 930, 650, -1, -1, $WS_POPUP)
;~ GUISetOnEvent($show, "show_close")
;~ $show_pic = GUICtrlCreatePic($pic_path & $ar_pics[$i], 15, 15, 900, 600)
;~ GUICtrlSetOnEvent($show_pic, "show_close")
;~ GUISetBkColor(0x222222);Hintergrundfarbe => Dunkelgrau
;~ $btn_ps = GUICtrlCreateButton("Mit Photoshop öffnen...", 370, 620, 140, 20)
;~ GUICtrlSetOnEvent($btn_ps, "start_ps")
;~ GUISetState()
;~ Sleep(100)
;~ While 1
;~ Sleep(20)
;~ WEnd
EndIf
Next
EndFunc
;~ Func show_close()
;~ GUIDelete($show)
;~ EndFunc
[/autoit] [autoit][/autoit] [autoit];~ Func start_ps()
;~ MsgBox(0,"Bild mit ...", "...Photoshop öffnen.")
;~ GUIDelete($show)
;~ EndFunc
Func close()
Exit
EndFunc
Func WM_SIZE($hWnd, $Msg, $wParam, $lParam)
...
EndFunc ;==>WM_SIZE
Func WM_HSCROLL($hWnd, $Msg, $wParam, $lParam)
...
EndFunc ;==>WM_HSCROLL
Func WM_VSCROLL($hWnd, $Msg, $wParam, $lParam)
...
EndFunc ;==>WM_VSCROLL
#EndRegion###Functions###########################
P.S. Ich nehm auch gern Kritik bezüglich meines Programmierstils entgegen.