Процедура не понимает переданного ей значения.

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Гость

Сообщение Гость »

Здравствуйте!
cw55, швс
Есть таблица, в ней, при выборе какой-нибудь записи, открывается окно(mdi, toolbox), в котором отображается дополнительная информация по текущей записи. Понятное дело, что окно это процедура с параметрами. Назовем ее ViewImage(MyParametr), где MyParametr-String. Так вот, вызываю эту процедуру как
Start(ViewImage,50000,L:PARAMETR), предварительно присваиваю L:PARAMETR нужное значение, хожу по таблице, а ViewImage открывается всегда с одним и тем же первым значением и при переходе от записи к записи не меняет это значение. И чего ей не хватает, спрашивается:confused:


Написал: Ajra(8)
Гость

Сообщение Гость »

Так это... тулбокс запускается для КАЖДОЙ записи или только для первой? Почему он, собственно, должен менять значение?

---------------------------------------
C уважением,
Юрий Философов,
Главный программист
Корпорация "Диполь", Саратов
E-mail yufil@tacis-dipol.ru (служ)
yufil@mail.ru (дом)
ICQ#75924439
Написал: ClaList(2)
Аватара пользователя
StillZero
Ветеран
Сообщения: 454
Зарегистрирован: 06 Июль 2005, 2:17
Откуда: Хабаровск
Контактная информация:

Сообщение StillZero »

при выборе какой-нибудь записи
в ABC это типо надо перед вызовом процедуры сделать ThisWindow.Update(), в LEgacy видимо что то в этом духе, или по крайней мере get(Queue:Browse,choice(?MyListBox)), и видимо MyProcedure(Queue:Browse:MyParam)

Написал: PAA(27)
Гость

Сообщение Гость »

Значения в Toolbox должны менятся в зависимости от записи. Просто каждой записи соответствует картинка, вот и надо, чтобы при переходе от записи к записи картинка в toolbox изменялась. И несмотря на то, что значение L:PARAMETR перед вызовом процедуры изменяется, после START(ViewImage,50000,L:PARAMETR) процедура запоминает первое значение L:PARAMETR. Обновление окна не дает нужного результата, т.к. L:PARAMETR всегда один и тот же.
Написал: Ajra(8)
Гость

Сообщение Гость »

Я делаю это регулярно.Попробуй так
1.объяви нужные переменные в Local Data и внеси их в Hot Field
2.В точке embedds Validate record..... присвой этим переменным
нужные значения( через процедуру или напрямую)
Все должно работать
Успехов! LSGsoftware
Гость

Сообщение Гость »

Гость Вы кажется не поняли проблемы :). Значение L:PARAMETR теряется на входе в процедуру ViewImage, а в той процедуре где оно объявлено с ним все в порядке, при перемещении от записи к записи L:PARAMETR меняется так как нужно.

Написал: Ajra(8)
Гость

Сообщение Гость »

Угу, тож наступал на эти грабли :( , теперь объявляю локальные переменные и в Procedure Setup инициализирую их переданными в процедуру значениями.

ИМХО грабли возникают вот как:

Если объявить локальную переменную с таким-же именем как у входящего параметра (что-бы потом его сунуть в HotField и пр.), то компилятор ругнется

Warning: Lable Duplicated, second used: "var_name"
Но exe-шник соберет.

Но при работе Clarion инициализирует создаваемые переменные и при этом входящее значение потеряется.

--
С уважением,
Алексей Дынин
daa@polad.ru

(Добавление)

Никуда оно не теряется. Просто в Toolbox-е, который исполняется всегда в отдельном треде, для нее создается свой собчтвенный экземпляр. При старте прочедуры он инициализируется переданным значением и _все_. Дальше он живет своей собственной самостоятельной жизнью и к передаваемому параметру никакого отношения не имеет. Все дальнейшие обновления нужно делать ручками самостоятельно. Проще всего завести для передачи нового значения глобальную (или модульную, но тогда обе процедуры д.б. в одном модуле) нетредную переменную и после присваивания ей нового значения послать в тулбокс пользовательский event, а в обработке этого event-а сделать соотв.
обновление переменных и окна.

WBR, Nick Tsigouro. MailTo:Nick@arsis.ru
Написал: ClaList(2)
Ответить