VXDRV

Forum Replies Created

Viewing 20 posts - 1 through 20 (of 40 total)
  • Author
    Posts
  • in reply to: Глюк с формами #59117
    VXDRV
    Participant
    'LiDelphi' wrote:

    Здрасти опять. Думал проблема в моём проекте, но – делаем следующее, создаем новый, кидаем TsSkinManager TsSkinProvider. Выбираем любой скин, наслаждаемся. Потом бросаем на главную кнопку и создаем форму2. По кнопке вызываем другую форму – что модал что так, неважно – всё ок. Закрываем, жмем опять кнопку – и так через 2-3 раза мы получим форму2 в режиме псевдо borderstyle=bsNone(прилагаю картинку glyk) Но на самом деле это не так. Прилагаю ещё картинку prosto. В первом глюк – форма делается без рамки и вся белая – что видно на рисунке, на втором – форма2 с bsNone – цвет формы не белый уже и все элементы рабочие. Когда идет глюк нажать что нить на глючной форме невозможно – так словно она не активна совсем + пропадает бордюр формы полностью – типа словно форма не отвечает. Дельфи 7. На прежних версиях до 14,16 форма в таком случае просто делалась невидимой – приходилось работникам говорить чтобы автоматом закрывали в тёмную альт+ф4 и опять вызывали форму. А в этой версии уже наглядно видно зависшее окно. Почему пишу сюда – если выключить TsSkinManager никаких проблем с формами нет. Можна переключиться на любую другую программу а потом кликнуть на свою и вуаля форма2 уже будет нормальной.

    Подтверждаю! 14.16 Delphi 10.2. Манипуляции с AnimEffects – устраняют проблему непрорисовки формы и границ.

    VXDRV
    Participant
    'Support' wrote:

    Спасибо за проект

    В приложенном Exe не видно проблемы, так должно быть?

    Установлен чекбокс или нет, заголовки рисуются одинаково после появления/исчезания скроллбокса.

    Если чекбокс установлен – то наполнение(опустошение) дерева производится через BeginUpdate/EndUpdate (эти методы используются для ускорения процесса при больших деревьях и устранения мерцания) – и вот в этом случае при появлении или исчезновении ScrollBar – заголовок рисуется неправильно – как будто не корректируется ширина последней колонки после EndUpdate. Если не обрамлять добавление/удаление нодов в BeginUpdate/EndUpdate – (снятый чекбокс) то всё работает путём. Замечу что без скинирования всё путём работает. Может дело в системе, У меня W7 x86.

    Вот скриншоты – на первой картинке – неправильная отрисовка заголовка (при установленном чекбоксе). На второй всё верно.

    VXDRV
    Participant

    Извиняюсь – проблемы не со скроллбаром, а с отображением заголовка дерева при добавлении/удалении элементов. При автопоявлении/скрытии вертикального скроллбара.

    Прикрепил демо-проект.

    Выяснил походу, что на правильное отображение заголовка влияет использование (вернее неиспользование) BeginUpdate/EndUpdate процедур VST. Если их не использовать – заголовок отрабатывает корректно.

    Ну и комментами установку новой ширины последнего столбца оградил – при расскоментировании – решает проблему.

    VXDRV
    Participant
    'Support' wrote:

    А возможно создать демку с VirtualStringTree?

    Постараюсь в скором времени.

    VXDRV
    Participant

    Разобрался… Дело было в свойстве Tag – которое я использовал в дереве – передавал в нём Handle окна для обработки редакторов. А оно используется для отмены скинирования.

    Ещё есть проблемки:

    1. При отрисовке дерева TVirtualStringTree неправильно работает вертикальный Scrollbar в нём, когда он автоматически скрывается и показывается. Установка новой ширины столбцов приводит его в чувства.

    2. При отсутствии TsFrameAdapter на фрейме – приложение падает. Проявляется в DLL. Небольшая проблема ну всё же.

    3. TMainMenu. При уничтожении TsSkinManager раньше, чем меню (делаю это вручную в FormDestroy) приложение также падет с AV.

    Спасибо!

    VXDRV
    Participant
    'Support' wrote:

    Странно. Можно посмотреть новый Exe от этой демки?

    В общем в ходе экспериментов обнаружил влияние на глюк свойства DoubleBuffered. Если его установить в True – отриcсовка неадекватна при выключенных скинах. Из-за этого не мог понять в чём дело – в моём большом проекте оно было включено. В прикреплённом архиве тестовый проект. У одного ListBox выключено это свойство, у другого включено.

    VXDRV
    Participant
    'Support' wrote:

    Спасибо за демку. Должно быть исправлено в версии 11.17

    Версия 11.18 – проблема с TsListBox не устранена! 🙁

    VXDRV
    Participant
    'Support' wrote:

    Демка очень поможет.

    Спасибо

    Вот демка демонстрирующая обе проблемы.

    1. Отключив скины и перекрыв чем либо форму (например сторонним окном) – можно наблюдать проблемы у TsListBox c отрисовкой Items.

    2. Нажатие на sSpeedButton1 – меняет ImageIndex в его Action – но на кнопке это не отображается (картинка не меняется). На форму положил ещё обычный TImageList с теми же картинками. Подставляя его в ActionList и в кнопки – та же печенька, но начинает реагировать обычный TSpeedButton – то есть считаю, что так и должно быть – иначе зачем ActionList в Delphi.

    in reply to: Путаница со SkinManager-ами! #54526
    VXDRV
    Participant

    Похоже, что проблема осталась без внимания Support…

    Что изменилось в компонентах такого – что скиниррвание в контейнерах (TFrame и TForm) не идёт совсем, или не идёт должным образом в присутствии в проекте нескольких менеджеров?

    in reply to: Путаница со SkinManager-ами! #54493
    VXDRV
    Participant
    'TCount' wrote:

    Посмотрел проект…Если в OnCreate Form5 после присваивания Form4 родителя снова определить SkinManager для Form4, то будет норм.

    То есть:

    procedure TForm5.FormShow(Sender: TObject);

    begin

    Form4.Parent:=Self;

    Form4.SkinProvider.SkinData.SkinManager:=SkinManager;

    Form4.Show;

    end;

    P.S. Видимо, когда создается Form4, она еще не в курсе, к какому менеджеру принадлежит, это нужно делать программно. В том плане, что Form4 создается раньше Form5.

    Спасибо, приеду на работу – будем посмотреть!

    Дополнено:

    Фокус не прошёл в моём проекте, да и в части скролбаров в TsListBox тестового проекта – движок скролбара остаётся от основного скина. Принудительное присвоение менеджера скинов – не решает проблему. Если оставить по умолчанию – скинится основным менеджером. Принудительное присвоение менеджера сразу после назначения родителя TFrame не скинит компоненты в контейнере. Присвоение попозже (сторонней кнопкой) вообще создаёт бардак.

    in reply to: Путаница со SkinManager-ами! #54488
    VXDRV
    Participant

    В общем ситуация такова, что в версии 10.22 использование двух менеджеров скинов в одном проекте – невозможно!

    Мне это нужно для показа превью формы собственного сочинения.

    Баги проявляются и при использовании фреймов в форме, и форм в форме.

    Везде, где это возможно в SkinData я указал нужный SkinManager. И получается, что в DesignTime кнопки и элементы красятся в положенный цвет, в RunTime – нет! Проект опять застопорился. 😕

    VXDRV
    Participant

    Те же действия на другой машине не привели к серьёзным авариям приложения – но был пойман момент, когда дочерняя форма не реагировала на кнопки в заголовке.

    Приобретала вид на скриншоте. При этом была “таскабельна” за заголовок, а перещёлкивание на рабочий стол и обратно – возвращало нормальную отрисовку.

    VXDRV
    Participant
    'TCount' wrote:

    Как вариант, можно и так:

    procedure TForm2.WMSysCommand(var Msg: TWMSysCommand);

    begin

    if Msg.CmdType=SC_RESTORE then form1.sSkinManager1.RepaintForms(True);

    inherited;

    end;

    P.S. Вызывается только при разворачивании из панели управления, а не при каждой активации формы. Выбирать уже не мне)

    Этот вариант неприменим при программном восстановлении формы, так как WM_SYSCOMMAND не приходит.

    Замечено ещё, что при изменении размеров формы нештатными средствами (через SetWindowPos) и отключенном скинировании – нужно принудительно присваивать форме “нулевой” регион SetWindowRgn(Handle,0,False), иначе при увеличении размеров формы регион остаётся фиксированным, хотя размеры формы больше.

    in reply to: Не скинится форма с BorderStyle = bsNone #54395
    VXDRV
    Participant
    'dzh2000' wrote:

    Можно, конечно, использовать и костыль. Но очень хочется услышать автора.

    P.S. Непонятно, как до сих пор такая очевидная ошибка не было никем замечена.

    Да я сам уже десяток “костылей” в проекте применил…

    Ответов нет на многие вопросы, что даже новые постить отпадает желание. Приходится использовать костыли. 😕

    in reply to: Не скинится форма с BorderStyle = bsNone #54380
    VXDRV
    Participant
    'dzh2000' wrote:

    Если в runtime создать форму с BorderStyle = bsNone, то она не скинится

    6616051.png

    Delphi XE2, AlphaControls 10.21

    Глюк имеет место быть…

    Положите на вторую форму TsSkinProvider – помогло! Перекомпилил в RAD2009 – заскинилось! 🙄

    VXDRV
    Participant
    'TCount' wrote:

    Как вариант, можно и так:

    procedure TForm2.WMSysCommand(var Msg: TWMSysCommand);

    begin

    if Msg.CmdType=SC_RESTORE then form1.sSkinManager1.RepaintForms(True);

    inherited;

    end;

    P.S. Вызывается только при разворачивании из панели управления, а не при каждой активации формы. Выбирать уже не мне)

    Тоже метод. Спасибо!

    VXDRV
    Participant

    Проблема решена следующим кодом:

    Code:
    procedure TForm2.FormActivate(Sender: TObject);
    begin
    FillArOr(sSkinProvider1);
    UpdateRgn(sSkinProvider1);
    end;
    in reply to: TsToolBar – Поддержка анимации #54295
    VXDRV
    Participant
    'Support' wrote:

    Попробую скоро добавить эту анимацию.

    Версия 10.20 – анимации TsToolBar – нету… 😕

    in reply to: Отрисовка TsSlider #54278
    VXDRV
    Participant

    Разобрался! 🙄 THUMB_OFF и THUMB_ON!

    in reply to: Отрисовка TsSlider #54276
    VXDRV
    Participant
    'Support' wrote:

    Чтобы вид не менялся автоматически при переключении можно задать секцию скина в SkinData.SkinSection: SLIDER_OFF или SLIDER_ON

    Скин DarkMetro. SkinData.SkinSection:='SLIDER_ON' – на движок слайдера не подействовало (только портит отрисовку на других скинах). В состоянии OFF – он темнее.

    Ладно – полез в редактор скинов (думал там поправлю).

    Удалял секции SLIDER_OFF, SLIDER_ON – на движок слайдера действие не возымело эффекта.

    Так и не понял – от чего зависит затемнённость. Во всех скинах – её нет. В DarkMetro – OFF темнее.

Viewing 20 posts - 1 through 20 (of 40 total)