Дополнить dropList своими записями

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
VWV
Бывалый
Сообщения: 60
Зарегистрирован: 12 Июнь 2015, 22:59
Откуда: Новороссийск
Благодарил (а): 4 раза
Поблагодарили: 1 раз

Дополнить dropList своими записями

Сообщение VWV »

Добрый день!

с10 abc (! Новичок)

На Browse добавил control FileDrop, который использую для фильтрации данных окна.
Подскажите в какой embed и какой код добавить, чтобы
в выпадающий список добавились новые строки, которых нет в таблице и которые нужны только
на время работы приложения. Сильно не пинайте. Спасибо
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Дополнить dropList своими записями

Сообщение kreator »

Методы класса для формирования списков примерно похожи (что лист, что дроп-лист, что комбо), но немного неодинаково работают. SV объявляли об идее привести всё к одному и тому же, но похоже руки не дошли. Попробуй вставить свой текст в метод ResetQueue после Parent Call. Только нужна проверка на количество записей в очереди. Сдаётся мне, что этот метод не один раз вызывается (в отличии от обычного Browse). И ещё нужно не забыть о сортировке или принудительном добавлении своих записей на определённую позицию в очереди. Если не получиться (что может быть), то можно попробовать вставить в SetQueueRecord. Тоже с проверкой, например на отсутствие записей.
We are hard at work… for you. :)
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Дополнить dropList своими записями

Сообщение kreator »

Сам код простой, типа:

Код: Выделить всё

FDB1.Q.Field1 = 1
FDB1.Q.Field2 = 2
add(FDB1.Q)
...
FDB1 можно заменить на self. Наверно.
We are hard at work… for you. :)
VWV
Бывалый
Сообщения: 60
Зарегистрирован: 12 Июнь 2015, 22:59
Откуда: Новороссийск
Благодарил (а): 4 раза
Поблагодарили: 1 раз

Дополнить dropList своими записями

Сообщение VWV »

Да..., после ШВС не привычно. Как и предсказывалось выше в методе ResetQueue добавилось, но стало работать. В SetQueueRecord добавилось многократно. В общем перебором :) получил нужный мне результат в Reset после parent. Спасибо
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Дополнить dropList своими записями

Сообщение kreator »

ИМХО в Reset неправильно ставить. В общем случае метод ResetQueue может быть вызван отдельно (не из Reset) и Вы потеряете свои строчки. Что нет так с ResetQueue?
We are hard at work… for you. :)
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

Дополнить dropList своими записями

Сообщение morkovin »

!для дроп-контрола на окне указываешь источник-очередь

From : GLO:RaionQ

!где-то в словаре прописываешь очередь
!declare Global queue
RaionQ QUEUE,PRE(Glo)
RaionName STRING(50)
END
...........
!заполняешь очереди из ini-файла
!fill drop boxes in main windows open
IniMgr.FetchQueue('Status','Stat',Glo:StatusQ,Glo:StatusQ.Status)
IniMgr.FetchQueue('Nadbavka','Period',Glo:PeriodQ,Glo:PeriodQ.Period)
IniMgr.FetchQueue('Vyplat','StatVypl',Glo:VyplStatQ,Glo:VyplStatQ.VypStatus)
IniMgr.FetchQueue('Raion','RaionName',Glo:RaionQ,Glo:RaionQ.RaionName)

!-------- так это выглядит в file.INI ----
[Raion]
RaionName=9
RaionName_1=Центральный
RaionName_2=Советский
RaionName_3=Дзержинский
RaionName_4=Ворошиловский
RaionName_5=Кировский
RaionName_6=Краснооктябрьский
RaionName_7=Тракторозаводский
RaionName_8=Красноармейский
RaionName_9=иногородний
RaionName_10=
RaionName_11=
RaionName_12=
RaionName_13=


использую это для мелких дроп-листов, которые редко но могут изменяться
WBR, morkovin
VWV
Бывалый
Сообщения: 60
Зарегистрирован: 12 Июнь 2015, 22:59
Откуда: Новороссийск
Благодарил (а): 4 раза
Поблагодарили: 1 раз

Дополнить dropList своими записями

Сообщение VWV »

kreator, в ResetQueue по клику моей записи фильтруются данные как будто я щелкаю по предыдущей. С записями созданными шаблонами все нормально
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Дополнить dropList своими записями

Сообщение kreator »

Вот такой кусок обнаружил (правда, не мой, коллеги, но, видимо, работает):

Код: Выделить всё

FDB4.SetQueueRecord PROCEDURE

  CODE
  IF RECORDS(FDB4.Q) = 0 
    FDB4.Q.PS:NOMER = ''
    FDB4.Q.PS:NAME = '> Все подразделения...' 
    ADD(FDB4.Q,1) 
    IF ERRORCODE() THEN STOP(ERROR()).
  END
  PS:NAME = CLIP(PS:NOMER) & ' ' & CLIP(PS:NAME)
И ещё. Есть сейчас опция для дроплиста "All". Так вот эта строчка добавляется в ResetQueue.
И ещё. Знаю, что в комбо могут быть проблемы, потому что там идёт поиск по первым буквам. Может сейчас что-то изменилось, но раньше проблемы были.
VWV писал(а): 18 Октябрь 2018, 16:09 kreator, в ResetQueue по клику моей записи фильтруются данные как будто я щелкаю по предыдущей. С записями созданными шаблонами все нормально
Вот не очень понятно. Как у Вас происходит передача значения из дроплиста? Руками? Или в Actions положили параметр? Я бы отменил настройку в Actions. Делал бы руками. Стандартно происходит обращение в таблицу. В таблице этого значения нет, берётся старое. Перестраховались.
Можете привести кусок текста как вы добавляете свои записи.
We are hard at work… for you. :)
Аватара пользователя
ingasoftplus
Ветеран
Сообщения: 425
Зарегистрирован: 26 Декабрь 2006, 17:07
Откуда: Оттуда :)
Благодарил (а): 87 раз
Поблагодарили: 5 раз

Дополнить dropList своими записями

Сообщение ingasoftplus »

Код: Выделить всё

! Add the custom row in the reset method

FDBLocation.Reset PROCEDURE
  CODE
  ! Add <All> entry to the queue
  IF Records(SELF.Q) = 0
    Clear(SELF.Q)
    SELF.Q.PRE:DisplayFieldName = '<All>'
    Add(SELF.Q)
  END
  PARENT.Reset

! Then later on when the selection occurs detect if the user has selected our custom row and deal with it.
FDBLocation.TakeNewSelection PROCEDURE
  CODE
  PARENT.TakeNewSelection

  IF SELF.Q.PRE:DisplayFieldName = '<All>'
    Clear(PRE:Record)
    ! Do whatever else you need to do here I guess!
END
VWV
Бывалый
Сообщения: 60
Зарегистрирован: 12 Июнь 2015, 22:59
Откуда: Новороссийск
Благодарил (а): 4 раза
Поблагодарили: 1 раз

Дополнить dropList своими записями

Сообщение VWV »

Парни, спасибо за науку и помощь. Все получилось. За 2 дня узнал во сто крат больше, чем от чтения help-а
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Дополнить dropList своими записями

Сообщение kreator »

VWV писал(а): 19 Октябрь 2018, 10:24 Парни, спасибо за науку и помощь. Все получилось. За 2 дня узнал во сто крат больше, чем от чтения help-а
Видимо, специфика ООП, что help трудно доходит. Я взял за привычку смотреть сразу соурсы в каталоге \libsrc. Ну не сразу, но вообще очень полезная штука.
We are hard at work… for you. :)
Ответить