tecae
Новичок
- Сообщения
- 5
- Репутация
- 0
Версия AutoIt: 3.3.14.1
Описание:
Доброго времени суток.
Есть массив вида Пример = [0,1,1,1,2,4,1,4,2,4,4,1,1,2,2,4,1,1,2,1,2,0]
В зависимости от каждого флага разместить элемент управления
Попытка решения 8)
Из кода изъяты строки не относящиеся к алгоритму
Предполагаемый результат для данного случая
Контролы I4 I5 I8 I9 I10 I18 I20 = высота * 2
Контролы I8 I9 I10 ширина = (I6 ширина + I7 ширина )/3
Примечания:
Помогите построить универсальный алгоритм для любого случая удовлетворяющего $pos_k = "0[124]*?0"
Недостаток выше указанного кода - для его расширения и адаптации нужно применять циклы с проверкой назад и в перед что в последствии замедляет перерисовку формы
Описание:
Доброго времени суток.
Есть массив вида Пример = [0,1,1,1,2,4,1,4,2,4,4,1,1,2,2,4,1,1,2,1,2,0]
В зависимости от каждого флага разместить элемент управления
Попытка решения 8)
Из кода изъяты строки не относящиеся к алгоритму
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
; Флаги расположения
Global const $NEW_CLMN = 1 ; новая колонка сдвиг в право обнуление высоты
Global const $NEW_STR = 2 ; новая строка сдвиг вниз
Global const $NEW_CLMN_STR = 4 ; новая колонка сдвиг в право в той же строке без обнуления высоты
;===========================================================================
; Входные данные
Local $pos_k[22] = [0,1,1,1,2,4,1,4,2,4,4,1,1,2,2,4,1,1,2,1,2,0] ; масив флагов может быть любым набором 4 знаков 0,..[124].,0
Local $Start_w = 100 , $Start_h = 20 , $Start_l = $Start_w *-1 , $Start_t = 0 , $K = 1 ; стартовые размеры контролов и отступ
;===========================================================================
;Реализация
Local $m_str_h = 3 ;
Local $result[21] = [21]
Local $old_w = 100
Local $old_h = 20
Local $pos = 1
GUICreate("Мой GUI", 1024, 768, -1, -1, $WS_OVERLAPPEDWINDOW + $WS_POPUP) ; Создаёт окно в центре экрана
GUISetState(@SW_SHOW) ; показывает созданное окно
For $i = 1 To 20 Step 1
$pos = $pos_k[$i]
Switch $pos
Case $NEW_CLMN
$Start_l = $Start_l+$Start_w+$K
$Start_t = 0
$Start_w = 100
If $pos_k[$i+1] = $NEW_CLMN Then ; дальше новая колонка
$Start_h = 20 * $m_str_h
ElseIF $pos_k[$i+1] = $NEW_STR Then ; дальше строка
$Start_h = 20
ElseIF $pos_k[$i+1] = $NEW_CLMN_STR Then ; дальше строка
$Start_h = 20
; $Start_w = 100 / 2
EndIf
Case $NEW_STR
;$Start_l = 0 ; не трогаем
$Start_t = $Start_t + $Start_h + $K
$Start_w = 100
$Start_h = 20
If $pos_k[$i+1] = $NEW_CLMN Then ; дальше новая колонка
;$Start_h = 20 * $m_str_h
ElseIF $pos_k[$i+1] = $NEW_STR Then ; дальше строка
;l$Start_h = 20
ElseIF $pos_k[$i+1] = $NEW_CLMN_STR Then ; дальше строка
$Start_w = 100 / 2
EndIf
If $pos_k[$i-1] = $NEW_CLMN_STR Then
$Start_l = $Start_l-$Start_w ; не трогаем
Endif
Case $NEW_CLMN_STR
$Start_l = $Start_l+$Start_w+$K
;$Start_t = 0 ; не трогаем
;$Start_w = 100
$Start_h = 20
Case Else
EndSwitch
$result[$i] = GUICtrlCreateLabel("F"&$pos&' = I'&$i , $Start_l, $Start_t, $Start_w, $Start_h, $SS_CENTER + $WS_BORDER)
Next
Do
$msg = GUIGetMsg()
Until $msg = $GUI_EVENT_CLOSE
Предполагаемый результат для данного случая
Контролы I4 I5 I8 I9 I10 I18 I20 = высота * 2
Контролы I8 I9 I10 ширина = (I6 ширина + I7 ширина )/3
Примечания:
Помогите построить универсальный алгоритм для любого случая удовлетворяющего $pos_k = "0[124]*?0"
Недостаток выше указанного кода - для его расширения и адаптации нужно применять циклы с проверкой назад и в перед что в последствии замедляет перерисовку формы