Добрый Лев И бал Бабочек
Сутки добрыя!
Помогите с задачкой:

Есть форма с объектами

[......................[V]
[...........] [...........]

|Memo...........................|
|...................................|
|...................................|
|...................................|
|...................................|
|...................................|
|...................................|

[...........] [...........] [X]CheckBox1


у объектов TabOrder разбросался очень хаотично .. например CheckBox.TabOrder=1 .. так как объекты строятся динамически

Вопрос: Как "сортировать" все TabOrder'ы? Чтобы начиналось сверху слева от 1го и тд построчно?

Комментарии
13.11.2007 в 10:06

Инженер-электрик
Хоть бы язык назвал.
13.11.2007 в 10:14

Добрый Лев И бал Бабочек
исправлено
13.11.2007 в 18:21

Партизанский дуэт
Не поверю что у тебя на одной форме двести элементов с которыми нужно парится.
Что мешает потратить две минуты выставив всем нужный ордер?
13.11.2007 в 19:38

Добрый Лев И бал Бабочек
Это XML парсер :)
13.11.2007 в 19:50

Инженер-электрик
Объекты же выводятся последовательно?
13.11.2007 в 19:55

Добрый Лев И бал Бабочек
Через цикл for, сначала TLabel, потом TEdit, потом TMemo, TComboBox итд
я же не знаю количества задаваемых и не могу каждому задать свои параметры кроме координат
13.11.2007 в 20:48

Инженер-электрик
for(i=0...){
//Цикл для вывода объектов
TLabel.TabOrder = i;
}

Синтаксиса Дельфи не не знаю, так что накидал так. Присваиваешь TabOrder'ы равные переменной-счетчику да и все.
13.11.2007 в 22:03

Добрый Лев И бал Бабочек
Нужно это исправить, а не присваивать переменную :hah:

Зачем же мне скакать сначала по одним однотипным компонентам (TEdit) потом по другим однотипным (TCombo) ? порожденным именно этим циклом, что переменная присваивает, что таб сам выстраивается
13.11.2007 в 22:12

Инженер-электрик
Нужно это исправить, а не присваивать переменную :hah:
Ты бы лучше код показал, а не хохотал. Это у тебя не работает вообще-то.
13.11.2007 в 22:37

Добрый Лев И бал Бабочек
цикл вывода объектов:
цикл метки
цикл поля
цикл 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

дотошно чтобы наглядно :)
14.11.2007 в 11:01

Партизанский дуэт
TIMEKILLER Давайте разбиратся сначала, а то непонятно чего вы из под нас хотите.
Вопрос 1: Вы ручками добавляете элементы на форму или они генерируются динамически. Если динамически, код в студию.

14.11.2007 в 11:37

Инженер-электрик
edit 1,2,3........~158
memo ~...159,160, 161....~1615165
combo ~....1615166,1615167,1615168....~54605465406406


Так а если присваивать TabOrder в соответствии с 1,2,3....54605465406406, не получится, что надо?
Или я задачу не понял?
14.11.2007 в 17:26

Добрый Лев И бал Бабочек
Боглен

Как и сказано в посте, у объектов 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)

НУ Вот таг, еще разик :D
14.11.2007 в 17:31

Добрый Лев И бал Бабочек
Да, и присваивать статические табы нельзя (кроме координат, тк они будут расположены на своих родителях панелях (переделываю чутка прогу)), тк компоненты строятся в словаре к основной проге и повторяются вне словаря по тыщи раз :)

Так что вопрос так и остался на уровне TComponents[ComponentIndex] и не более ..
16.11.2007 в 18:24

Партизанский дуэт
TIMEKILLER Вы не показали сам механизм добавления объектов на форму.
Вы их ручками туда ставите, либо некий мегаскрипт их за вас размещает?
16.11.2007 в 20:31

Добрый Лев И бал Бабочек
Боглен :)
ChBox:=TCheckBox.Create(MainFRM); сверху написано ж
18.11.2007 в 16:46

Партизанский дуэт
Я с дельфи не работаю, могу только алгоритмично:
Если из главной формы можно получить контейнер всех объектов, получаем его, разбиваем на отдельные элементы (мемори к мемори, боксы к боксам) далее сортируем их в соответствии с нужной моделью.
Выстраиваем по наименьшему Y координате относительно формы, ищем нет ли совпадающих Y, если есть дополнительно сравниваем по Х,
потом просто проходим по сортированому массиву и выставляем ордеры.
19.11.2007 в 10:54

Партизанский дуэт
Или просто при создании тут же запхать объект в некую коллекцию.
Потом уже эту коллекцию отфильтровать в соответствии с расположением форме...
19.11.2007 в 12:06

Добрый Лев И бал Бабочек
Кажется придумал сортировку по возрастанию top+left

ps: если коллекции - то они уже и создаются также как и по циклам, либо прога не должна быть динамической