sss
Продвинутый
- Сообщения
- 332
- Репутация
- 96
Всем привет. Столкнулся с небольшой проблемой. Есть оболочка. В ней - 25 (а потом будет в разы больше, это тестовый вариант) элементов Radio в сетке 5х5. Координаты каждого записаны в двумерный массив. Надо по ходу нажатия их рисовать линии за ними (и если можно, ставить поверх него точку, перекрывающюю его, как будто он отмечен). Например: мы нажали контрол 2-5, потом 3-5 (х-у). От первого ко второму должна протянуться линия (черная, не толстая). Также есть ограничение по нажатию, но словами долго говорить, см. код внизу. Это все, конечно, можно сделать картинками, но, во-первых, мне не удалось контролы вытащить на передний план, а во-вторых, это неудобно и неточно. Можно ли как-нибудь эти линии рисовать (смотрю в сторону GDI+, но она мне никак не дается, непонятная...)
P.S: кнопка сброса не работает, не занимался ею. Здесь массив чуть другой, нежели в описании: здесь в массиве сетка 5:5, [x][y][f] - x- x координата, у-у координата, f-флаг: 0 - состояние, 1 - хэндл на контрол с координатами ху.
Код:
Dim $array[6][6][2]
$x_count=5
$y_count=5
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 281, 249, 212, 330)
$Radio1 = GUICtrlCreateRadio("", 72, 32, 17, 17)
$array[1][1][1]=$Radio1
$Radio2 = GUICtrlCreateRadio("", 96, 32, 17, 17)
$array[2][1][1]=$Radio2
$Radio3 = GUICtrlCreateRadio("", 120, 32, 17, 17)
$array[3][1][1]=$Radio3
$Radio4 = GUICtrlCreateRadio("", 144, 32, 17, 17)
$array[4][1][1]=$Radio4
$Radio5 = GUICtrlCreateRadio("", 168, 32, 17, 17)
$array[5][1][1]=$Radio5
$Radio6 = GUICtrlCreateRadio("", 72, 56, 17, 17)
$array[1][2][1]=$Radio6
$Radio7 = GUICtrlCreateRadio("", 96, 56, 17, 17)
$array[2][2][1]=$Radio7
$Radio8 = GUICtrlCreateRadio("", 120, 56, 17, 17)
$array[3][2][1]=$Radio8
$Radio9 = GUICtrlCreateRadio("", 144, 56, 17, 17)
$array[4][2][1]=$Radio9
$Radio10 = GUICtrlCreateRadio("", 168, 56, 17, 17)
$array[5][2][1]=$Radio10
$Radio11 = GUICtrlCreateRadio("", 72, 79, 17, 17)
$array[1][3][1]=$Radio11
$Radio12 = GUICtrlCreateRadio("", 96, 79, 17, 17)
$array[2][3][1]=$Radio12
$Radio13 = GUICtrlCreateRadio("", 120, 79, 17, 17)
$array[3][3][1]=$Radio13
$Radio14 = GUICtrlCreateRadio("", 144, 79, 17, 17)
$array[4][3][1]=$Radio14
$Radio15 = GUICtrlCreateRadio("", 168, 79, 17, 17)
$array[5][3][1]=$Radio15
$Radio16 = GUICtrlCreateRadio("", 72, 104, 17, 17)
$array[1][4][1]=$Radio16
$Radio17 = GUICtrlCreateRadio("", 96, 104, 17, 17)
$array[2][4][1]=$Radio17
$Radio18 = GUICtrlCreateRadio("", 120, 104, 17, 17)
$array[3][4][1]=$Radio18
$Radio19 = GUICtrlCreateRadio("", 144, 104, 17, 17)
$array[4][4][1]=$Radio19
$Radio20 = GUICtrlCreateRadio("", 168, 104, 17, 17)
$array[5][4][1]=$Radio20
$Radio21 = GUICtrlCreateRadio("", 71, 130, 17, 17)
$array[1][5][1]=$Radio21
$Radio22 = GUICtrlCreateRadio("", 95, 130, 17, 17)
$array[2][5][1]=$Radio22
$Radio23 = GUICtrlCreateRadio("", 119, 130, 17, 17)
$array[3][5][1]=$Radio23
$Radio24 = GUICtrlCreateRadio("", 143, 130, 17, 17)
$array[4][5][1]=$Radio24
$Radio25 = GUICtrlCreateRadio("", 167, 130, 17, 17)
$array[5][5][1]=$Radio25
$Button1 = GUICtrlCreateButton("Сброс", 8, 176, 75, 25, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Выход", 168, 176, 75, 25, $WS_GROUP)
$Button3 = GUICtrlCreateButton("Старт", 88, 176, 75, 25, $WS_GROUP)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
For $i=1 to 5
$array[1][$i][0]=0
$array[2][$i][0]=0
$array[3][$i][0]=0
$array[4][$i][0]=0
$array[5][$i][0]=0
Next
_ArrayDisplay($array)
$checked_num_x=0
$checked_num_y=0
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
case $Button2
Exit
case $Button1
For $i=1 to 5
$array[1][$i][0]=0
$array[2][$i][0]=0
$array[3][$i][0]=0
$array[4][$i][0]=0
$array[5][$i][0]=0
Next
_ArrayDisplay($array)
case $Button3
GUICtrlSetState($Radio13,$GUI_CHECKED)
_Check()
case $Radio1
_Check()
case $Radio2
_Check()
case $Radio3
_Check()
case $Radio4
_Check()
case $Radio5
_Check()
case $Radio6
_Check()
case $Radio7
_Check()
case $Radio8
_Check()
case $Radio9
_Check()
case $Radio10
_Check()
case $Radio11
_Check()
case $Radio12
_Check()
case $Radio13
_Check()
case $Radio14
_Check()
case $Radio15
_Check()
case $Radio16
_Check()
case $Radio17
_Check()
case $Radio18
_Check()
case $Radio19
_Check()
case $Radio20
_Check()
case $Radio21
_Check()
case $Radio22
_Check()
case $Radio23
_Check()
case $Radio24
_Check()
case $Radio25
_Check()
EndSwitch
WEnd
Func _Parse()
_ArrayDisplay($array)
EndFunc
Func _Check()
$array[$checked_num_x][$checked_num_y][0]=-2
For $y=1 to 5
For $x=1 to 5
if $array[$x][$y][0]=-2 then
GUICtrlSetState($array[$x][$y][1],$gui_disable)
ContinueLoop
EndIf
if BitAND(GUICtrlRead($array[$x][$y][1]), $GUI_CHECKED) = $GUI_CHECKED Then
$array[$x][$y][0]=1
$checked_num_x=$x
$checked_num_y=$y
Else
if $x<$x_count and $y<$y_count Then
if BitAND(GUICtrlRead($array[$x+1][$y+1][1]), $GUI_CHECKED) = $GUI_CHECKED Then
$array[$x][$y][0]=0
GUICtrlSetState($array[$x][$y][1],$gui_enable)
ContinueLoop
EndIf
EndIf
if $y<$y_count Then
if BitAND(GUICtrlRead($array[$x][$y+1][1]), $GUI_CHECKED) = $GUI_CHECKED Then
$array[$x][$y][0]=0
GUICtrlSetState($array[$x][$y][1],$gui_enable)
ContinueLoop
EndIf
EndIf
if $x>1 and $y<$y_count Then
if BitAND(GUICtrlRead($array[$x-1][$y+1][1]), $GUI_CHECKED) = $GUI_CHECKED Then
$array[$x][$y][0]=0
GUICtrlSetState($array[$x][$y][1],$gui_enable)
ContinueLoop
EndIf
EndIf
if $x<$x_count Then
if BitAND(GUICtrlRead($array[$x+1][$y][1]), $GUI_CHECKED) = $GUI_CHECKED Then
$array[$x][$y][0]=0
GUICtrlSetState($array[$x][$y][1],$gui_enable)
ContinueLoop
EndIf
EndIf
if $x<=$x_count Then
if BitAND(GUICtrlRead($array[$x-1][$y][1]), $GUI_CHECKED) = $GUI_CHECKED Then
$array[$x][$y][0]=0
GUICtrlSetState($array[$x][$y][1],$gui_enable)
ContinueLoop
EndIf
EndIf
if $x<$x_count and $y>1 Then
if BitAND(GUICtrlRead($array[$x+1][$y-1][1]), $GUI_CHECKED) = $GUI_CHECKED Then
$array[$x][$y][0]=0
GUICtrlSetState($array[$x][$y][1],$gui_enable)
ContinueLoop
EndIf
EndIf
if $y<=$y_count Then
if BitAND(GUICtrlRead($array[$x][$y-1][1]), $GUI_CHECKED) = $GUI_CHECKED Then
$array[$x][$y][0]=0
GUICtrlSetState($array[$x][$y][1],$gui_enable)
ContinueLoop
EndIf
EndIf
if $x<=$x_count and $y<=$y_count Then
if BitAND(GUICtrlRead($array[$x-1][$y-1][1]), $GUI_CHECKED) = $GUI_CHECKED Then
$array[$x][$y][0]=0
GUICtrlSetState($array[$x][$y][1],$gui_enable)
ContinueLoop
EndIf
EndIf
$array[$x][$y][0]=-1
GUICtrlSetState($array[$x][$y][1],$gui_disable)
EndIf
Next
Next
EndFunc