Vorschläge/Hilfe: Optimale GUIStruktur

  • Hallo, ich brauch schon wieder eure Hilfe ;)

    Ich hab ein kleines Script geschrieben, bei dem Bilder untereinander angezeigt werden.. nun bräuchte ich von euch vorschläge, wie ich mein GUI am besten "Designen" kann...

    Ich schreib euch mal das Script:

    [autoit]


    #include <GUIConstantsEx.au3>
    #Include <Array.au3>

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ;~ $iFile = FileOpenDialog("Bitte ein Bild selektieren", "", "Bild (*.jpg;*.png;*.bmp;*.gif)")
    ;~ $split = StringSplit ( $iFile, "\")
    ;~ $pfad = ""
    ;~ For $i=1 To $split[0] - 1
    ;~ $pfad=$pfad&"\"&$split[$i]
    ;~ Next
    ;~ $pfad = StringTrimLeft($pfad,1)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    $Folder = FileSelectFolder ( "Bilderordner wählen", @DesktopDir)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    $base_w = 150
    $base_h = 150

    [/autoit][autoit][/autoit][autoit]

    $hGUI_w = @DesktopWidth-10
    $hGUI_h = @DesktopHeight-70
    $button_w = 100

    [/autoit][autoit][/autoit][autoit]

    $hGUI = GUICreate("", $hGUI_w, $hGUI_h)
    $button = GUICtrlCreateButton("Exit", $base_w + ($hGUI_w - $base_w - $button_w ) / 2, $hGUI_h / 2 - 12, $button_w)
    GUISetState()

    [/autoit][autoit][/autoit][autoit]

    Func GetImageDim($file) ;code by Melba23 - modified by UEZ
    Local $sFile = StringRegExp($file, "(?i).*\\(.*)", 3)
    If Not IsArray($sFile) Or @error Then Return SetError(1, 0, 0)
    Local $sPath = StringRegExp($file, "(?i)(.*)\\.+", 3)
    If Not IsArray($sFile) Or @error Then Return SetError(1, 0, 0)
    Local $sDimensions = ""
    Local $oShellApp = ObjCreate("shell.application")
    If IsObj($oShellApp) Then
    Local $oDir = $oShellApp.NameSpace($sPath[0])
    If IsObj($oDir) Then
    Local $oFile = $oDir.Parsename($sFile[0])
    If IsObj($oFile) Then
    If @OSBuild > 6000 Then
    $sDimensions = $oDir.GetDetailsOf($oFile, 31)
    ElseIf @OSVersion = "WIN_XP" Then
    $sDimensions = $oDir.GetDetailsOf($oFile, 26)
    EndIf
    EndIf
    EndIf
    EndIf
    If $sDimensions = "" Then Return SetError(1, 0, 0) ;"Object creation failed"
    Local $aDimensions = StringRegExp($sDimensions, "(?i)[\d]*x*[\d]", 3)
    If Not IsArray($aDimensions) Then Return SetError(1, 0, 0) ;"Cannot get image resolution!"
    Return SetError(0, 0, $aDimensions)
    EndFunc

    Func CreatePic($iFile, $picbaseY = 10, $picbaseX = 10)
    $iD = GetImageDim($iFile)
    $iW = $iD[0]
    $iH = $iD[1]
    If @error Then Exit

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    If $iW < $base_w And $iH < $base_h Then
    $posPicX = $base_w / 2 - $iW / 2
    $posPicY = $base_h / 2 - $iH / 2
    $PicCID=GUICtrlCreatePic($iFile, $posPicX + $picbaseX, $posPicY + $picbaseY, $iW, $iH)
    Else
    If $iW > $iH Then
    $f = $iW / $base_w
    $w = $iW / $f
    $h = $ih / $f
    Else
    $f = $iH / $base_h
    $w = $iW / $f
    $h = $ih / $f
    EndIf

    $posPicX = $base_w / 2 - $w / 2
    $posPicY = $base_h / 2 - $h / 2
    $PicCID=GUICtrlCreatePic($iFile, $posPicX + $picbaseX, $posPicY + $picbaseY, $w, $h)
    EndIf

    [/autoit][autoit][/autoit][autoit]

    Return $PicCID
    EndFunc

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ;*.jpg;*.png;*.bmp;*.gif
    Func SearchExt($ext)
    $search = FileFindFirstFile($Folder&"\*."&$ext)
    $all=""
    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    $all = $all &"|"& $file
    WEnd
    $all = StringTrimLeft($all, 1)
    $all = StringSplit($all,"|")
    _ArrayDelete($all,0)
    Return $all
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    #Region Search Pictures
    $jpgarray = SearchExt("jpg")
    $bmparray = SearchExt("bmp")
    $pngarray = SearchExt("png")
    $gifarray = SearchExt("gif")

    [/autoit][autoit][/autoit][autoit]

    _ArrayConcatenate($jpgarray, $bmparray)
    _ArrayConcatenate($jpgarray, $pngarray)
    _ArrayConcatenate($jpgarray, $gifarray)

    [/autoit][autoit][/autoit][autoit]

    $PicFiles = $jpgarray
    #Endregion Search Pictures

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    While _ArraySearch($PicFiles,"") <> -1
    $nullarray = _ArraySearch($PicFiles,"")
    If $nullarray <> -1 Then
    _ArrayDelete($PicFiles,$nullarray )
    EndIf
    Wend

    [/autoit][autoit][/autoit][autoit]

    _ArrayInsert($PicFiles,0 ,UBound($PicFiles))
    ;_ArrayDisplay($PicFiles)

    [/autoit][autoit][/autoit][autoit]

    $loop=0
    $status=GUICtrlCreateLabel($loop&" von "&$PicFiles[0]&" geladen",3,3,300)
    $indexid=0
    Dim $PicCIDs[$PicFiles[0]]
    For $i=10 To ($PicFiles[0])*160 Step 160
    GUICtrlSetData($status,$loop+1&" von "&$PicFiles[0]&" geladen")
    $loop=$loop+1
    $PicCIDs[$indexid]=CreatePic($Folder&"\"&$PicFiles[$loop], $i)
    $indexid=$indexid+1
    Next
    ;_ArrayDisplay($PicCIDs)

    [/autoit][autoit][/autoit][autoit]

    Do
    Switch GUIGetMsg()
    Case -3, $button
    GUIDelete($hGUI)
    Exit
    EndSwitch
    Until False

    [/autoit][autoit][/autoit][autoit][/autoit]


    Einfach starten und einen Ordner mit bildern auswählen..
    Hoffe ich könnt mir vorschläge bringen :)

    MfG

    PS: Vorschläge mein ich in dem sin, wie ich das am besten mit den Scrollbalken lösen kann :pinch:

    • Offizieller Beitrag

    Vllt kannst dus ja mit GDI+ versuchen? hab noch nicht getestet ob man das in die Scrollbar einbauen kann.


    Es ist leider nicht das erste mal, dass du Antworten in dieser Form bringst:
    "Ich weiß es nicht/hab es noch nie gemacht ... aber probier doch mal"
    Das ist wenig konstruktiv für das Forum. Bitte poste nur, wenn du auch wirklich etwas zum Thema beitragen kannst. Talken kannst du in der ShoutBox.

  • Also wenn du eine Scrollbar haben willst, nimm GDI+ und verschiebe die Bilder nach oben / unten, ob du sie in GDI+ oder GDI zeichnest ist egal...

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • hmm ok, könnt ich versuchen, aber ich hab nich wirklich ne ahnung von gdi+ und scrollbalken.. währt ich so nett und würdet mir ein paar scriptschnipsel posten? aber danke schonmal für die vorschläge, ich werde mich mal umsehen ;)

  • Von diesem Thread kannst du dir einiges abschauen.

    Und hier hast du ein gutes GDI+ Tutorial.

    Zitat

    [Heute, 11:39] Raupi: Soll ich es dir machen?
    [Heute, 11:47] BugFix: "Soll ich es dir machen? " - also Raupi !! bitte nicht so öffentlich :rofl:

    Zitat

    [Heute, 11:51] BugFix: und ich werde es mir jetzt machen - das Mittagessen :P

    AMsg UDF v1.00.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%
    OwnStyle UDF Version 1.10.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%

  • Gehört zwar nicht direkt zum Thema, aber ich habe mir das Script aus interesse mal angeschaut (man lernt ja nie aus^^) und mir ist aufgefallen, dass man NUR vom Desktop Ordner aussuchen kann. Ein Wechsel in z.B. Eigene Bilder ist nicht möglich. War das beabsichtigt?
    Wenn ich schreib die Zeile einfach so um:

    [autoit]

    $Folder = FileSelectFolder ( "Bilderordner wählen", "")

    [/autoit]

    ;)
    Viel Erfolg mit deiner Scrollleiste

  • Ok, ich hab es hinbekommen und zwar mit der GuiScroll.au3 UDF.. und das mit dem Desktop ist mir noch garnicht aufgefallen, aber auch egal.. ist nur zum testen erstmal, aber danke für den hinweis :)