Страница 1 из 1

Refresh - обновить

Добавлено: 10 Май 2016, 23:26
gopstop2007
Подскажите, вроде пробегало, но нашел :(
При редактировании в Form при ипользовании 2-х чекетов, с помощью которых скрываются(показываются) группы, группы полей и уменьшается(увеличивается) окно. Появляются артефакты, достаточно переключится на другое окно и вернутся все артефакты пропадают.

Refresh - обновить

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

Хотя, на мой взгляд, проще перерисовать окно и контролы напрямую, при изменении условия.

Refresh - обновить

Добавлено: 11 Май 2016, 8:39
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 - обновить

Добавлено: 11 Май 2016, 8:47
Игорь Столяров
Круто ! Если я правильно понял, то "0{PROP:AT,4} = ...." - это изменение размера окна ?
Попробуй заменить на "Windows{Prop:Height} = ...."
(Название структуры Windows может отличаться)

Refresh - обновить

Добавлено: 11 Май 2016, 10:07
kreator
Игорь Столяров писал(а):Круто ! Если я правильно понял, то "0{PROP:AT,4} = ...." - это изменение размера окна ?
Попробуй заменить на "Windows{Prop:Height} = ...."
(Название структуры Windows может отличаться)
Один хрен. Пропы одинаковые. Кларион-то какой? Я бы по-простому сделал для всего Hide/Unhide. А, если копать, то может посмотреть класс Resize, Вы своим кодом может его перебиваете. Но спорить не буду. Можно ещё структуру окна изменить. Ну, допустим, использовать Тав'ы вместо Group.

Refresh - обновить

Добавлено: 11 Май 2016, 10:24
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)

Обычно этого хватает...

Refresh - обновить

Добавлено: 11 Май 2016, 11:05
gopstop2007
Clarion 10 ABC
Yufil писал(а):Если нужно ручное позиционирование, кладу на экран невидимый box или несколько
я так с самого начала сделал правда с группами, но увы результат еще хуже, там целы поля "висели" по старым позициям :(
Yufil писал(а): Вызываем так RedrawWindow(0{Prop:Handle})
или так InvalidateRect(0{PROP:Handle},0,1)
Обычно этого хватает...
спасибо попробую

Refresh - обновить

Добавлено: 11 Май 2016, 15:30
gopstop2007
Помогло только обязательное HIDE перед перемещением группы полей с последующим UNHIDE и еще порядок следования этих групп и последовательность увеличение(уменьшение) размера окна :D