Добрый Лев И бал Бабочек
Сутки добрыя!
Помогите с задачкой:
Есть форма с объектами
[......................[V]
[...........] [...........]
|Memo...........................|
|...................................|
|...................................|
|...................................|
|...................................|
|...................................|
|...................................|
[...........] [...........] [X]CheckBox1
у объектов TabOrder разбросался очень хаотично .. например CheckBox.TabOrder=1 .. так как объекты строятся динамически
Вопрос: Как "сортировать" все TabOrder'ы? Чтобы начиналось сверху слева от 1го и тд построчно?
Помогите с задачкой:
Есть форма с объектами
[......................[V]
[...........] [...........]
|Memo...........................|
|...................................|
|...................................|
|...................................|
|...................................|
|...................................|
|...................................|
[...........] [...........] [X]CheckBox1
у объектов TabOrder разбросался очень хаотично .. например CheckBox.TabOrder=1 .. так как объекты строятся динамически
Вопрос: Как "сортировать" все TabOrder'ы? Чтобы начиналось сверху слева от 1го и тд построчно?
Что мешает потратить две минуты выставив всем нужный ордер?
я же не знаю количества задаваемых и не могу каждому задать свои параметры кроме координат
//Цикл для вывода объектов
TLabel.TabOrder = i;
}
Синтаксиса Дельфи не не знаю, так что накидал так. Присваиваешь TabOrder'ы равные переменной-счетчику да и все.
Зачем же мне скакать сначала по одним однотипным компонентам (TEdit) потом по другим однотипным (TCombo) ? порожденным именно этим циклом, что переменная присваивает, что таб сам выстраивается
Ты бы лучше код показал, а не хохотал. Это у тебя не работает вообще-то.
цикл метки
цикл поля
цикл memo
итд (и компоненты мы не можем выдирать параллельно или каждую по 2 по 4 или по одной, и файл xml какой подсунут тоже не знаем, у нас цикл и полная динамика)
(код щас не под рукой)
все прально ты написал, все объекты будут: (для лейбла кстати не актуально, напутали сразу)
edit 1,2,3........~158
memo ~...159,160, 161....~1615165
combo ~....1615166,1615167,1615168....~54605465406406
всё ровненько и чистенько
а вот как они прыгают при нажатии tab по форме представь:
edit edit memo
memo edit
edit edit edit edit edit edit
edit memo combo combo
memo
edit combo combo memo edit
combo
combo
edit
memo edit combo edit
дотошно чтобы наглядно
Вопрос 1: Вы ручками добавляете элементы на форму или они генерируются динамически. Если динамически, код в студию.
memo ~...159,160, 161....~1615165
combo ~....1615166,1615167,1615168....~54605465406406
Так а если присваивать TabOrder в соответствии с 1,2,3....54605465406406, не получится, что надо?
Или я задачу не понял?
Как и сказано в посте, у объектов TabOrder разбросался очень хаотично .. например CheckBox.TabOrder=1 .. так как объекты строятся динамически
checkbox:
for i:=0 to PNode.selectNodes('//check').length-1 do
ChBox:=TCheckBox.Create(MainFRM);
ChBox.Parent:=MainFRM;
ChBox.Name:=PNode.selectNodes('//check').item[i].attributes.getNamedItem('name').nodeValue;
ChBox.Caption:=PNode.selectNodes('//check').item[i].text;
ChBox.Top:=StrToInt(PNode.selectNodes('//check').item[i].attributes.getNamedItem('top').nodeValue)+25;
ChBox.Left:=StrToInt(PNode.selectNodes('//check').item[i].attributes.getNamedItem('left').nodeValue);
ChBox.Width:0=StrToInt(PNode.selectNodes('//check').item[i].attributes.getNamedItem('width').nodeValue);
if PNode.selectNodes('//check').item[i].attributes.getNamedItem('ch').nodeValue='0' then ChBox.Checked:=False else ChBox.Checked:=True;
И так для каждого компонента (edit, memo, combo)
Пашка Баландин Они и строятся в строгом соответствии
Задача прыгать не "сначала по всем edit, потом по всем combo, затем по memo", задача прыгать аккуратненько слева на права, с переводом каретки на самой форме
1я строка допустим edit, combo (д.б. таб 1 и 2)
2я строка memo (д.б. таб 3)
3я строка снова edit (д.б. таб 4)
а иначе будет, допустим:
1я строка edit, combo (д.б. таб 1 и 3)
2я строка memo (д.б. таб 4)
3я строка снова edit (д.б. таб 2)
НУ Вот таг, еще разик
Так что вопрос так и остался на уровне TComponents[ComponentIndex] и не более ..
Вы их ручками туда ставите, либо некий мегаскрипт их за вас размещает?
ChBox:=TCheckBox.Create(MainFRM); сверху написано ж
Если из главной формы можно получить контейнер всех объектов, получаем его, разбиваем на отдельные элементы (мемори к мемори, боксы к боксам) далее сортируем их в соответствии с нужной моделью.
Выстраиваем по наименьшему Y координате относительно формы, ищем нет ли совпадающих Y, если есть дополнительно сравниваем по Х,
потом просто проходим по сортированому массиву и выставляем ордеры.
Потом уже эту коллекцию отфильтровать в соответствии с расположением форме...
ps: если коллекции - то они уже и создаются также как и по циклам, либо прога не должна быть динамической