LIST как BROWSE (Clarion 5.5)

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
EugeneR
Посетитель
Сообщения: 30
Зарегистрирован: 02 Август 2011, 12:40
Откуда: г. Ленинск-Кузнецкий

Re: LIST как BROWSE (Clarion 5.5)

Сообщение EugeneR »

Привет всем! Огромное спасибо за разбор моей темы! Я же предупредил - я начинающий в CLARION'е. Да и программист - просто бооольшой любитель. Работа не с этим занятным делом связана. А конкретней по теме - ну, допустим, нужен обычный телефонный справочник. И так, база (кончно не ASCII - это даже мне понятно) на 4 поля: TELEFONE STRING(5), NAME STRING(31), ADDRESS STRING(31) и INFO STRING(31). В неё подгрузка из выбираемого текстового файла. Перемещение стрелками, функции редактирования - по EnterKey в поле под курсором. Выход из режима редактирования поля тоже по EnterKey. Сортировка по клику на заголовке столбца. Insert - добавить пустую запись в конец базы. Delete - удалить текущую запись. С этим вроде бы все ясно. Не могу разобраться как сделать фильтр с учетом всех четырех полей.
Спасибо.
Shur
Ветеран
Сообщения: 384
Зарегистрирован: 02 Июль 2011, 18:49

Re: LIST как BROWSE (Clarion 5.5)

Сообщение Shur »

Другое дело!
Могу посоветовать 2 варианта. Оба базируются на Browse-темплейте.
1. Воспользоваться QBE Filter Extension (20 минут работы с нуля).
2. Завести 4 локальных переменных, играющих роль фильтров да ещё одну "Фильтр включён/выключен". Естественно, размещаете их на окне.
Далее в embed ValidateRecord (Priority:5050) вставляете обработку типа

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

   if LOC:FilterEnabled
       if LOC:TELEFONE>'' and ~instring(upper(clip(LOC:TELEFONE)),upper(WP:TELEFONE),1,1)
          ReturnValue=Record:Filtered
       end   
       if LOC:NAME>'' and ~instring(upper(clip(LOC:NAME)),upper(WP:NAME),1,1)
          ReturnValue=Record:Filtered
       end   
       if LOC:ADDRESS>'' and ~instring(upper(clip(LOC:ADDRESS)),upper(WP:ADDRESS),1,1)
          ReturnValue=Record:Filtered
       end   
       if LOC:INFO>'' and ~instring(upper(clip(LOC:INFO)),upper(WP:INFO),1,1)
          ReturnValue=Record:Filtered
       end   
    end
Можно, конечно, для задания фильтра пользоваться полем Record Filter в настройках самого browse. Но в данном случае, думаю, вставка в embed проще.
Провозился чуть больше часа.
Полученный действующий пример с обоими вариантами могу выслать.
EugeneR
Посетитель
Сообщения: 30
Зарегистрирован: 02 Август 2011, 12:40
Откуда: г. Ленинск-Кузнецкий

Re: LIST как BROWSE (Clarion 5.5)

Сообщение EugeneR »

Я пока только занимаюсь изучением CLARION'а. И мне многое пока не ясно. Вы все утверждаете, что эта работа занимает 10-20 минут. Хорошо. Хотелось бы посмотреть как реализуется задача телеф. справочника со стандартным браузем. А я как закончу эту задачку на LIST'е, выставлю код - только сильно не пинайте. Будет приниматься всё - критика, пожелания, изменения кода.
Спасибо.
kreator
✯ Ветеран ✯
Сообщения: 5159
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: LIST как BROWSE (Clarion 5.5)

Сообщение kreator »

Вообще-то для одной таблицы с четырьмя полями очень хорошо подходит Excel. Там и фильтр и сортировка. :D Не надо по мухам мочить из пушки. А если серьезно, делаешь Browse, а потом добавляешь из Control Templates BrowseQBEButton. Там универсальный самонастраивающийся фильтр. Его достаточно для начала.
We are hard at work… for you. :)
EugeneR
Посетитель
Сообщения: 30
Зарегистрирован: 02 Август 2011, 12:40
Откуда: г. Ленинск-Кузнецкий

Re: LIST как BROWSE (Clarion 5.5)

Сообщение EugeneR »

Повторяю в сотый раз. На простых примерах приобретаю опыт ручного кодинга на CLARION. Да и больших задач не будет. Это только для себя. А что касается стрельбы по мухам, так что теперь 'HELLO WORLD!' под запретом? Так как тогда самообучаться?
P.S.
Всетаки, помогите кто-нибудь с описанием всех функций этого BROWSE. Лучше с простым примером для ознакомления.
Спасибо.
Аватара пользователя
Губин Игорь
Шубуршун
Сообщения: 2583
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Благодарил (а): 3 раза
Поблагодарили: 26 раз

Re: LIST как BROWSE (Clarion 5.5)

Сообщение Губин Игорь »

Самый первый совет - переползи на 8ку
Это я только кажусь дураком! На самом деле я полный идиот!
EugeneR
Посетитель
Сообщения: 30
Зарегистрирован: 02 Август 2011, 12:40
Откуда: г. Ленинск-Кузнецкий

Re: LIST как BROWSE (Clarion 5.5)

Сообщение EugeneR »

Игорь, не подскажешь где скачать 8ку?
Аватара пользователя
Губин Игорь
Шубуршун
Сообщения: 2583
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Благодарил (а): 3 раза
Поблагодарили: 26 раз

Re: LIST как BROWSE (Clarion 5.5)

Сообщение Губин Игорь »

Второй совет - подобные вопросы обсуждаются только в разделе Приват. Для попадания туда есть специальная ветка "Здесь просимся в приват"
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3288
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Re: LIST как BROWSE (Clarion 5.5)

Сообщение Дед Пахом »

В поставке (в том числе и 5.5) есть хорошие примеры (тот же School), почему туда не посмотреть, как это делается?
С уважением, ДП
EugeneR
Посетитель
Сообщения: 30
Зарегистрирован: 02 Август 2011, 12:40
Откуда: г. Ленинск-Кузнецкий

Re: LIST как BROWSE (Clarion 5.5)

Сообщение EugeneR »

Здравствуйте все! Продолжаю тему LIST как BROWSE. Столкнулся с такой ситуацией. Немного научился работе с LISTом. Есть структура программы: File->View->Queue->List. Итак, перемещаемся стрелками по записям в LISTе, по нажатии Enter открываем окно для редактирования записи, изменяем поля, жмем 'сохранить и выйти'. Вопрос: как сделать чтоб в листе обновилось изображение отредактированной записи? У меня получается только перечитыванием файла.
Вот кусок кода. (Пожалуйста только без всяких шаблонов).

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

OF ?EditRec  ! нажали кнопку редактирования записи
                   OPEN(Win_Edit_Rec) ! открыли окно редактирования записи
                   ACCEPT
                        CASE ACCEPTED()
                             OF ?UpdRec ! сохранить отредактированную запись
                                F.R=Q
                                PUT(F,POINTER(Q))
                                DISPLAY

                             OF ?ExitRec ! выйти без сохранения
                                BREAK
                        .
                   .
                   CLOSE(Win_Edit_Rec)
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3288
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Re: LIST как BROWSE (Clarion 5.5)

Сообщение Дед Пахом »

Перечитать изменившуюся запись файла.
С уважением, ДП
EugeneR
Посетитель
Сообщения: 30
Зарегистрирован: 02 Август 2011, 12:40
Откуда: г. Ленинск-Кузнецкий

Re: LIST как BROWSE (Clarion 5.5)

Сообщение EugeneR »

Да перечитываю эту запись. А LIST не обновляется.
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Re: LIST как BROWSE (Clarion 5.5)

Сообщение Admin »

Насколько я помню делали
BRWx.ResetFromFile или BRWх.ResetFromView
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
EugeneR
Посетитель
Сообщения: 30
Зарегистрирован: 02 Август 2011, 12:40
Откуда: г. Ленинск-Кузнецкий

Re: LIST как BROWSE (Clarion 5.5)

Сообщение EugeneR »

Я не пользуюсь браузем. Все в ручную.
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3288
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Re: LIST как BROWSE (Clarion 5.5)

Сообщение Дед Пахом »

Вот пример, лист обновляется автоматом (без DISPLAY(), на следующем срабатывании ACCEPT), хотя в Вашем случае DISPLAY(?List) может понадобиться.

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

    program

    map
        FillQ()
        DisplayQ()
        ModifyQ(long qPos)
    end

q   queue, pre(q)
i       long
    end

    code
    DisplayQ()

FillQ   procedure()
    code

    q.i=1; add(q)
    q.i=2; add(q)
    q.i=3; add(q)
    q.i=4; add(q)
    q.i=5; add(q)

DisplayQ    procedure()
window WINDOW('List'),AT(,,159,94),FONT('MS Sans Serif',8,,),CENTER,GRAY,DOUBLE
       LIST,AT(7,8,72,76),USE(?lstQ),VSCROLL,FORMAT('20R(2)|M~Value~L@n3@'),FROM(q)
       BUTTON('+=1'),AT(108,32,45,14),USE(?btnIncrease)
       BUTTON('Close'),AT(107,73,45,14),USE(?btnClose),STD(STD:Close)
     END

    code

    FillQ()

    open(window)
    accept
        if field() = ?btnIncrease and event() = Event:Accepted
            ModifyQ(choice(?lstQ))
            !display(?lstQ)
        end
    end
    close(window)

ModifyQ procedure(long qPos)
    code
    get(q, qPos)
    if not errorcode()
        q.i += 1; put(q)
    end
С уважением, ДП
Ответить