Forum Replies Created
-
AuthorPosts
-
November 2, 2015 at 11:37 am in reply to: SkinSection:='FORMTITLE' не работает на некоторых скинах #54265VXDRVParticipant'VXDRV' wrote:
Не хочется ввязываться в допиливание скинов.
А всё таки придётся! Как вытащить и применить маски я не знаю + манипуляции с фонами. 😕
Модификации подлежат:
AfterBurner,
BlueGlass,
BlueIce,
BluePlastic,
Deep,
Desert (непонятно ещё),
Garnet II,
Golden,
KaraKum,
Ledenets,
LikeOperaStyle,
MacMetal,
MacOS,
MakOS2,
Mint,
MoonLight (тоже непонятно),
Office12Style,
Rhombus,
Terminal4Bit (заголовок – нечто невообразимое),
Terminal4Bit_contrast (тоже самое что и пунктом выше),
Winter2003,
WMP 2008,
WMP11,
Wood.
Придётся осваивать ASkinEditor. 😕
November 2, 2015 at 10:31 am in reply to: SkinSection:='FORMTITLE' не работает на некоторых скинах #54263VXDRVParticipant'TCount' wrote:Приветствую!))
А все очень просто) Дело в том, что сначала рисуется скин формы (FORM), а потом просто накладывается скин заголовка (FORMTITLE).
Вот на скрине слева – это маска FORMTITLE. Справа – FORM. Попробуйте объединить) Что получится?) Правильно, уголки от секции FORM будут выглядывать.
Кстати, и в скине BlueGlass тоже самое (можете понаблюдать). Там уголки заголовка “круче”, чем у формы. Вследствие накладки получается некий мутант)))
Вобщем, думаю, разработчику просто нужно перерисовать секции FORM в скинах, где нужно. Чтобы границы рамки секции FORМ соответствовали рамкам в FORMTITLE.
Ну это как вариант.
Или же Вам самим допилить))))
Да это я всё уже сам понял – вопрос в корректной обрезке углов – чтобы с фоном било. И работало на всех скинах. Форма я так понимаю создаётся по регионам из этих масок. Пробовал создать регион для TFrame по примерам – при движении фрейма в редакторе один из углов уплывал. Мысль есть – сделать аппликацию и FORMTITLE и FORM на промежуточном TBitmap (как в детском саду из бумаги), но пока не знаю как – думаю. 🙄
Не хочется ввязываться в допиливание скинов.
November 1, 2015 at 11:07 am in reply to: SkinSection:='FORMTITLE' не работает на некоторых скинах #54259VXDRVParticipantНа скорую набросал проект в атаче. 🙄
При выборе скинов GarnetII или AfterBurner например – не могу избавиться от уголков в шапке.
November 1, 2015 at 9:51 am in reply to: SkinSection:='FORMTITLE' не работает на некоторых скинах #54258VXDRVParticipant'Support' wrote:А можно всю эту програмку посмотреть?
Процедура вроде нормально написана, но с програмкой я точно могу сказать что не так.
К сожалению это невозможно около 60 файлов, 200000 строк кода! Там используется куча сторонних и самописных компонентов и классов, DSPack. Может позже я скомпилю и соберу минимальное приложение?
Суть такова – есть базовый класс TFrame, на ней панель. На панель кладутся компоненты в наследниках TFrame. И с помощью TPaintBox – я пытаюсь сэмулировать вид этой панели как TForm.
Последний вариант у меня это использование вместо TFrame – TForm – но это крайний вариант.
Нужно будет делать BorderStyle:=bsNone чтобы вручную рисовать у неё (у формы) заголовок – когда скинирование отключено.
А ещё там надо будет вмешиваться в свойство Active – формы – тоже сюрпризы предполагаются.
November 1, 2015 at 9:29 am in reply to: SkinSection:='FORMTITLE' не работает на некоторых скинах #54256VXDRVParticipant'Support' wrote:VXDRV, в Aluminium секция заголовка формы полностью прозрачна, вся форма рисуется только в секции FORM.
То, что на последних скриншотах , так и должно быть в таком случае.
Это я уже понял, скин Alluminium отображается нормально – это наладил.
А AfterBurner? – привёл пример – там с углами верхними не ладится…
А также, например Winter2003… Рисую всё это дело так:
Code:procedure TFrameUI.PB_FramePaint(Sender: TObject);
var
BGInfo:sConst.TacBGInfo;
IndexForm:Integer;
IndexFormT:Integer;
RT:TRect;
Canvas:TCanvas;
TX,TY,TW,TH:Integer;
SP:TsSkinProvider;
begin
Canvas:=PB_Frame.Canvas;
if SM=nil then Exit;
SP:=SkinProvider;if SM.Active then
begin
IndexForm:=SM.GetSkinIndex('FORM');
if IndexForm <> -1 then
begin
GetBGInfo(@BGInfo, PnlBG.Handle);
PaintItem(
IndexForm,
'FORM',
BGInfoToCI(@BGInfo),
True,
Integer(SP.FormActive),
Rect(0, 0, PB_Frame.Width, PB_Frame.Height),
Point(PB_Frame.Left, PB_Frame.Top),
Canvas.Handle);
end;IndexFormT:=SM.GetSkinIndex('FORMTITLE');
if not SM.IsValidSkinIndex(IndexFormT) then Exit;
if IndexFormT <> -1 then
begin
if SM.gd[IndexForm].States>1 then
begin
GetBGInfo(@BGInfo, PnlBG.Handle);
PaintItem(
IndexFormT,
'FORMTITLE',
BGInfoToCI(@BGInfo),
True,
Integer(SP.FormActive),
Rect(0, 0, PB_Frame.Width, 20),
Point(PB_Frame.Left, PB_Frame.Top),
Canvas.Handle);
end
else
begin
GetBGInfo(@BGInfo, PnlBG.Handle);
PaintItem(
IndexFormT,
'FORMTITLE',
BGInfoToCI(@BGInfo),
False,
1,
Rect(0, 0, PB_Frame.Width, 20),
Point(PB_Frame.Left, PB_Frame.Top),
Canvas.Handle);
end;end;
Canvas.Font.Style:=[fsBold];
TW:=Canvas.TextWidth(FCaption);
TH:=Canvas.TextHeight(FCaption);
TX:=(PB_Frame.Width-TW) div 2;
TY:=(20-TH) div 2;
RT:=Rect(TX,TY,TX+TW,TY+TH);
acWriteTextEx(Canvas,PChar(FCaption),True,RT,0,IndexFormT,SP.FormActive,SM);
end
else
begin
if TForm(Parent).Active then
begin
Canvas.Brush.Color:=clActiveCaption;
Canvas.Font.Color:=clCaptionText;
end
else
begin
Canvas.Brush.Color:=clInActiveCaption;
Canvas.Font.Color:=clInactiveCaptionText;
end;
Canvas.FillRect(Rect(1,1,Width-1,20));
Canvas.Font.Style:=[fsBold];
TW:=Canvas.TextWidth(FCaption);
TH:=Canvas.TextHeight(FCaption);
TX:=(PB_Frame.Width-TW) div 2;
TY:=(20-TH) div 2;
Canvas.TextOut(TX,TY,FCaption);
end;
end;November 1, 2015 at 8:36 am in reply to: SkinSection:='FORMTITLE' не работает на некоторых скинах #54254VXDRVParticipantВ общем два дня парюсь – корректный результат с PaintItem для FORMTITLE разных скинов – не получил.
Одни скины корректно рисуют шапку – другие нет! Подозреваю, что дело в масках или в регионах – уж не знаю. :a1:
VXDRVParticipant'Support' wrote:Здравствуйте. Постараюсь добавить такое скоро.
А мне, например, не нужно так – можно сделать, чтобы это дело регулировалось?
October 30, 2015 at 10:26 am in reply to: SkinSection:='FORMTITLE' не работает на некоторых скинах #54248VXDRVParticipant'TCount' wrote:Удачи))))
Извиняюсь! Я вспомнил почему прибегнул к PaintItem! Нужно было управлять состоянием заголовка – Активно/Неактивно. Но PaintItem вот как раз заливает текстурой формы без прозрачности (в скине Aluminium). Вариант с прозрачным TsLabel вместо заголовка конечно хорош, но нельзя управлять цветом Активный/Неактивный заголовок (State в параметрах PaintItem).
October 30, 2015 at 9:26 am in reply to: SkinSection:='FORMTITLE' не работает на некоторых скинах #54246VXDRVParticipant'TCount' wrote:Вот панель с секцией FORM. Здесь сразу и заголовок, и сама форма.
Просто система разработчика в том, что секция FORM прорисовывается не ДО заголовка, а на всю форму вместе с заголовком)
Если заголовок при этом не нужно выделять, то и не нужно дорабатывать секцию FormTitle отдельно.
Такова политика AC 🙄
P.S. По сути, можно в секции FORM нарисовать заголовок, FormTitle сделать прозрачным и Вы не увидите, что заголовка нет) Но это не совет, это просто размышления.
Вот спасибо! Вопрос почти решён! 🙄 😆
Как тему закрыть?
October 30, 2015 at 8:45 am in reply to: SkinSection:='FORMTITLE' не работает на некоторых скинах #54244VXDRVParticipant'TCount' wrote:Да, бликов чего-то не видать)) Только рамку и цвет видно)
Посмотрел скины эти в редакторе…Дело в том, что в секции FormTitle этих скинов нет намеков на рамки, которые блики и выводят)
Поставьте панели секцию FORM вместо FORMTITLE.
P.S. Как бы секция FORM заменяет FORMTITLE, потому как сама секция FORM несет в себе и заголовок (правда, не во всех скинах).
FORM – это Form без заголовка – мне ещё нужен заголовок. FORM – я и так использую под заголовком.
Вообще задача состоит в эмуляции формы по внешнему виду из TFrame без кнопок и иконок в заголовке.
Добавлено:
'TCount' wrote:P.S. Как бы секция FORM заменяет FORMTITLE, потому как сама секция FORM несет в себе и заголовок (правда, не во всех скинах).
Хорошо! А как тогда узнать об этом и соответствующим образом отреагировать? SkinIndex – из менеджера для FORMTITLE возвращается для любого скина!
October 30, 2015 at 8:02 am in reply to: SkinSection:='FORMTITLE' не работает на некоторых скинах #54242VXDRVParticipant'TCount' wrote:Я вот смотрю на скины…Так ведь правильно) Обратите внимание на заголовки скинов на скринах) их же по сути и нет)
На первом скрине заголовок однотонный, на втором прозрачный.
Ну как нет – а блик? А регион? Доберусь до работы сделаю скрины своего приложения! Как это выглядит на одних скинах и как выглядит пустое место (как будто SkinSection:='CHECKBOX') на других скинах!
Добавленно:
На первом скрине всё как надо – заголовок рисуется на панели (так и задумывалось). На втором скрине – не рисуется – как будто у панели SkinSection:='CHECKBOX'.
VXDRVParticipantАвторов проекта тоже в принципе понять можно – за всем не уследишь и всем не угодишь. Сам уже третий год пилю свой проект – переписал раз 20 один и тот же код (под изменчивые требования и актуальность), в проекте около 160 файлов и ещё не конец. Решил добавить поддержку скинов, плагинов – и небольшие баги, и недоделки в альфе немного удручают.
Например – нет анимации в TsToolBar… – хотя везде она есть – придётся делать на TsSpeedButton…
TsSlider – рисунки переключателя отличаются в состоянии включено и выключено – на некоторых скинах выключено – темнее – хотя в программе у меня это однозначные действия (либо то включить, либо это) – придётся делать опять же на TsSpeedButton… В предпоследних версиях смотрел – состояние переключателя на экране не всегда соответствовало надписям на компоненте – проявлялось при медленном таскании мышью ползунка переключателя больших размеров – в новых версиях – не смотрел ещё…
Был непорядок с анимацией Minimazing:=True и ExtendedBorders:=False… Припоминаю, что в некоторых случаях свёрнутую форму не поднять – как сейчас – ещё не смотрел. Вот… вывалил всё, что накопилось – если, что извиняюсь!
To TCount – А вопрос по правилам скинирования – да, для меня актуален тоже. Вот ещё и думаю – делать скины в DLL-плагинах или нет…
VXDRVParticipant'TCount' wrote:Я так и не понял, было исправление или нет…У меня все по-прежнему) Может какое-то свойство мне изменить?
Тоже смущает стремление AlphaControls заскинить всё, что только можно!
Например у меня есть некий редактор – в нём я не использую скины. Есть формы для редактирования этим редактором – которые скины используют.
Ну так вот открытие диалогов в редакторе – обычных TOpenDialog, TSaveDialog – раскрашивает их – хотя мне это не нужно!
Тем не менее нужно раскрашивать диалоги в заскиненных формах. Опять же MessageBox – раскрашенный, для оперативных сообщений в редакторе – зачем (придётся свой MessageBox делать)? – а не нужно этого. Почему это всё нельзя, как то разделить?
И ещё – раскрашиваются совершенно сторонние системные диалоги – приобретающие совершенно, непрезентабельный вид (например диалог настроек Web-камеры)! Если отключить, скинирование диалогов то и TsOpenDialog и TsSaveDialog не красятся!
TOpenDialog, TSaveDialog и т. п. – они стандартны – можно их не скинить? При этом скинируя TsOpenDialog, TsSaveDialog и т. д.?
Зачем скинируются формы и диалоги сторонних компонентов – даже не наследуемые от класса TForm?
October 18, 2015 at 7:34 pm in reply to: При отключенных скинах – перемещение мыши на некоторых компонентах, вызывает артефакты перемигивания #54142VXDRVParticipantДа! И на стандартной деме тоже!
Темы Aero Windows при этом отключены! Если тема задействована – глюк не проявляется.
Присоединил к сообщению короткое видео в архиве с TsTrackBar.
VXDRVParticipant'Support' wrote:Спасибо за демку. Попробуйте следующий релиз, когда выйдет. Думаю, проблема будет в нем решена.
Благодарю! 🙂
VXDRVParticipantПроблема решена!
Воспользовался событием OnSkinItem в TsSkinProvider – извиняюсь за невнимательность!
Code:procedure TForm1.SkinProviderSkinItem(Item: TComponent;
var CanBeAdded: Boolean; var SkinSection: string);
begin
if Item.ClassName='TForm2' then CanBeAdded:=False;
end;VXDRVParticipant'Support' wrote:Обновил базу IP, попробуйте снова.
Спасибо за участие! Не помогло…. Поставщик интернета ALTEL 4G.
Завтра гляну из дома – инет от Казахтелекома.
VXDRVParticipantApplication.MainFormOnTaskbar := True; – комментирование этой строки открывает форму, но с неактивным заголовком – хотя форма активна.
Ваше демо-приложение работает нормально – даже перекомпилированное мной. В чем может быть проблема? Прикрепляю свой пустой тестовый проект.
Дополнено:
Хотя и в стандартной деме если ExtendedBorders отключить – то же самое форма разворачивается с неактивным заголовком. А при раскомментировании Application.MainFormOnTaskbar := True; – те же самые проблемы – форма полупрозрачна и “застряла” на половине разворачивания.
VXDRVParticipant'Support' wrote:Возможно ли посмотреть на тестовое приложение с поисываемой проблемой?
Хм… При попытке передать на другой комп EXE через интернет (хотел потестить на стороннем компе) – Chrome блокирует как вредоносный файл…
Прошу прощения – буду разбираться – похоже вирусы какие-то незаметно работают с Delphi… то-то думаю Debug работает через раз. =
VXDRVParticipantDelphi 2009, AC 9.20, W7, Aero отключен.
ExtendedBorders – выключен.
AnimEffectsMinimizing – помогает – но с перемигиванием как писал Andrew.
Если свернуть и развернуть форму – получается вот так во вложении. Повторное нажатие кнопки на панели задач – вызывает перемигивание границ “невидимой” формы и всё.
Думал пофиксят в следующем релизе – дождался – ан нет. Спасибо.
-
AuthorPosts