Ниже расположен архив, в котором написан впринципе простенький код, перерисовывающий GUI при изменении чекбокса. Проблема в том, что при нескольких нажатиях на чекбокс, меняется масштаб отображения картинки, вначале практически незаметный, через 10-20 нажатий появляется ощущение того, что неправильно расставлены координаты
Собственно сам код:(все что нужно для работы данного кода, без изменений, - во вложении(было бы, если бы не ограничение в 200КБ, а так, во вложении только код представленный ниже))
Пока придумывал название темы, и способ как прикрепить к теме файл размером больше 200Кб, в конференции уже подсказали, проблема в стиле WS_BORDER, без него отображение вполне нормальное.
Но все, же как поступить в случае если необходимо разделение карты на ячейки?
И опять же, из той же конфы пришел гениальный совет, отображать пикчи на расстоянии в 1 пкс друг от друга
Собственно сам код:(все что нужно для работы данного кода, без изменений, - во вложении(было бы, если бы не ограничение в 200КБ, а так, во вложении только код представленный ниже))
Код:
#include <IE.au3>
#include <Date.au3>
#include <Array.au3>
#include <File.au3>
#include <Table.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
Global $aMap[110][90][6]
Global $readpath = @ScriptDir&'\MapDat.txt'
Global $writepath = @ScriptDir&'\MapperSource.txt'
Global $ymax=9, $xmax=9, $CellSize = 80
Global $pic[$xmax+1][$ymax+1]
Global $label[$xmax+1][$ymax+1]
Global $coord[$xmax+1][$ymax+1]
Global $number[$xmax+1][$ymax+1]
Global $summary[$xmax+1][$ymax+1]
Global $base[$xmax+1][$ymax+1]
Global $tostart[$xmax+1][$ymax+1]
Global $tofinish[$xmax+1][$ymax+1]
Global $parent[$xmax+1][$ymax+1]
_ReadMap($aMap, $writepath)
Global $currentX = 11, $currentY = 12
form()
while 1
WEnd
Func form()
$Form1 = GUICreate("Form1", $xmax*$cellsize+15+200, $ymax*$cellsize+35, -1, -1, $WS_EX_LAYERED)
Global $mapimagecheck=GUICtrlCreateCheckbox("Использовать картинки карты",5,5)
GUICtrlSetOnEvent(-1, "update")
$font = "Myriad Pro"
$z=Int($xmax/2)
ConsoleWrite($z)
GUISetState(@SW_LOCK)
For $x = 1 To $ymax
For $y = 1 To $xmax
$pic[$x][$y] = GUICtrlCreatePic(@ScriptDir&"\..\img\simple\0.jpg", ($x-1)*$CellSize+5+200, ($y-1)*$CellSize+5, $CellSize, $CellSize, $WS_BORDER)
$coord[$x][$y] = GUICtrlCreateLabel($x&" "&$y, ($x-1)*$CellSize+8+200, ($y-1)*$CellSize+5, 32, 15)
GUICtrlSetBkColor (-1,$GUI_BKCOLOR_TRANSPARENT)
;GUICtrlSetColor(-1, 0xffff00)
GUICtrlSetFont(-1, 9, 700, 0, $font)
Next
Next
GUISetState(@SW_UNLOCK)
GUISetState(@SW_SHOW)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
EndFunc
Func update();$x0, $y0)
$z=Int($xmax/2)
If BitAND(GUICtrlRead($mapimagecheck), $GUI_CHECKED) Then
GUISetState(@SW_LOCK)
$y=($ymax-($z*2+1))/2+1
For $j = $currentY-$z To $currentY+$z
$x=($xmax-($z*2+1))/2+1
For $i = $currentX-$z To $currentX+$z
GUICtrlSetImage($pic[$x][$y], @ScriptDir&"\..\img\"&$i&"_"&$j&".jpg")
GUICtrlSetData($coord[$x][$y], $i&" "&$j)
$x+=1
Next
$y+=1
Next
GUISetState(@SW_UNLOCK)
;MsgBox(64, 'Info', 'Checkbox_1 отмечен')
Else
GUISetState(@SW_LOCK)
$y=($ymax-($z*2+1))/2+1
For $j = $currentY-$z To $currentY+$z
$x=($xmax-($z*2+1))/2+1
For $i = $currentX-$z To $currentX+$z
Select
Case $aMap[$i][$j][1] = 0
GUICtrlSetImage($pic[$x][$y], @ScriptDir&"\..\img\simple\0.jpg")
Case $aMap[$i][$j][1] = 2
GUICtrlSetImage($pic[$x][$y], @ScriptDir&"\..\img\simple\5.jpg")
Case Else
Select
Case $aMap[$i][$j][2] = 1
GUICtrlSetImage($pic[$x][$y], @ScriptDir&"\..\img\simple\1.jpg")
Case $aMap[$i][$j][2] = 2
GUICtrlSetImage($pic[$x][$y], @ScriptDir&"\..\img\simple\2.jpg")
Case $aMap[$i][$j][2] = 3
GUICtrlSetImage($pic[$x][$y], @ScriptDir&"\..\img\simple\3.jpg")
Case $aMap[$i][$j][2] = 4
GUICtrlSetImage($pic[$x][$y], @ScriptDir&"\..\img\simple\4.jpg")
EndSelect
EndSelect
$x+=1
Next
$y+=1
Next
GUISetState(@SW_UNLOCK)
;MsgBox(64, 'Info', 'Checkbox_1 не отмечен')
EndIf
GUISetState(@SW_SHOW)
EndFunc
Func _ReadMap(ByRef $aMapArray, $path)
Dim $aTemp
_FileReadToArray($path,$aTemp)
;_ArrayDisplay($aTemp)
For $i = 1 to UBound($aTemp)-1
$aStr = StringSplit($aTemp[$i],'|')
For $j = 1 To 3
$aMapArray [$aStr[1]][$aStr[2]][$j] = $aStr[$j+2]
Next
Next
ConsoleWrite("Чтение прошло успешно"&@CRLF)
EndFunc
Func CLOSEClicked()
Exit
EndFunc
Пока придумывал название темы, и способ как прикрепить к теме файл размером больше 200Кб, в конференции уже подсказали, проблема в стиле WS_BORDER, без него отображение вполне нормальное.
Но все, же как поступить в случае если необходимо разделение карты на ячейки?
И опять же, из той же конфы пришел гениальный совет, отображать пикчи на расстоянии в 1 пкс друг от друга