1 / 1 / 1
Регистрация: 11.01.2014
Сообщений: 14
1

Использование скинов в готовых программах в Delphi

24.10.2014, 10:45. Показов 4031. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Шарил по нету, но так и не нашел полного описания как использовать скины. Свою проблему решил и теперь хочу поделиться.
Для начала опишу свою программу: несколько форм, на одной из форм есть 2 таблицы.

Теперь перейду к сути. Я использую delphi xe5. Эта инфа должна подойти к delphi xe2-xe7.

Запускаем проект. В меню "Project" выбираем "Options" переходим в "Application" -> "Appearance".
Далее в правом окне видим список скинов (в делфи хе5 их достаточно много). Вибираем часть из них (можно все) и нажимаем "ОК".

Создаем текстовый файл и размещаем его в корне программы (рядом с exe-шным файлом, а не проектом / между delphi7 и delphiXE5 есть разница).
Открываем файл и в первую строку прописываем Windows
В остальных строках можете писать что угодно, но что бы в первой строке было только 1 вышеуказанное слово без всяких символов.
Переименовываем файл как хотим. Я назвал dbd.dn (можно и без расширения).
Открываем form1. Размещаем на нём Lable1 и в его свойстве visible ставим FALSE.
На событие FormCreate пишем следующий код:

Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm1.FormCreate(Sender: TObject);
var
infot: TStringList;
begin
infot:= Tstringlist.Create;
infot.LoadFromFile('dbd.dn'); //открываем файл
form1.Label1.Caption:= infot.Strings[0]; //имя lable1 переименовываем в текст из первой строки нашего файла
infot.Free;
TStylemanager.TrySetStyle(form1.Label1.Caption, false); //для программы запускаем стиль с именем из lable
// т.к. Lable1.visible=false это никак не нарушает гармонию программы.
end;

Не запуская программу (т.к. она создаст ошибку) переходим вверх в раздел USES и дописываем Vcl.temes
Далее создаем новую форму. Добавляем на неё ComboBox1 , Button1.
Сразу переходим в раздел USES и добавляем Vcl.Themes
На событие FormCreate (последней формы) пишем:

Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm2.FormCreate(Sender: TObject);
var
cm: TStyleManager;
c:integer;
begin
form2.ComboBox1.Text:= form1.Label2.Caption; //имя ComboBox1 по умолчанию - текущий скрин
cm:= TStyleManager.Create;
for c := 0 to length(cm.StyleNames)-1 do
form2.ComboBox1.Items.Add(cm.StyleNames[c]); //создаем список скринов и помещаем этот список в Combobox1.
cm.Free;
end;
Далее выбираем ComboBox1 и в OBJECT INSPECTOR переходим на закладку EVENTS и на событие OnSelect пишем:

Delphi
1
2
3
4
5
6
7
8
procedure TForm2.ComboBox1Select(Sender: TObject);
begin
form1.Visible:=false;
form2.Visible:=false;
TStyleManager.TrySetStyle(form2.ComboBox1.Text, false); //установка выбранного скина.
form1.Visible:=true;
form2.Visible:=true;
end;
Далее выбираем кнопку Button1 на форме Form2 и пишем в поле Caption: Установить по умолчанию
Далее пишем код для нажатия кнопки:

Delphi
1
2
3
4
5
6
7
8
9
10
procedure TForm2.Button1Click(Sender: TObject);
var
um: TStringList;
begin
um := TstringList.Create;
um.LoadFromFile('dbd.dn');
um.Strings[0]:=form2.ComboBox1.Text; //в первую строку файла вписываем текущее имя скрина
um.SaveToFile('dbd.dn');
um.Free;
end;
В принципе все готово, но хочу добавить ещё 1 момент:
У меня на одной из форм есть 2 таблицы с закрашеным фоном.
Что бы по умолчанию этот фон отображался нужно было в свойстве DrawingStile установить gdsClassic или gdsGradient.
После смены скина эти заливки изменялись под скин. Во избежание этого нужно перейти в раздел StyleElements и в поле seClient установиь False.
Этот метод применим и к tEdit и к другим.

PS: Надеюсь было не скучно и это кому-то понадобиться.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.10.2014, 10:45
Ответы с готовыми решениями:

Нужно разобраться в готовых программах. сортировки
есть готовые программы, вот условие первой вот собственно код Program lab2; Type mas=array...

Использование скинов для приложения
Приветик всем!!! Как получить шаблон 2007 для своей программы

Как рисовать на контролах (использование скинов)
Помогите пожалуйста, мне нужно в качестве фона toolbar'а использовать рисунок. Как это сделать при...

использование готовых модулей
читаю статьи на сайте. появился вопрос: много готовых и недорогих устройств для компьютера, все...

5
725 / 477 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
24.10.2014, 14:03 2
А почему вместо Lable1 неиспользовать переменную?
0
1 / 1 / 1
Регистрация: 11.01.2014
Сообщений: 14
25.10.2014, 13:48  [ТС] 3
что бы легче было вытащить имя на второй форме:
На второй форме имя ComboBox1 присваивается имя используемого скрина по умолчанию. Что бы не читать систему и не читать заново из файла. Просто присваиваем form2.Combobox1 имя form1.Lable1

Если знаешь как вытащить переменную - поделись, а то я до сих пор обхожусь без этого, но буду рад научиться.
0
725 / 477 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
26.10.2014, 12:53 4
Label1 это тоже переменная вроде как, и вызов другой переменной ничем не отличается.
0
1 / 1 / 1
Регистрация: 11.01.2014
Сообщений: 14
26.10.2014, 13:03  [ТС] 5
Форма1:
Delphi
1
2
3
4
5
6
procedure TForm1.FormCreate(Sender: TObject);
var
S:string;
begin
S:='hello men';
end;
Форма2:
Delphi
1
2
3
4
5
6
7
procedure TForm2.FormCreate(Sender: TObject);
var
d:string;
begin
d:= form1.S;
showmessage(d);
end;
У меня такая прога не запускается.
Ошибка в том, что на форме 2 нет переменной "S". Даже если назначу переменную "S", прога не поймет на кой черт я обращаюсь к форме1.
Я, как лох, даже проверил это!

Объясни мне лоху, как ты это реализовываешь.
0
725 / 477 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
26.10.2014, 13:22 6
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    S: string;
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  S:='hello men';
end;
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.10.2014, 13:22
Помогаю со студенческими работами здесь

Использование dll в программах
приветствую! у меня есть проблема : я не знаю как использовать dll. есть вот такая dll : ...

Использование указателей в программах
Тема: «Использование указателей в программах» №5.2 Составить программу, которая вычисляет...

Использование указателей в программах
Прошу составить программу на с++ 1)Составить программу для подсчёта количества положительных...

Использование процедур в программах
Помогите решить практику, куча долгов до конца месяца, буду очень признателен Написать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru