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

Clarion, Clarion 7

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

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

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

Сообщение VWV » 18 Октябрь 2018, 10:18

Добрый день!

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

На Browse добавил control FileDrop, который использую для фильтрации данных окна.
Подскажите в какой embed и какой код добавить, чтобы
в выпадающий список добавились новые строки, которых нет в таблице и которые нужны только
на время работы приложения. Сильно не пинайте. Спасибо

kreator
Ветеран
Сообщения: 3243
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

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

Сообщение kreator » 18 Октябрь 2018, 12:14

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

kreator
Ветеран
Сообщения: 3243
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

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

Сообщение kreator » 18 Октябрь 2018, 12:20

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

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

FDB1.Q.Field1 = 1
FDB1.Q.Field2 = 2
add(FDB1.Q)
...
FDB1 можно заменить на self. Наверно.
We are hard at work… for you. :)

VWV
Новичок
Сообщения: 20
Зарегистрирован: 12 Июнь 2015, 22:59
Откуда: Новороссийск

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

Сообщение VWV » 18 Октябрь 2018, 15:08

Да..., после ШВС не привычно. Как и предсказывалось выше в методе ResetQueue добавилось, но стало работать. В SetQueueRecord добавилось многократно. В общем перебором :) получил нужный мне результат в Reset после parent. Спасибо

kreator
Ветеран
Сообщения: 3243
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

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

Сообщение kreator » 18 Октябрь 2018, 15:19

ИМХО в Reset неправильно ставить. В общем случае метод ResetQueue может быть вызван отдельно (не из Reset) и Вы потеряете свои строчки. Что нет так с ResetQueue?
We are hard at work… for you. :)

Аватара пользователя
morkovin
Ветеран
Сообщения: 610
Зарегистрирован: 20 Июль 2005, 13:53
Откуда: Volgograd, Russia
Контактная информация:

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

Сообщение morkovin » 18 Октябрь 2018, 15:28

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

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
Новичок
Сообщения: 20
Зарегистрирован: 12 Июнь 2015, 22:59
Откуда: Новороссийск

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

Сообщение VWV » 18 Октябрь 2018, 16:09

kreator, в ResetQueue по клику моей записи фильтруются данные как будто я щелкаю по предыдущей. С записями созданными шаблонами все нормально

kreator
Ветеран
Сообщения: 3243
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

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

Сообщение kreator » 18 Октябрь 2018, 16:32

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

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

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
Старожил
Сообщения: 271
Зарегистрирован: 26 Декабрь 2006, 17:07
Откуда: Оттуда :)

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

Сообщение ingasoftplus » 18 Октябрь 2018, 18:16

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

! 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
Новичок
Сообщения: 20
Зарегистрирован: 12 Июнь 2015, 22:59
Откуда: Новороссийск

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

Сообщение VWV » 19 Октябрь 2018, 10:24

Парни, спасибо за науку и помощь. Все получилось. За 2 дня узнал во сто крат больше, чем от чтения help-а

kreator
Ветеран
Сообщения: 3243
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

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

Сообщение kreator » 19 Октябрь 2018, 12:03

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

Ответить