|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
05.05.2011, 21:43 | #1 |
Пользователь
Регистрация: 29.04.2011
Сообщений: 51
|
Как правильно задать цикл?
Доброго вечера!
В общем столкнулся с такой бедой. Есть компонент FrameBar. Запускаем программу. Поскольку изначально (программно) не заданно количество Items во FrameBar они создаются в процессе загрузки данных. Т.е. программа FormCreate -> Обращается к файлу INI (в нем указанно количество необходимых Items) -> Программа создает Items во FrameBare (FrameBar.Items.Insert(i)). Ок. А теперь нажимаем на любой Items на FrameBar'e, происходит событие OnCreateFrame, которое программно ссылается на общую процедуру CreateFrame. Все замечательно работает но вот проблема: Items'ы идут в последовательности от 0 и до Items.Count. Процедуру для события OnCreateFrame я написал одну общую для всех Items, поскольку при нажатии на любой из Items он ссылается на одинаковые файлы с данными, в которых в свою очередь уже как раз различные данные для каждого Items в виде массива. В чем собственно проблема: когда программа выполняет общую процедуру CreateFrame, то загружает данные по Index'у последнего Items во FrameBar'e. Я так понял, это происходит потому, что в процедуре указан цикл, который пробегает по всему списку Items и соответственно до последнего Items. Отсюда логично, что он всегда будет загружать в любой Items данные последнего Items. Подскажите как быть. Спасибо. |
06.05.2011, 12:59 | #2 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,882
|
ну а код-то где& без кода тяжко помогать... из описания я вроде как понял, что не совсем правильно передается то, с чем собрались работать... ну а передать по ссылке ? procedure someproc(var anitem : Tsomeitem) и работать с ней внутри процедуры, ну а посылать типа так цикл->someproc(items[i]);
|
06.05.2011, 14:09 | #3 | ||
Пользователь
Регистрация: 29.04.2011
Сообщений: 51
|
Цитата:
Цитата:
SerialNumber - это функция из dll которая выдает строковое значение. Последний раз редактировалось BingoBongo; 06.05.2011 в 14:12. |
||
06.05.2011, 21:38 | #4 |
Пользователь
Регистрация: 29.04.2011
Сообщений: 51
|
Голова кипит. Кто-нибудь знает как в данной ситуации задать цикл или другой вариант, что бы получить требуемый результат??
Я прям в шоке прям от себя! ( |
06.05.2011, 22:45 | #5 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
phomm абсолютно прав.
без кода тут не разобраться! давайте небольшой тестовый проект (исходник). тогда легче будет что-то подсказать. Пока я понимаю так - у Вас вопрос, как в процедуре, которая назначена на все Items различить, на каком конкретно Items она вызвана? Дык если это событийная процедура (срабатывает на event), так там есть параметер (Sender : TObject) - вот этот Sender и есть нужный Вам items[i] ну, либо задействуйте при создании поле Items[i].tag := i; |
06.05.2011, 22:59 | #6 | ||
Пользователь
Регистрация: 29.04.2011
Сообщений: 51
|
Цитата:
А как в моем случае обработать с помощью Sender? Цитата:
|
||
06.05.2011, 23:20 | #7 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Мы продолжаем играть в угадайку, а Вы продолжаете играть в партизана... Где код?!
Ладно, будем решать задачу кусочками... дайте описание процедуры/метода LoadFrame |
06.05.2011, 23:25 | #8 | |
Сливочное масло
Участник клуба
Регистрация: 01.01.2011
Сообщений: 1,149
|
Цитата:
Код:
Сливочное масло Valio - компиляция как по маслу
|
|
06.05.2011, 23:27 | #9 | ||
Пользователь
Регистрация: 29.04.2011
Сообщений: 51
|
Цитата:
только он оооочень big Цитата:
|
||
06.05.2011, 23:34 | #10 | |
Пользователь
Регистрация: 29.04.2011
Сообщений: 51
|
Цитата:
цикл for (я пробовал). в прочем, я же вам говорю что начинка процедуры LoadFrame в себе как таковой сути не несет. LoadFrame(Str: String; F: TCustomFrame); так вот. чтобы опередить Str - я использую из библиотеки dll некую условную базу dll case SN of 0: Result := '0000001'; 1: Result := '0000002'; 2: Result := '0000003'; ... end; а уже в приложении присваиваю Str (который в LoadFrame) номер требуемого значения, за счет ЭТОГО САМОГО Items во FrameBar'e SerialNumber(Items[i]) в итоге имеем LoadFrame(SerialNumber(Items[i]), Frame); но проблема в том, что при использовании цикла, процедура прогоняет весь цикл и загружает мне последнее значение из dll. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
не могу разобраться как правильно оформить цикл | NICmito | Общие вопросы C/C++ | 6 | 17.12.2009 18:01 |
Как правильно задать размер TextBox-a? | Diego__ | Microsoft Office Word | 3 | 02.09.2009 11:27 |
Как правильно построить цикл для выборки? | Tanuska___:) | БД в Delphi | 1 | 12.01.2009 14:50 |
Задать цикл | Dagir | БД в Delphi | 1 | 01.09.2008 11:08 |