Refresh - обновить

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
gopstop2007
Полимат
Сообщения: 1810
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 24 раза
Поблагодарили: 10 раз

Refresh - обновить

Сообщение gopstop2007 »

Подскажите, вроде пробегало, но нашел :(
При редактировании в Form при ипользовании 2-х чекетов, с помощью которых скрываются(показываются) группы, группы полей и уменьшается(увеличивается) окно. Появляются артефакты, достаточно переключится на другое окно и вернутся все артефакты пропадают.
Вложения
С артефактами
С артефактами
промежуточное окно :)
промежуточное окно :)
без артефактов
без артефактов
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8030
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Refresh - обновить

Сообщение Игорь Столяров »

Насколько можно судить по первому снимку - группа полей показана, но размеры окна не изменены.
Если при переключении c другого окна - происходит перерисовка, значит обрабатывается GainFocus.
Поэтому при изменения условия, можно попробовать просто выполнить POST(Event:GainFocus).
Или включить опцию Immediate в настройке окна ....

Хотя, на мой взгляд, проще перерисовать окно и контролы напрямую, при изменении условия.
Make Clarion Great Again ! 😎
gopstop2007
Полимат
Сообщения: 1810
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 24 раза
Поблагодарили: 10 раз

Refresh - обновить

Сообщение gopstop2007 »

Игорь Столяров писал(а):Если при переключении c другого окна - происходит перерисовка, значит обрабатывается GainFocus.
Поэтому при изменения условия, можно попробовать просто выполнить POST(Event:GainFocus).
Или включить опцию Immediate в настройке окна ....
Хотя, на мой взгляд, проще перерисовать окно и контролы напрямую, при изменении условия.
Immediate - включен, перерисовываю вручную.

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

Groups_Resize    ROUTINE  ! изменение размеров

    IF l_Valute_UsedTwo = 1             ! сделать большой размер
        IF l_SkidkaUsed = 1 ! используется скидка
            0{PROP:AT,4} = 295    !         
            ! скидка ===============
            UNHIDE(?GRE:ProcentSkidki:Prompt,?GRE:AllSumSkidka)
            ?GROUP_Skidka{PROP:Hide} = FALSE
            ! валюты ===================
            ?GROUP1{PROP:At,2} = 133
            ?GRE:CashCalc_SumValuteDefault:Prompt{PROP:At,2} = 149
            ?GRE:CashCalc_SumValuteDefault{PROP:At,2} = 149
            ?GRE:SumCash_Valute:2{PROP:At,2} = 149
            ?PROMPT4{PROP:At,2} = 165
            ?GRE:CashCalc_ValuteSum{PROP:At,2} = 165
            ?KUR:CodeValute{PROP:At,2} =	165
            ?GRE:KurseToday:Prompt{PROP:At,2} = 165
            ?GRE:CashCalc_Kurse{PROP:At,2} = 165
            ?GRE:SumCash_Valute:3{PROP:At,2} = 165
            ?PROMPT_SumVal{PROP:At,2} = 165
            ?GRE:SumSkidka:Prompt{PROP:At,2} = 181
            ?GRE:CashCalc_ValuteSumOther{PROP:At,2} = 181
            ?GRE:SumCash_Valute:4{PROP:At,2} = 181
            ! оплата ==================
            ?GRE:SumCash:Prompt{PROP:At,2} = 201
            ?GRE:SumCash{PROP:At,2} = 200
            ?GRE:SumCash_Valute{PROP:At,2} = 201
            ?PROMPT_Balance{PROP:At,2} = 215
            ?PROMPT_Balance_Sum{PROP:At,2} = 215
            ?PROMPT_CashVid{PROP:At,2} = 231
            ?GRE8:NameVidCash{PROP:At,2} = 231
            ?btn_CashVid{PROP:At,2} = 231
            ?GRE:Remark:Prompt{PROP:At,2} = 245
            ?GRE:Remark{PROP:At,2} = 245

            ?OK{PROP:At,2} = 273
            ?Cancel{PROP:At,2} = 273            
        ELSE
            0{PROP:AT,4} = 295 - 69    
            ! скидка ===============
            HIDE(?GRE:ProcentSkidki:Prompt,?GRE:AllSumSkidka)
            ?GROUP_Skidka{PROP:Hide} = TRUE
            ! валюты ===================
            ?GROUP1{PROP:At,2} = 133 - 69
            ?GRE:CashCalc_SumValuteDefault:Prompt{PROP:At,2} = 149 - 69
            ?GRE:CashCalc_SumValuteDefault{PROP:At,2} = 149 - 69
            ?GRE:SumCash_Valute:2{PROP:At,2} = 149 - 69
            ?PROMPT4{PROP:At,2} = 165 - 69
            ?GRE:CashCalc_ValuteSum{PROP:At,2} = 165 - 69
            ?KUR:CodeValute{PROP:At,2} = 165 - 69
            ?GRE:KurseToday:Prompt{PROP:At,2} = 165 - 69
            ?GRE:CashCalc_Kurse{PROP:At,2} = 165 - 69
            ?GRE:SumCash_Valute:3{PROP:At,2} = 165 - 69
            ?PROMPT_SumVal{PROP:At,2} = 165 - 69
            ?GRE:SumSkidka:Prompt{PROP:At,2} = 181 - 69
            ?GRE:CashCalc_ValuteSumOther{PROP:At,2} = 181 - 69
            ?GRE:SumCash_Valute:4{PROP:At,2} = 181 - 69
            ! оплата ==================
            ?GRE:SumCash:Prompt{PROP:At,2} = 201 - 69
            ?GRE:SumCash{PROP:At,2} = 200 - 69
            ?GRE:SumCash_Valute{PROP:At,2} = 201 - 69
            ?PROMPT_Balance{PROP:At,2} = 215 - 69
            ?PROMPT_Balance_Sum{PROP:At,2} = 215 - 69
            ?PROMPT_CashVid{PROP:At,2} = 231 - 69
            ?GRE8:NameVidCash{PROP:At,2} = 231 - 69
            ?btn_CashVid{PROP:At,2} = 231 - 69
            ?GRE:Remark:Prompt{PROP:At,2} = 245 - 69
            ?GRE:Remark{PROP:At,2} = 245 - 69

            ?OK{PROP:At,2} = 273 - 69
            ?Cancel{PROP:At,2} = 273 - 69
        END    
        ?GROUP1{PROP:Hide} = FALSE
        UNHIDE(?GRE:CashCalc_SumValuteDefault:Prompt,?GRE:SumCash_Valute:4)
    ELSE
        HIDE(?GRE:CashCalc_SumValuteDefault:Prompt,?GRE:SumCash_Valute:4)
        ?GROUP1{PROP:Hide} = TRUE
        ThisWindow.Reset(True)
        IF l_SkidkaUsed = 1 ! используется скидка
            0{PROP:AT,4} = 295 - 65 
            ! скидка ===============
            UNHIDE(?GRE:ProcentSkidki:Prompt,?GRE:AllSumSkidka)
            ?GROUP_Skidka{PROP:Hide} = FALSE
            ! валюты ===================
            ! оплата ==================
            ?GRE:SumCash:Prompt{PROP:At,2} = 201 - 65
            ?GRE:SumCash{PROP:At,2} = 200 - 65
            ?GRE:SumCash_Valute{PROP:At,2} = 201 - 65
            ?PROMPT_Balance{PROP:At,2} = 215 - 65
            ?PROMPT_Balance_Sum{PROP:At,2} = 215 - 65
            ?PROMPT_CashVid{PROP:At,2} = 231 - 65
            ?GRE8:NameVidCash{PROP:At,2} = 231 - 65
            ?btn_CashVid{PROP:At,2} = 231 - 65
            ?GRE:Remark:Prompt{PROP:At,2} = 245 - 65
            ?GRE:Remark{PROP:At,2} = 245 - 65

            ?OK{PROP:At,2} = 273 - 65
            ?Cancel{PROP:At,2} = 273 - 65
        ELSE    
            0{PROP:AT,4} = 295 - (69+65)
            ! скидка ===============
            HIDE(?GRE:ProcentSkidki:Prompt,?GRE:AllSumSkidka)
            ?GROUP_Skidka{PROP:Hide} = TRUE
            ! валюты ===================
            ! оплата ==================
            ?GRE:SumCash:Prompt{PROP:At,2} = 201 - (69+65)
            ?GRE:SumCash{PROP:At,2} = 200 - (69+65)
            ?GRE:SumCash_Valute{PROP:At,2} = 201 - (69+65)
            ?PROMPT_Balance{PROP:At,2} = 215 - (69+65)
            ?PROMPT_Balance_Sum{PROP:At,2} = 215 - (69+65)
            ?PROMPT_CashVid{PROP:At,2} = 231 - (69+65)
            ?GRE8:NameVidCash{PROP:At,2} = 231 - (69+65)
            ?btn_CashVid{PROP:At,2} = 231 - (69+65)
            ?GRE:Remark:Prompt{PROP:At,2} = 245 - (69+65)
            ?GRE:Remark{PROP:At,2} = 245 - (69+65)

            ?OK{PROP:At,2} = 273 - (69+65)
            ?Cancel{PROP:At,2} = 273 - (69+65)
        END
    END    
    ThisWindow.Reset(True)
    DISPLAY()
   POST(Event:GainFocus)  ! чего еще добавить :)
Вложения
Refresh.gif
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8030
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Refresh - обновить

Сообщение Игорь Столяров »

Круто ! Если я правильно понял, то "0{PROP:AT,4} = ...." - это изменение размера окна ?
Попробуй заменить на "Windows{Prop:Height} = ...."
(Название структуры Windows может отличаться)
Make Clarion Great Again ! 😎
kreator
✯ Ветеран ✯
Сообщения: 5159
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Refresh - обновить

Сообщение kreator »

Игорь Столяров писал(а):Круто ! Если я правильно понял, то "0{PROP:AT,4} = ...." - это изменение размера окна ?
Попробуй заменить на "Windows{Prop:Height} = ...."
(Название структуры Windows может отличаться)
Один хрен. Пропы одинаковые. Кларион-то какой? Я бы по-простому сделал для всего Hide/Unhide. А, если копать, то может посмотреть класс Resize, Вы своим кодом может его перебиваете. Но спорить не буду. Можно ещё структуру окна изменить. Ну, допустим, использовать Тав'ы вместо Group.
We are hard at work… for you. :)
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Refresh - обновить

Сообщение Yufil »

Если нужно ручное позиционирование, кладу на экран невидимый box или несколько и привязываю координаты к ним, абсолютные координаты как-то некошерно.
Дальше надо познакомиться с Prop:Buffer, Prop:LazyDisplay и Prop:DeferMove вдруг поможет...
Ну и наконец, если совсем никак, есть такие функции

RedrawWindow(UNSIGNED,LONG=0,LONG=0,ULONG=0181h),RAW,PASCAL
InvalidateRect(UNSIGNED,LONG,BOOL),PASCAL,RAW

Вызываем так
RedrawWindow(0{Prop:Handle})
или так
InvalidateRect(0{PROP:Handle},0,1)

Обычно этого хватает...
gopstop2007
Полимат
Сообщения: 1810
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 24 раза
Поблагодарили: 10 раз

Refresh - обновить

Сообщение gopstop2007 »

Clarion 10 ABC
Yufil писал(а):Если нужно ручное позиционирование, кладу на экран невидимый box или несколько
я так с самого начала сделал правда с группами, но увы результат еще хуже, там целы поля "висели" по старым позициям :(
Yufil писал(а): Вызываем так RedrawWindow(0{Prop:Handle})
или так InvalidateRect(0{PROP:Handle},0,1)
Обычно этого хватает...
спасибо попробую
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
gopstop2007
Полимат
Сообщения: 1810
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 24 раза
Поблагодарили: 10 раз

Refresh - обновить

Сообщение gopstop2007 »

Помогло только обязательное HIDE перед перемещением группы полей с последующим UNHIDE и еще порядок следования этих групп и последовательность увеличение(уменьшение) размера окна :D
Вложения
Refresh_end.gif
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Ответить