Forum Replies Created
-
AuthorPosts
-
VXDRVParticipant'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 – устраняют проблему непрорисовки формы и границ.
VXDRVParticipant'Support' wrote:Спасибо за проект
В приложенном Exe не видно проблемы, так должно быть?
Установлен чекбокс или нет, заголовки рисуются одинаково после появления/исчезания скроллбокса.
Если чекбокс установлен – то наполнение(опустошение) дерева производится через BeginUpdate/EndUpdate (эти методы используются для ускорения процесса при больших деревьях и устранения мерцания) – и вот в этом случае при появлении или исчезновении ScrollBar – заголовок рисуется неправильно – как будто не корректируется ширина последней колонки после EndUpdate. Если не обрамлять добавление/удаление нодов в BeginUpdate/EndUpdate – (снятый чекбокс) то всё работает путём. Замечу что без скинирования всё путём работает. Может дело в системе, У меня W7 x86.
Вот скриншоты – на первой картинке – неправильная отрисовка заголовка (при установленном чекбоксе). На второй всё верно.
VXDRVParticipantИзвиняюсь – проблемы не со скроллбаром, а с отображением заголовка дерева при добавлении/удалении элементов. При автопоявлении/скрытии вертикального скроллбара.
Прикрепил демо-проект.
Выяснил походу, что на правильное отображение заголовка влияет использование (вернее неиспользование) BeginUpdate/EndUpdate процедур VST. Если их не использовать – заголовок отрабатывает корректно.
Ну и комментами установку новой ширины последнего столбца оградил – при расскоментировании – решает проблему.
VXDRVParticipant'Support' wrote:А возможно создать демку с VirtualStringTree?
Постараюсь в скором времени.
VXDRVParticipantРазобрался… Дело было в свойстве Tag – которое я использовал в дереве – передавал в нём Handle окна для обработки редакторов. А оно используется для отмены скинирования.
Ещё есть проблемки:
1. При отрисовке дерева TVirtualStringTree неправильно работает вертикальный Scrollbar в нём, когда он автоматически скрывается и показывается. Установка новой ширины столбцов приводит его в чувства.
2. При отсутствии TsFrameAdapter на фрейме – приложение падает. Проявляется в DLL. Небольшая проблема ну всё же.
3. TMainMenu. При уничтожении TsSkinManager раньше, чем меню (делаю это вручную в FormDestroy) приложение также падет с AV.
Спасибо!
November 1, 2016 at 3:55 am in reply to: TsListBox, проблема отрисовки при Style:=lbOwnerDrawFixed и отключенных скинах #55730VXDRVParticipant'Support' wrote:Странно. Можно посмотреть новый Exe от этой демки?
В общем в ходе экспериментов обнаружил влияние на глюк свойства DoubleBuffered. Если его установить в True – отриcсовка неадекватна при выключенных скинах. Из-за этого не мог понять в чём дело – в моём большом проекте оно было включено. В прикреплённом архиве тестовый проект. У одного ListBox выключено это свойство, у другого включено.
October 31, 2016 at 3:16 am in reply to: TsListBox, проблема отрисовки при Style:=lbOwnerDrawFixed и отключенных скинах #55726VXDRVParticipant'Support' wrote:Спасибо за демку. Должно быть исправлено в версии 11.17
Версия 11.18 – проблема с TsListBox не устранена! 🙁
October 10, 2016 at 10:50 am in reply to: TsListBox, проблема отрисовки при Style:=lbOwnerDrawFixed и отключенных скинах #55622VXDRVParticipant'Support' wrote:Демка очень поможет.
Спасибо
Вот демка демонстрирующая обе проблемы.
1. Отключив скины и перекрыв чем либо форму (например сторонним окном) – можно наблюдать проблемы у TsListBox c отрисовкой Items.
2. Нажатие на sSpeedButton1 – меняет ImageIndex в его Action – но на кнопке это не отображается (картинка не меняется). На форму положил ещё обычный TImageList с теми же картинками. Подставляя его в ActionList и в кнопки – та же печенька, но начинает реагировать обычный TSpeedButton – то есть считаю, что так и должно быть – иначе зачем ActionList в Delphi.
VXDRVParticipantПохоже, что проблема осталась без внимания Support…
Что изменилось в компонентах такого – что скиниррвание в контейнерах (TFrame и TForm) не идёт совсем, или не идёт должным образом в присутствии в проекте нескольких менеджеров?
VXDRVParticipant'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 не скинит компоненты в контейнере. Присвоение попозже (сторонней кнопкой) вообще создаёт бардак.
VXDRVParticipantВ общем ситуация такова, что в версии 10.22 использование двух менеджеров скинов в одном проекте – невозможно!
Мне это нужно для показа превью формы собственного сочинения.
Баги проявляются и при использовании фреймов в форме, и форм в форме.
Везде, где это возможно в SkinData я указал нужный SkinManager. И получается, что в DesignTime кнопки и элементы красятся в положенный цвет, в RunTime – нет! Проект опять застопорился. 😕
VXDRVParticipantТе же действия на другой машине не привели к серьёзным авариям приложения – но был пойман момент, когда дочерняя форма не реагировала на кнопки в заголовке.
Приобретала вид на скриншоте. При этом была “таскабельна” за заголовок, а перещёлкивание на рабочий стол и обратно – возвращало нормальную отрисовку.
November 28, 2015 at 11:41 am in reply to: Неполадки с формой (регион) при классической теме Windows #54401VXDRVParticipant'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), иначе при увеличении размеров формы регион остаётся фиксированным, хотя размеры формы больше.
VXDRVParticipant'dzh2000' wrote:Можно, конечно, использовать и костыль. Но очень хочется услышать автора.
P.S. Непонятно, как до сих пор такая очевидная ошибка не было никем замечена.
Да я сам уже десяток “костылей” в проекте применил…
Ответов нет на многие вопросы, что даже новые постить отпадает желание. Приходится использовать костыли. 😕
VXDRVParticipant'dzh2000' wrote:Если в runtime создать форму с BorderStyle = bsNone, то она не скинится
Delphi XE2, AlphaControls 10.21
Глюк имеет место быть…
Положите на вторую форму TsSkinProvider – помогло! Перекомпилил в RAD2009 – заскинилось! 🙄
November 25, 2015 at 11:23 am in reply to: Неполадки с формой (регион) при классической теме Windows #54379VXDRVParticipant'TCount' wrote:Как вариант, можно и так:
procedure TForm2.WMSysCommand(var Msg: TWMSysCommand);
begin
if Msg.CmdType=SC_RESTORE then form1.sSkinManager1.RepaintForms(True);
inherited;
end;
P.S. Вызывается только при разворачивании из панели управления, а не при каждой активации формы. Выбирать уже не мне)
Тоже метод. Спасибо!
November 25, 2015 at 6:33 am in reply to: Неполадки с формой (регион) при классической теме Windows #54375VXDRVParticipantПроблема решена следующим кодом:
Code:procedure TForm2.FormActivate(Sender: TObject);
begin
FillArOr(sSkinProvider1);
UpdateRgn(sSkinProvider1);
end;VXDRVParticipant'Support' wrote:Попробую скоро добавить эту анимацию.
Версия 10.20 – анимации TsToolBar – нету… 😕
VXDRVParticipantРазобрался! 🙄 THUMB_OFF и THUMB_ON!
VXDRVParticipant'Support' wrote:Чтобы вид не менялся автоматически при переключении можно задать секцию скина в SkinData.SkinSection: SLIDER_OFF или SLIDER_ON
Скин DarkMetro. SkinData.SkinSection:='SLIDER_ON' – на движок слайдера не подействовало (только портит отрисовку на других скинах). В состоянии OFF – он темнее.
Ладно – полез в редактор скинов (думал там поправлю).
Удалял секции SLIDER_OFF, SLIDER_ON – на движок слайдера действие не возымело эффекта.
Так и не понял – от чего зависит затемнённость. Во всех скинах – её нет. В DarkMetro – OFF темнее.
-
AuthorPosts