Forum Replies Created
-
AuthorPosts
-
FeLDMaRShaL
Participant'Support' wrote:Посмотрите, мне кажется эта тема похожа…
Оказывается я плохо искал по форуму. Спасибо за ссылку!
Да тема мне близка, воспользовался вашим советом в той теме, но обнаружил баг
Пытаюсь изменить цвет фона вот так (сразу после кода создания вкладки):
Code:SkinData := TsCommonData(cf.RichViewEdit1.Perform(SM_ALPHACMD, MakeWParam(0, sMessages.AC_GETSKINDATA), 0));
if SkinData <> nil then
SkinData.SkinSection := 'MYRICH';где cf – динамически созданная вкладка у TsPageControla, RichViewEdit1 – компонент у которого надо цвет фона поменять.
Ну так вот, если данная вкладка не активная то SkinData, будет равен nil, соответственно цвет фона не изменится (как показывают опыты она должна быть не только активна, но еще и визуально отображаться, т.е. если мы RichViewEdit1 создадим с Visible=false, то SkinData также будет равна nil).
Как быть в этом случае?
P.S. прикладываю пример(более упрощенный чем прошлый раз) + exe файл, в котором одна кнопка перед созданием 5 вкладок делает их активными(и код срабатывает нормально), а в теле процедуры второй кнопки строчка изменяющая активную вкладку закомментирована, и фон не меняется из за этого.
FeLDMaRShaL
ParticipantАп
FeLDMaRShaL
ParticipantАп
FeLDMaRShaL
ParticipantВопрос актуален. В принципе я понимаю почему компонент ведет себя именно так (по сути он изменяет цвет фона на тот, который установлен у него, правда мне тогда не понятно почему у скина Nautilus в этом случае фон не меняется на черный). Может мне нужно где то в исходниках компонента убрать какоенибуть свойство?
FeLDMaRShaL
ParticipantВопрос актуален. Может мне какой то другой необходимо использовать метод чтобы загрузить картинку в кнопку?
FeLDMaRShaL
ParticipantКак временный вариант изменяю цвет фона вот так:
Code:RichViewEdit.Color := clWhiteНо делаю это каждый раз после создания новой вкладки(в той программе которую я представил как демку).
Т.е. поясню подробнее в чем проблема. Почему то AC при компиляции проекта (наверно в момент скинезауии) меняют у компонента TRichViewEdit свойство Color. И мне приходится его вручную изменять снова на clWhite.
P.S. это свойство может измениться только если компонент сейчас видимый. Если он не видим (Visible=False) то свойство остается без изменения.
FeLDMaRShaL
Participant'Torbins' wrote:Выдрать из скина любой графический элемент не сложно. И на сайте в разделе демок и на форуме выкладывались примеры.
На тот момент я вас не понял, я думал вы мне предлагаете вручную поправить все скины.
'Support' wrote:Возможно, этот пример пригодится : http://www.alphaskins.com/sfiles/demos/extractimage.zip
Да, это именно то, что мне было нужно!
Но проблемма, почемуто у меня не получается воспризвести данный пример применительно к моей задаче (сделать кнопку, которая будет выглядить точно также как кнопка свернуть)
Пытаюсь вот так, где я ошибся:
Code:procedure TForm1.MyPaint();
var
ImageHeight: integer;
begin
ImageIndex := sSkinManager1.GetMaskIndex(sSkinManager1.ConstData.IndexGlobalInfo, s_GlobalInfo, sComboBox1.Text);
if ImageIndex > -1 then begin
DrawSkinGlyph(sSkinProvider1.TitleButtons.Items[0].Glyph, Point(0, 0), 0 , 1, sSkinManager1.ma[ImageIndex] , MakeCacheInfo(sSkinProvider1.TitleButtons.Items[0].Glyph));
DrawSkinGlyph(sSkinProvider1.TitleButtons.Items[0].Glyph, Point(0, 0), 1 , 1, sSkinManager1.ma[ImageIndex] , MakeCacheInfo(sSkinProvider1.TitleButtons.Items[0].Glyph));
DrawSkinGlyph(sSkinProvider1.TitleButtons.Items[0].Glyph, Point(0, 0), 2 , 1, sSkinManager1.ma[ImageIndex] , MakeCacheInfo(sSkinProvider1.TitleButtons.Items[0].Glyph));
end;
end;FeLDMaRShaL
ParticipantУвидел новый билд скиновых компонентов, где в истории изменения указаны исправления по моим вопросам в компоненте RichViewEdit. Может для устранения моей последней проблемы нужно всего лишь обновить версию скин компонентов?
FeLDMaRShaL
ParticipantОгромное спасибо за помощь. Но я опять со своими помидорами.
Есть скины которые правильно отображают мой компонент, а есть которые не совсем так как я хочу. Но таких скинов не так уж и много, поэтому было принято решение немного исправить существующие Ваши скины. Но проблемы в том что я не могу найти нужную секцию которую надо править у скинов.
К топику прикладываю пример (такой же как прошлый раз), на котором есть кнопка смены скина (в проекте применяются скины FalloutStyle.asz и Nautilus.asz).
Оба скина имеют Черную секцию “Edit” но у второго скина основная часть компонента остается белой, а у первого она меняется на черный цвет.
Не могли бы Вы мне подсказать где и что мне поменять у скина FalloutStyle.asz, чтобы область редактирования у компонента RichViewEdit была такой же как и у скина Nautilus.asz.
FeLDMaRShaL
ParticipantЕще одинбаг всплал. Теперь я справо от компонента RichViewEdit расположил родной скиновый компонент TsScrollBar (как временное решение пытался через него произвести отображение полосы прокрутки).
Но вот в чем загвоздка, как только я заставляю компонент изменять свойство Position, как сама полоса теряет отрисовку скина, и до тех пор пока я не наведу (просто наведу) хотябы 1 раз мышку на этот компонент.
P.S. для того чтобы воспроизвести данный баг, необходимо сначала создать вкладку (кнопка Add Page), потом подвести мышку на компонент и покрутить колесиком верх/вниз.
P.S. мышка не должна случайно попасть ан компонент скролбара, иначе баг прекращяется.
P.S. использую Windows7.
FeLDMaRShaL
ParticipantПопробовал еще вариант (все в этом же событи скин провайдера)
Code:SkinSection := sScrollBar1.SkinData.SkinSection;Визуально скролбар нужного компонента немного изменился, но не скинизировался, а просто стал квадратным и еще более не красивый чем стандартный(хоть и немного от него стал отличаться), я тут подумал, может я не ту секцию какунибуть указываю.
FeLDMaRShaL
ParticipantПопробовал использовать событие:
Code:procedure TForm1.sSkinProvider1SkinItem(Item: TComponent;
var CanBeAdded: Boolean; var SkinSection: string);
begin
if Item.Name = 'qwert' then
begin
SkinSection := 'MYEDIT';
CanBeAdded := True;
end;
end;Но после долгих и упорных размышлений, пришел к выводу что изменять все скины это будет проблематично, так как это будет не решением проблемы, а лишь скрытие от глаз (+ при каждом новом обновлении данную операцию придется проделывать заново). Остается надежда на администраторов/модераторов, у которых получится воспроизвести вышеупомянутый баг (на Windows7), и в ближайших релизах можно будет увидеть правильно работающий компонент.
FeLDMaRShaL
ParticipantНемного не понял. Создать секцию вот так как на скриншоте:
И второй вопрос, каким образом на стороннем компоненте можно прописать использовать именно эту секцию за место стандартной?
Если не сложно, то можно ли по пальцам расписать как это сделать, или дать ссылку на мануал по этому дело(я ни на сайте ни на форуме ненашел ничего подобного, или возможно не так искал)
P.S. можно показать на примере sRichView – компонент входящий в состав AC (я так понимаю принцип будет схожий)
FeLDMaRShaL
ParticipantЕсли не затруднит, то можно ли поподробнее с этим вариантом, а то я не совсем Вас понял.
FeLDMaRShaL
ParticipantКстати, если кого не затруднит, может ктонибуть скажет как пользоваться AlphaSkinsEditorom. Мне нужно чтобы у компонента sRishView фон стал белым(прозрачным).
Открываю например скин Terminal4bit, захожу в пункт Sections, выбираю пункт EditControls, далее выбираю пункт Edit, там изменяю свойство Color на белый цвет, а он мне меняет все компоненты. Как сделать так, чтобы был изменен только фон у компонента SRichView? (это будет запасной вариант, если с тем что я озвучил в предыдущем посте не получится)
FeLDMaRShaL
Participant'Mike' wrote:Если имеется возможность использовать отредактированный скин, то сделайте новую секцию на основе стандартной Edit и в ней измените фон на белый. Если нужен Glowing и т.п. – добавьте новую секцию во все разделы, где присутствует Edit.
Хм, т.е. Вы предлагаете после каждого обновления AC, скачивать новые скины, и каждый скин (в программе пользователю доступны все скины) каждый раз править? В принципе это вариант, но как-то он мне не сильно устраивает, хоть возможно и подойдет.
А можно ли какнибуть сделать так, чтобы у компонента TsSkinManager, у свойства ThirdPaty добавить еще один пункт в “Type of skin”, назвать его например MyGrid, который будет точно такой же как Grid, за исключением того, что он не будет закрашивать фон?
Или есть ли возможность гденибуть подправить и изменить стандартный тип Grid?
FeLDMaRShaL
ParticipantДома поэкспериментирую, вечером отпишусь о результатах.
FeLDMaRShaL
ParticipantДействительно, один и тотже ехе файл ведет себя по разному. У меня тоже (на виртуальной машине) на Windows XP sp3 данный баг не задетектился. Но стабильно детектится на Windows7.
С учетом Вашего опыта, а также вышесказанного следует возможный вывод что только на Windows7 наблюдается это бедствие.
FeLDMaRShaL
ParticipantПопробовал (раньше о ней не знал, не доводилось пользоваться), довольно удобное свойство. Но у меня не получилось сделать кнопку минимизации, которая будет выглядит как родная кнопка минимизации в заскинованном виде. Если есть какиенибуть идеи, как можно это реализовать буду очень признателен если их озвучат.
Но самое главное, что при определенных скинах данная кнопка не рисуется, т.е. ее визуально не видно, причем таких скинов довольно много (например, Terminal4bit)
FeLDMaRShaL
ParticipantХинт скрыть – довольно просто.
Из моего примера можно сделать например вот так: в конце метода OnGetHint мы можем дописать пару строчек. Например вот таких
Code:MyHint := HintText
HintText := ''Где MyHint – какая то глобальная переменная. И сразу после этих строк вызвать Ваш хинт, который будет содержать этот самый MyHint в качестве хинта.
Следовательно вопрос, какой командой можно вызвать Ваш хинт, зная текст хинта, а также координаты местоположения мышки. (Из этих координат необходимо чтоб Ваш хинт брал начало).
-
AuthorPosts