Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы IT / ЛабаDelphi8.doc
Скачиваний:
62
Добавлен:
06.02.2015
Размер:
350.72 Кб
Скачать

Задание 2.1. Таким образом, запрограммируем, так чтобы при выборе конкретного файла в FileListBox1 и двойном щелчке на нём данный файл открывался сопоставленным с ним приложением.

В этом же проекте, подключите модуль ShellApi отвечающий за вызов Api функций. В обработчике события двойного клика (onDblClick) на FileListBox1 напишите следующее:

ShellExecute(form1.Handle,nil,PChar(FileListBox1.FileName),nil,

PChar(DirectoryListBox1.directory),SW_SHOW);

Запустите программу. Убедитесь, что выбранный файл открывается соответствующим приложением при щелчке на нём. Вернитесь в РП.

Задание 2.2. С помощью функции WinExec (которая используется реже, чем ShellExecute) также запустим приложение «Калькулятор».

В этом же проекте, в обработчике щелчка на кнопке Button1 напишите:

WinExec( 'Calc',SW_RESTORE); // вызываем калькулятор

Запустите программу. Убедитесь, что калькулятор запускается. Вернитесь в РП.

Задание 2.3. Самостоятельно, с помощью API функции WinExec запустите MsPaint, и Command.Com.

Задание 2.4 Покажем как сформировать окно заставки появляющееся на 3 секунды, а затем исчезающее

Часто при запуске программ требуется не сразу показать рабочее окно приложения, а сначала показать некоторую заставку с информацией о приложении. Сама заставка часто также является стандартным окном Windows.

Создайте новый проект. На экране у вас автоматически появляется форма Form1 описываемая модулем Unit1.pas . Добавьте ещё Form2, просто щелкнув на пиктограмме «New Form». У вас в проект добавится также Form2 с соответствующим модулем Unit2.

В данном случае в качестве заставки у нас будет использоваться Form2. То есть логика программы будет следующая. При запуске программы, на экране 3 секунды будет находиться Form2, а затем она исчезает и появляется Form1.

Таим образом, измените заголовок Form2 на «Заставка», а заголовок Form1 на «Основное приложение».

Рис. 1 Вид окна основного приложения

Поместите компонент Image1 на Form1, установите значение его свойства Align в alClient, чтобы он растянулся по всей поверхности формы Form2. Затем используя Object Inspector зайдите в его свойство Picture, щёлкните на кнопке «Load» и загрузите рисунок, выбрав какой-нибудь файл-картинку, например с расширением *.jpg.

Чтобы картинка в компоненте Image1 масштабировалась под размеры формы, установите у него свойство Stretch в значение True.

Рис. 2 Вид окна заставки

Таким образом, мы сформировали внешний вид заставки.

Теперь осталось запрограммировать.

Создайте обработчик события onCreate формы Form1, который должен выглядеть следующим образом:

procedure TForm1.FormCreate(Sender: TObject);

var c:DWORD;

begin

c:=GetTickCount div 1000;

repeat

sleep(5);

until (GetTickCount div 1000)>c+3;

end;

Данное событие происходит в момент формирования формы. Чтобы задержать её появление на экране, мы специально затягиваем по времени выполнение кода внутри обработчика этого главного события для формы Form1.

Здесь функция GetTickCount возвращает значение (целое) времени в миллисекундах после загрузки Windows. Данная функция является системной функцией ОС Windows и находится в файле ядра операционной системы Windows kernel32.dll.

То есть сначала, мы в переменную c целого типа DWORD сохраняем значение числа секунд в начальный момент времени выполнения данного обработчика. Чтобы получить из миллисекунд – секунды надо разделить число миллисекунд на 1000.

Затем мы организовываем цикл где сравниваем текущее значение времени в секундах (GetTickCount div 1000) с временем начала работы обработчика плюс 3 секунды.

Как только оно его превысит, цикл заканчивается и на экране появляется Form1.

Далее, как и обычно, в окне редактора кода откройте файл проекта Project1.dpr.

Измените его следующим образом:

program Project1;

uses

Forms,

Unit1 in 'Unit1.pas' {Form1},

Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin

Application.Initialize;

Form2:=TForm2.Create(Application);

Form2.Show; Form2.Update;

Application.CreateForm(TForm1, Form1);

{Application.CreateForm(TForm2, Form2);}

Form2.Close;

Application.Run;

end.

В данном случае, как только произошла инициализация главного объекта приложения Application, методом–конструктором своего класса TForm2 создаётся объект класса TForm2, на который указывает переменная–указатель Form2. При этом владельцем данного объекта Form2 назначается объект Application.

Затем методом Show заставка Form2 начинает, отображается на экране. По ряду причин связанных с обработкой сообщений перерисовки окна, мы дополнительно вызываем метод Update.

И далее сразу же мы создаём объект Form1 (считаем его основным окном), используя метод CreateForm главного объекта приложения Application, что влечёт за собой событие onCreate формы Form1 и вызов его обработчика. Таким образом, как только Form2 уже выведено на экран и отображается там, окно Form1 ещё только создаётся и не может быть выведено на экран, так как 3 секунды выполняется обработчик события onCreate компонента Form1. Как только работа обработчика завершена, Form1 появляется на экране, а Form2 мы просто закрываем методом Close и у нас остаётся лишь окно приложения Form1, которое мы считаем основным.

Задание 2.5 Самостоятельно создайте ещё один вариант предыдущей программы используя стандартный компонент Timer1.

автор и разработчик лабораторных

работ по Delphi

доцент кафедры Информационных технологий и систем

кандидат физ.-мат. наук

Санников Е.В.

Соседние файлы в папке Лабы IT