Hallo.
Wie auf dem Bild unten zu sehen ist, erzeugt GUICtrlCreatePic() einige unschöne "Artefakte" auf den Pics. Ich habe es bisher nicht geschafft den Ursprung dieser Bildfehler auszumachen. Der Code ist soweit ich das sagen kann korrekt. Die Bilder auf meiner Festplatte weisen keinerlei Fehler auf.
Um dieses Problem zu beheben, habe ich bereits versucht, das Bild per GDI+ einzulesen, resizen und neu abzuspeichern. Hat auch wunderbar geklappt - Das Bild wird in der richtigen Größe erstellt. Ohne Bildfehler! (siehe Bild nr 2)
Komisch ist auch, dass die Bildfehler nur in den, mit einer For-Next-Schleife, erstellten Bildern auftreten. Ich benutze das gleiche Bild für einen Hover effekt ( siehe Bild, aufgehellte Fläche ) und in diesem treten keine Fehler auf.
Die Artefakte sind für jede Auflösung anders. manchmal ist es nur ein winziger punkt und manchmal zieht sich ein Strich durch das komplette Pic. (Im bild unten ist der Fehler immer ein Strich am rechten Rand des pics.)
Das ist zum Mäusemelken
Hier mal ein Ausschnitt aus dem Code:
Spoiler anzeigen
Dim $hGrid[6][7]
Local $aPos = WinGetPos($hGUI), $sx, $sy, $ix = 0, $iy = 0, $x, $y, $w = ($aPos[2] / 7), $h = ($aPos[3] / 6)
_ImageResize(@ScriptDir & "\IMG\day.jpg", @ScriptDir & "\IMG\Res\day.jpg", $w, $h)
$start = _MonthsFirst2Weekday($sDate, $date, 1)
For $i = 0 To 41
GUICtrlCreatePic(@ScriptDir & "\IMG\Res\day.jpg", $x, $y, 0, 0)
GUICtrlSetState(-1,$GUI_DISABLE)
$hGrid[$iy][$ix] = _DrawStringLable($hGUI,"",22,$x,$y,$w,$h,0x000000,"Arial",Bitor(0x01,0x0200))
;Func _DrawStringLable($hWnd, $sText, $iSize = 16, $x = 20, $y = 20, $w = -1, $h = -1, $iColor = 0x000000, $sFont = "Arial", $sStyle=Default, $sSyleEx=Default$iDbg = 0)
GUICtrlSetOnEvent($hGrid[$iy][$ix], "_Switch2DayView")
Woran kann das liegen?
Gruß, SEuBo
Edit: Für nuts hier noch mal extra die komplette Funktion
Spoiler anzeigen
Func _CreateGrid($hGUI, $sDate)
$hLast = GUISwitch($hGUI)
Dim $hGrid[6][7]
Local $aPos = WinGetPos($hGUI), $sx, $sy, $ix = 0, $iy = 0, $x, $y, $w = ($aPos[2] / 7), $h = ($aPos[3] / 6)
_ImageResize(@ScriptDir & "\IMG\day.jpg", @ScriptDir & "\IMG\Res\day.jpg", $w, $h)
$start = _MonthsFirst2Weekday($sDate, $date, 1)
For $i = 0 To 41
GUICtrlCreatePic(@ScriptDir & "\IMG\Res\day.jpg", $x, $y, 0, 0)
GUICtrlSetState(-1,$GUI_DISABLE)
$hGrid[$iy][$ix] = _DrawStringLable($hGUI,"",22,$x,$y,$w,$h,0x000000,"Arial",Bitor(0x01,0x0200))
;Func _DrawStringLable($hWnd, $sText, $iSize = 16, $x = 20, $y = 20, $w = -1, $h = -1, $iColor = 0x000000, $sFont = "Arial", $iDbg = 0)
GUICtrlSetOnEvent($hGrid[$iy][$ix], "_Switch2DayView")
If $i <= 8 And $ix = $start - 1 Then
$hGridDate[$iy][$ix] = StringFormat("%02i", 01)
Local $sx = $ix
EndIf
$x += $w
$ix += 1
If $x + $w > $aPos[2] Then
$x = 0
$y += $h
$ix = 0
$iy += 1
EndIf
Next
Local $ix = $sx + 1, $iy = 0, $day = 1
$aSplit = StringSplit($sDate, ".")
For $i = $ix To _DateDaysInMonth($aSplit[3], $aSplit[2]) + $ix - 2
If $ix + 1 > UBound($hGridDate, 2) Then
$ix = 0
$iy += 1
EndIf
$day += 1
$hGridDate[$iy][$ix] = StringFormat("%02i", $day)
$ix += 1
Next
GUICtrlSetData($date, _NowCalcDate())
GUISwitch($hLast)
Return $hGrid
EndFunc ;==>_CreateGrid
EDIT2: Script angehängt. Wenn auch ungern