Практикум - создание программ с нестандартным интерфейсом 2.
В этом выпуске я расскажу вам, как создавать приложения с нестандартным интерфейсом не используя SkinForm.
Если хотите, чтобы получились красивые элементы управления (кнопки, списки и т.п.) используйте программу
Adobe ImageStyler (сойдет и ImageReady, но она послабее, т.к. ImageStyler предназнчен
именно для создания
графических элементов управления). Скачать вроде бы можно с www.adobe.com, крэк (если из adobe.com спросят,
я вам ничего не говорил :) в поисковике astalavista.box.sk. Но если качать неохота, можете наваять рисунки
в любом графическом редакторе, даже Paint сойдет.Так вот, подготовьте кнопку без надписи (для утверждения
выбора). Тут есть одно НО. Сколько у кнопок есть положений? У кого 2 у кого и 3. Мы заморачиваться с 3-мя
не будем, это вам задание на дом, изучите самостоятельно. Помните, что я вам про полезность опыта, набранного
самостоятельно говорил? Итак, создаете 2 положения для каждой кнопки. Что у нас еще есть? ФОН! Пока нарисуйте
простой прямоугольник с закругленными углами, но так, чтобы все кнопки влезли на него с запасом. Вроде все
готово. Запускайте Delphi, создайте новый проект. В свойствах формы измените BorderStyle на bsNone,
FormStyle на fsStayOnTop и WindowState на wsMaximized. Теперь положите на форму
TImage и присвойте ему рисунок с фоном.
Затем положите 3 RadioButton'а. Заголовки у них будут такие:
1) Выключить компьютер
2) Перезагрузить компьютер
3) Эмуляция MS-DOS
Установите их так, чтобы они были посередине фона. (Замечание: Фон необязательно должен заполнять всю доступную
область экрана). Теперь нам нужно разместить 2 кнопки ("ОК" и "Отмена"). Перед нами 2 пути:
1) Заранее разместить все положения кнопок на форме и по мере надобности показывать и скрывать их
2) Подгружать нужные рисунки с кнопками динамически (то есть загружать их извне)
Прелести первого способа:
Не нужно вместе с программой поставлять рисунки, они "зашиты" в самом коде программы; Высокая скорость прорисовки. Недостатки:
Большой размер исполняемого файла.
Прелести второго способа:
Малый размер исполняемого файла Недостатки:
Надо обязательно поставлять рисунки с прграммой, иначе произойдет ошибка (обрабокой исключитеьных ситуаций мы с
вами пока заниматься не будем), небольшая скорость вывода рисунка на экран (зависит от скорости самого компьютера).
Как видите, способы полностью противоположные, но мы остановимся на первом, он проще. Значит вам надо уже иметь
готовыми все положения каждой кнопки. То есть сначала создаете 2 TImage'a и присваиваете им рисунки с нажатым
положением. Затем строго поверх них создаете еще 2 TImage'a, но уже с нормальным положением. Затем поверх них
2 Label'a с надписями "OK" и "Отмена". Шрифт подберите покрасивее, и свойству Transparent
присвойте True. Теперь находим рисунок с нормальным положением и надписью над ним "ОК" и создаем
обработчик его события "OnMouseDown". Допустим этот компонент с этим рисунком называется Image3.
В обработчике пишем:
image3.visible:=false;
Для события "OnMouseUp":
image3.visible:=true;
Те же события для Label'a с надписью "ОК":
OnMouseDown:
image3.visible:=false;
OnMouseUp:
image3.visible:=true;
Для Label'a это нужно прописывать потому, что мы можем попасть не по рисунку, а по надписи.
Точно так же делаете для другой кнопки и надписи, заменяя Image3 своим именем (Image4, например).
Теперь наши кнопки делают вид, что нажимаются. Но! Надо заставть их делать что-либо полезное.
В событии OnMouseUpLabel'a с надписью "Отмена" и рисунка под ним дописываем:
form1.close;
В событии OnMouseUp Label'a с надписью "OK" и рисунка под ним дописываем:
if radiobutton1.checked then winexec('C:\WIN98\RUNDLL.EXE user.exe,exitwindows', SW_SHOWNORMAL) elseif radiobutton2.checked then winexec('C:\WIN98\RUNDLL.EXE user.exe,exitwindowsexec',SW_SHOWNORMAL) else winexec('C:\WIN98\Выход В Дос.pif',SW_SHOWNORMAL);
Все, программа готова. Она может выключать, перезагружать компьютер, но главное, к чему мы стремились, это
нестандартный интерфейс и он у нас кажется получился.
Напишите что вы хотите увидеть в следующим выпуске на адрес: delphi@xak.ru