Wenn man z.B. mit GUICtrlCreatePic ein 800x800 Pic macht und es dann mit GUICtrlSetImage erneuert und das Bild größer ist dann wird es nicht skaliert. Wie kann man es skalieren.
GUICtrlSetImage Problem
-
- [ offen ]
-
Molaynox -
17. Dezember 2010 um 21:42 -
Geschlossen -
Erledigt
-
-
Vielleicht die Bildgröße als Variable speichern und dann ggf. neu abfragen und dann ersetzen?
-
Hallo Molaynox,
hier eines meiner Beispiel-Skripte etwa abgeändert:
Spoiler anzeigen
[autoit]#cs -----------------------------------------------------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]AutoIt Version: 3.3.6.1
[/autoit] [autoit][/autoit] [autoit]
Author: AutoBert: http://www.autoit.de/index.php?page=Thread&threadID=21667Skriptbeispiel für den Umgang mit FileOpenDialog, GUICtrlCreateListView, GUICtrlCreateListViewItem,
[/autoit] [autoit][/autoit] [autoit]
GUIRegisterMsg speziell für das Event $GUI_EVENT_DROPPED 347
#ce -------------------------------------------------------------------------------------------------------------------------
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <GuiListView.au3>
#include <File.au3>
#include <array.au3>
#include <GDIPlus.au3>Opt('MustDeclareVars', 1)
[/autoit] [autoit][/autoit] [autoit]Global $msg, $message, $var, $aFiles, $idfrmMain, $sSourcePath, $aItem
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Global $szDrive, $szDir, $szFName, $szExt, $hPic = -99
Global $aDropFiles[1], $WM_DROPFILES = 0x233$idfrmMain = GUICreate("BMP-, GIF- & JPG-Viewer", 824, 550, -1, -1, -1, $WS_EX_ACCEPTFILES)
[/autoit] [autoit][/autoit] [autoit]
Local $idfilemenu = GUICtrlCreateMenu("&Datei")
Local $idfileitem = GUICtrlCreateMenuItem("Öffnen", $idfilemenu)
GUICtrlSetState(-1, $GUI_DEFBUTTON)
Local $idexititem = GUICtrlCreateMenuItem("Beenden", $idfilemenu)
Local $idLV_Files = GUICtrlCreateListView("Name: |Pfad", 519, 5, 300, 490, BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT))
GUICtrlSetState(-1, $GUI_DROPACCEPTED)
Local $idbtnShow = GUICtrlCreateButton("&Zeige Bild", 519, 500, 140, 25)
Local $idClearLV = GUICtrlCreateButton("&Listview &leeren", 669, 500, 140, 25)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUIRegisterMsg($WM_DROPFILES, "WM_DROPFILES_FUNC")
GUISetState()
While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_DROPPED
_FilesDropped()
Case $idfileitem$message = "Um mehrere Dateien auszuwählen, ist die Strg-Taste oder die Shift-Taste zu drücken."
[/autoit] [autoit][/autoit] [autoit]$var = FileOpenDialog($message, @MyDocumentsDir & "", "Bilder (*.jpg;*.bmp)", 1 + 4)
[/autoit] [autoit][/autoit] [autoit]
If @error Then
MsgBox(4096, "", "Keine Datei(en) ausgewählt")
Else
_GUICtrlListView_BeginUpdate($idLV_Files)
$aFiles = StringSplit($var, "|")
If $aFiles[0] > 1 Then ;trifft nur bei Mehrfachauwal zu
;$aFiles[0] enthält Anzahl der Strings
;$aFiles[1] enthält den Pfad für alle ausgewählten Bilder
;$aFiles[2] enthält 1. Bild
;$aFiles[n+1] enthält n. Bild;Rückgabe des Fileopenialogs in einzzenlne Strings für Array splitten
[/autoit] [autoit][/autoit] [autoit]
;_ArrayDisplay($aFiles) ;Array anzeigen nur zu Verständnisuwecken evtl. aktivierenFor $i = 2 To $aFiles[0]
[/autoit] [autoit][/autoit] [autoit]
GUICtrlCreateListViewItem($aFiles[$i] & "|" & $aFiles[1], $idLV_Files)
Next
Else ;nur eine Datei ausgewählt
ConsoleWrite($aFiles[1] & @CRLF)
_PathSplit($aFiles[1], $szDrive, $szDir, $szFName, $szExt)
GUICtrlCreateListViewItem($szFName & $szExt & "|" & $szDrive & $szDir, $idLV_Files)
EndIf
_GUICtrlListView_SetColumnWidth($idLV_Files, 0, $LVSCW_AUTOSIZE)
;setzt die 1 Spalte auf die benötigte Breite des längsten Eintrags
_GUICtrlListView_SetColumnWidth($idLV_Files, 1, 0) ;zweite Spalte versteckt
_GUICtrlListView_EndUpdate($idLV_Files)
EndIf
Case $idClearLV
_GUICtrlListView_DeleteAllItems($idLV_Files)
Case $idbtnShow
$aItem = _GUICtrlListView_GetItemTextArray($idLV_Files)
_ShowPic($aItem)
Case $GUI_EVENT_CLOSE, $idexititem
Exit
EndSwitch
WEndFunc _ShowPic($aItem)
[/autoit] [autoit][/autoit] [autoit]
Local $sImageName = $aItem[2] & "\" & $aItem[1]
;$aItem[0] enthält Anzahl der Spalten [$aIem[1] die 1. Spalte usw.
;_ArrayDisplay($aItem) nur zu Verständnisuwecken evtl. aktivieren
ConsoleWrite("Pfad zur Datei:" & $aItem[2] & "\" & $aItem[1] & @CRLF) ;nur zu Verständnisuwecken evtl. deaktivieren
_GDIPlus_Startup()
Local $hImage = _GDIPlus_ImageLoadFromFile($sImageName)
Local $iX = _GDIPlus_ImageGetWidth($hImage)
Local $iY = _GDIPlus_ImageGetHeight($hImage)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_Shutdown()
Local $iRatio = $iX / $iY
ConsoleWrite("Orig.: " & $iX & " " & $iY & " " & $iRatio & @CRLF)
If $iRatio >= 1 Then
$iX = 500
$iY = $iX / $iRatio
Else
$iY = 300
$iX = $iY * $iRatio
EndIf
ConsoleWrite("Neu: " & $iX & " " & $iY & " " & $iRatio & @CRLF)
If $hPic <> -99 Then
GUICtrlSetImage($hPic,$sImageName)
ControlMove($idfileitem,"",$hPic,5,5,$iX,$iY)
Else
$hPic = GUICtrlCreatePic($sImageName, 5, 5, $iX, $iY)
EndIf
EndFunc ;==>_ShowPic#region ;Drag and Drop und Doppelklick
[/autoit] [autoit][/autoit] [autoit]
Func WM_DROPFILES_FUNC($hWnd, $msgID, $wParam, $lParam)
ConsoleWrite("WM_DropFiles_Func " & @CRLF)
Local $nSize, $pFileName
Local $nAmt = DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", 0xFFFFFFFF, "ptr", 0, "int", 255)
For $i = 0 To $nAmt[0] - 1
$nSize = DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", $i, "ptr", 0, "int", 0)
$nSize = $nSize[0] + 1
$pFileName = DllStructCreate("char[" & $nSize & "]")
DllCall("shell32.dll", "int", "DragQueryFile", "hwnd", $wParam, "int", $i, "ptr", DllStructGetPtr($pFileName), "int", $nSize)
ReDim $aDropFiles[$i + 1]
$aDropFiles[$i] = DllStructGetData($pFileName, 1)
$pFileName = 0
Next
EndFunc ;==>WM_DROPFILES_FUNCFunc _FilesDropped()
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite("Bin da " & @CRLF)
Local $szDrive, $szDir, $szFName, $szExt, $split
_GUICtrlListView_BeginUpdate($idLV_Files)
For $i = 0 To UBound($aDropFiles) - 1
$split = _PathSplit($aDropFiles[$i], $szDrive, $szDir, $szFName, $szExt)
$szExt = StringUpper($szExt)
;;consolewrite($aDropFiles[$i] & ", " & $szExt & @CRLF)
Switch $szExt
Case ".JPG", ".BMP", ".GIF"
GUICtrlCreateListViewItem($szFName & $szExt & "|" & $szDrive & $szDir, $idLV_Files)
EndSwitch
Next
_GUICtrlListView_SetColumnWidth($idLV_Files, 0, $LVSCW_AUTOSIZE)
;setzt die 1 Spalte auf die benötigte Breite des längsten Eintrags
_GUICtrlListView_SetColumnWidth($idLV_Files, 1, 0) ;zweite Spalte versteckt
_GUICtrlListView_EndUpdate($idLV_Files)
EndFunc ;==>_FilesDroppedFunc WM_NOTIFY($hWnd, $msgID, $wParam, $lParam)
[/autoit]
Local $tagNMHDR, $event, $hwndFrom, $code, $aItem
$tagNMHDR = DllStructCreate("int;int;int", $lParam)
If @error Then Return 0
$code = DllStructGetData($tagNMHDR, 3)
If $wParam = $idLV_Files And $code = -3 And _GUICtrlListView_GetSelectedCount($idLV_Files) > 0 Then
$aItem = _GUICtrlListView_GetItemTextArray($idLV_Files)
;;consolewrite($aItem[1] & ", " & $aItem[3] & @CRLF)
_ShowPic($aItem)
EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
#endregion ;Drag and Drop und DoppelklickDie Func _ShowPic ist der fü dich intereante Teil,
mfg autoBert