![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() В XE3 Delphi FMX менять стили легко. для этого там есть компонент.
а как программно менять стили в VCL . Короче как программно управлять стилями в XE3 Delphi VCL именно программно. Конечно можно заранее подключить все стили а потом их переключать но я люблю делать загрузкой так что их надо загружать и активировать программно. Скажите как. |
#2
|
|||
|
|||
![]() Только начал изучать FireMonkey. Насколько я понял, стили это особенность программирования в этой библиотеке (она не совместима с VCL). На VCL можете использовать темы Windows, но советую полностью перейти на FM, т.к. 1) возможности стилей больше, чем у тем Windows, 2) в FM много эффектов и анимаций, легко совмещаются 2D и 3D, 3) можно сделать приложения не для Windows.
|
#3
|
||||
|
||||
![]() Цитата:
Совместима раз можно в опциях выбрать стиль для VCL то можно и программно. в опциях они выбираются в Application-->appearance перешел бы но проект с нуля писать ужас. я и так его уже 4 месяца пишу. Также есть там мину в FMX не возможно иконку программно загрузить. еще пару 10сяток недостатков. так как FMX отличается от VCL да и притом книг по нему мало то не могу Последний раз редактировалось AlexandrV, 19.06.2013 в 12:14. |
#4
|
||||
|
||||
![]() Может кто скажет как прграмно управлять стилями в VCL
|
#5
|
||||
|
||||
![]() Делал по этому коду но он мне стиль не грузит
Код:
procedure TForm5.ButtonedEdit1RightButtonClick(Sender: TObject); var si: TStyleInfo; begin if OpenDialog1.Execute then if TStyleManager.IsValidStyle(OpenDialog1.FileName,si) then begin ButtonedEdit1.Text:=OpenDialog1.FileName; {выводим информацию} label8.Caption:=si.Name; label9.Caption:=si.Author; label10.Caption:=si.AuthorEMail; label11.Caption:=si.AuthorURL; label12.Caption:=si.Version; {грузим стиль} if TStyleManager.Style[si.Name]=nil then begin TStyleManager.LoadFromFile(OpenDialog1.FileName); {заносим имя стиля в список} cbRegistredStyles.Items.Add(si.Name); end; end else ShowMessage('Этот файл не содержит стилей оформления'); end; но почему стиль не выбирается Последний раз редактировалось Admin, 20.06.2013 в 19:49. |
#6
|
||||
|
||||
![]() Используйте методы класса TStyleManager, конкретно
Код:
IsValidStyle(const FileName: string): boolean или Код:
IsValidStyle(const FileName: string; var StyleInfo: TStyleInfo): boolean Код:
TStyleInfo = record Name: string;//наименование Author: string; //автор стиля AuthorEMail: string; //его email AuthorURL: string; //адрес сайта Version: string; //версия файла end; Код:
LoadFromFile(const FileName: string): TStyleServicesHandle Код:
LoadFromResource(Instance: HINST; const ResourceName: string): TStyleServicesHandle LoadFromResource(Instance: HINST; const ResourceName: string; ResourceType: PChar): TStyleServicesHandle TryLoadFromResource(Instance: HINST; const ResourceName: string; ResourceType: PChar; var Handle: TStyleServicesHandle): Boolean После загрузки стили необходимо применить Код:
TrySetStyle(const Name: string; ShowErrorDialog: Boolean): Boolean А чтобы узнать какой стиль сейчас используется, или какие стили доступны можно воспользоваться свойствами класса ActiveStyle возвращает используемый в настоящее время стиль в оформлении. IsCustomStyleActive возвращает True в случае, если используется стиль отличный от стиля Windows Style возвращает объект стиля по его имени. StyleNames возвращает список названий зарегистрированных стилей. SystemStyle возвращает системный стиль, т.е. стиль Windows. На семёрке это не действует, (нету стилей в D7 окромя AlphaControls:-) поэтому проверить нет возможности, но вроде источник надёжный, скопипащенному верить. Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#7
|
||||
|
||||
![]() Можешь написать загрузку и регистрацию используя путь к стили
|
#8
|
||||
|
||||
![]() Код:
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls, Vcl.Buttons, Vcl.ExtCtrls,IniFiles,Vcl.Themes,unit2; type TForm1 = class(TForm) Image1: TImage; BitBtn1: TBitBtn; RichEdit1: TRichEdit; ComboBox1: TComboBox; ListBox1: TListBox; procedure ComboBoxEx1Change(Sender: TObject); procedure BitBtn1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; Type TStyleIniVCL=Record PathStyleName:String; NameStyle,TextStyle:String; BmpPathNameStyle:String; End; Procedure LoadIniStyleData; Function LoadStyleReadIni(TextOkno:String;TextButton1:String;TextMemo:String):Boolean; var Form1: TForm1; STL:Array[1..9] of String; StyleIniVCL:Array of TStyleIniVCL; Strsi:String; StyleManager:TStyleManager; implementation uses un2; {$R *.dfm} Procedure LoadIniStyleData; var tyhjk:Integer; begin IniStyleData:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'LibxEditFiles\Style\cfgStyle.StyleData'); SetLength(StyleIniVCL,IniStyleData.ReadInteger('Style','MaxStyle',8)); for tyhjk := 0 to IniStyleData.ReadInteger('Style','MaxStyle',8) do begin Form1.ComboBox1.Items.Add(IniStyleData.ReadString('Style','Text'+inttostr(tyhjk),'')); StyleIniVCL[tyhjk].PathStyleName:=ExtractFilePath(Application.ExeName)+IniStyleData.ReadString('Style','StylePath'+inttostr(tyhjk),''); StyleIniVCL[tyhjk].NameStyle:=IniStyleData.ReadString('Style','Name'+inttostr(tyhjk),''); StyleIniVCL[tyhjk].TextStyle:=IniStyleData.ReadString('Style','Text'+inttostr(tyhjk),''); StyleIniVCL[tyhjk].BmpPathNameStyle:=ExtractFilePath(Application.ExeName)+IniStyleData.ReadString('Style','BmpStyle'+inttostr(tyhjk),''); end; IniStyleData.Free; Lang:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'LibxEditFiles\Lang\'+Language+'.data'); for tyhjk := 1 to 9 do begin STL[tyhjk]:=Lang.ReadString('Текст-->Style','STL'+Inttostr(tyhjk),''); end; StyleDLG3:=Lang.ReadString('Текст-->Dialog','StyleDLG3',''); Lang.Free; end; Function LoadStyleReadIni(TextOkno:String;TextButton1:String;TextMemo:String):Boolean; begin LoadIniStyleData; Form2.ImageList1.GetBitmap(6,Form1.BitBtn1.Glyph); Form1.Caption:=TextOkno; Form1.RichEdit1.Lines.Text:=TextMemo; Form1.BitBtn1.Caption:=TextButton1; Form1.BitBtn1.ModalResult:=mrOk; Result:=Form1.ShowModal=mrOk; end; procedure TForm1.BitBtn1Click(Sender: TObject); begin Form1.Close; StyleManager.TrySetStyle(form1.ListBox1.Items.Strings[Form1.ListBox1.ItemIndex],True); StyleManager.Free; end; procedure TForm1.ComboBoxEx1Change(Sender: TObject); var si : TStyleInfo; i:Integer; begin StyleManager:=TStyleManager.Create; if StyleManager.IsValidStyle(StyleIniVCL[Form1.ComboBox1.ItemIndex].PathStyleName,si) then begin Form1.RichEdit1.Clear; AddColorText(STL[1]+' ',ClBlue,Form1.RichEdit1); AddColorText(si.Name,clPurple,Form1.RichEdit1); Form1.RichEdit1.Lines.Add(''); AddColorText(STL[2]+' ',ClBlue,Form1.RichEdit1); AddColorText(StyleIniVCL[Form1.ComboBox1.ItemIndex].NameStyle,clPurple,Form1.RichEdit1); Form1.RichEdit1.Lines.Add(''); AddColorText(STL[3]+' ',ClBlue,Form1.RichEdit1); AddColorText(StyleIniVCL[Form1.ComboBox1.ItemIndex].PathStyleName,clPurple,Form1.RichEdit1); Form1.RichEdit1.Lines.Add(''); AddColorText(STL[4]+' ',ClBlue,Form1.RichEdit1); AddColorText(StyleIniVCL[Form1.ComboBox1.ItemIndex].BmpPathNameStyle,clPurple,Form1.RichEdit1); Form1.RichEdit1.Lines.Add(''); AddColorText(STL[5]+' ',ClBlue,Form1.RichEdit1); AddColorText(si.Author,clPurple,Form1.RichEdit1); Form1.RichEdit1.Lines.Add(''); AddColorText(STL[6]+' ',ClBlue,Form1.RichEdit1); AddColorText(si.AuthorEMail,clPurple,Form1.RichEdit1); Form1.RichEdit1.Lines.Add(''); AddColorText(STL[7]+' ',ClBlue,Form1.RichEdit1); AddColorText(si.AuthorURL,clPurple,Form1.RichEdit1); Form1.RichEdit1.Lines.Add(''); AddColorText(STL[8]+' ',ClBlue,Form1.RichEdit1); AddColorText(si.Version,clPurple,Form1.RichEdit1); Form1.RichEdit1.Lines.Add(''); AddColorText(STL[4]+' ',ClBlue,Form1.RichEdit1); AddColorText(StyleIniVCL[Form1.ComboBox1.ItemIndex].TextStyle,clPurple,Form1.RichEdit1); Form1.RichEdit1.Lines.Add(''); Form1.Image1.Picture.LoadFromFile(StyleIniVCL[Form1.ComboBox1.ItemIndex].BmpPathNameStyle); if StyleManager.Style[si.Name]=nil then begin StyleManager.LoadFromFile(StyleIniVCL[Form1.ComboBox1.ItemIndex].PathStyleName); ListBox1.Items.Clear; for i := 0 to Length(StyleManager.StyleNames)-1 do begin ListBox1.Items.Add(StyleManager.StyleNames[i]); end; end; end else begin ShowMessage(StyleDLG3); end; end; end. при первом открытии окна нет ошибок но при втором открытии окна системная ошибка. скажте почему и как исправить Последний раз редактировалось AlexandrV, 20.06.2013 в 10:18. |
#9
|
||||
|
||||
![]() Вот эту строчку
Код:
StyleManager:=TStyleManager.Create; Код:
StyleManager.Free{.Destroy}; З.Ы. Или может сделать так Код:
procedure TForm1.BitBtn1Click(Sender: TObject); begin StyleManager.TrySetStyle(form1.ListBox1.Items.Strings[Form1.ListBox1.ItemIndex],True); StyleManager.Free; Form1.Close; end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! Последний раз редактировалось Alegun, 20.06.2013 в 10:42. |
#10
|
||||
|
||||
![]() Это у меня модальная форма а форма 2 является главной долго объяснять почему так вышло
|
#11
|
||||
|
||||
![]() Нет все равно при втором открытие системная ошибка а при закрытии программы такая вот системная ошибка
http://www.delphisources.ru/forum/at...d=137171043 3 Код:
Function LoadStyleReadIni(TextOkno:String;TextButton1:String;TextMemo:String):Boolean; begin LoadIniStyleData; Form2.ImageList1.GetBitmap(6,Form1.BitBtn1.Glyph); Form1.Caption:=TextOkno; Form1.RichEdit1.Lines.Text:=TextMemo; Form1.BitBtn1.Caption:=TextButton1; Form1.BitBtn1.ModalResult:=mrOk; Result:=Form1.ShowModal=mrOk; end; Кажется в этом коде ошибка Он вызывает модальную форму но после применения стиля выходит ошибка записи вот на это он начинает ругацца Код:
Form2.ImageList1.GetBitmap(6,Form1.BitBtn1.Glyph); Form1.Caption:=TextOkno; Form1.RichEdit1.Lines.Text:=TextMemo; Form1.BitBtn1.Caption:=TextButton1; Form1.BitBtn1.ModalResult:=mrOk; Result:=Form1.ShowModal=mrOk; Последний раз редактировалось AlexandrV, 20.06.2013 в 10:49. |
#12
|
||||
|
||||
![]() Может кто подскажет компонент для работы со стилями а если нету сделаете.
В Fmx такой прекрасный компонент нет в Vcl почему та не сделали. Пожалуйста сделайте компонент для работы со стилями для XE3 Delphi Vcl по аналогии как это сделано в FMX. |
#13
|
||||
|
||||
![]() Пожалуйста. Напишите код применения стиля при создании формы используя файл. Очень нужно
|