|
Вопрос # 1 907/ вопрос открыт / |
|
Приветствую, уважаемые эксперты! нужно чтобы при запуске программы выходило 2 формы, форма1 и форма2! форма2 на первом плане! на форме2 воспроизводится ролик, после его окончания форма2 закрывается! на экране остается только форма1! в чем проблема: в том что при закрыти формы2 выходит ошибка!
Приложение: Переключить в обычный режим-
-
- unit Unit1;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs;
-
- type
- TForm1 = class(TForm)
- procedure FormActivate(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- uses Unit2;
-
- {$R *.dfm}
-
- procedure TForm1.FormActivate(Sender: TObject);
- begin
- Form2.visible:=true;
-
- end;
-
- end.
-
-
- unit Unit2;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, ExtCtrls, MPlayer;
-
- type
- TForm2 = class(TForm)
- MediaPlayer1: TMediaPlayer;
- Panel1: TPanel;
- procedure MediaPlayer1Notify(Sender: TObject);
- procedure FormActivate(Sender: TObject);
-
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- Form2: TForm2;
-
- implementation
-
- {$R *.dfm}
-
- procedure TForm2.MediaPlayer1Notify(Sender: TObject);
- begin
- MediaPlayer1.Notify:=true;
- form2.close
- end;
-
- procedure TForm2.FormActivate(Sender: TObject);
- begin
- MediaPlayer1.Play;
-
- end;
-
-
-
- end.
 |
Вопрос задал: Ученый (статус: 8-ой класс)
Вопрос отправлен: 16 сентября 2008, 18:18
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Николай Рубан
Здравствуйте, Ученый!
В первой форме нужно создать обработчик FormShow:
procedure TForm1.FormShow(Sender: TObject);
begin
Form2.ShowModal;
end;
Также не забудьте описать второй модуль в первом:
uses
..., unit2;
Что касается второй формы, то необходимо на ней также расположить и таймер, его свойство Timer1.Enabled установить равное True.
И создать такие обработчики:
procedure TForm2.FormShow(Sender: TObject);
begin
MediaPlayer1.Play; //начинаем проигрывать файл
end;
procedure TForm2.Timer1Timer(Sender: TObject);
begin
if MediaPlayer1.Position >= MediaPlayer1.Length then //если видео файл закончился, то закрываем форму
begin
Timer1.Enabled:=False; //выключаем таймер
MediaPlayer1.Stop;
Form2.Close;
end;
end;
Полные тексты модулей в приложении
Good Luck!
Приложение: Переключить в обычный режим- //========UNIT 1========
- unit Unit1;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, unit2;
-
- type
- TForm1 = class(TForm)
- procedure FormShow(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- {$R *.dfm}
-
- procedure TForm1.FormShow(Sender: TObject);
- begin
- Form2.ShowModal;
- end;
-
- end.
-
-
- //========UNIT 2========
- unit Unit2;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, MPlayer, ExtCtrls, StdCtrls, ComCtrls;
-
- type
- TForm2 = class(TForm)
- Panel1: TPanel;
- MediaPlayer1: TMediaPlayer;
- Timer1: TTimer;
- procedure FormShow(Sender: TObject);
- procedure Timer1Timer(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- Form2: TForm2;
-
- implementation
-
- {$R *.dfm}
-
- procedure TForm2.FormShow(Sender: TObject);
- begin
- MediaPlayer1.Play;
- end;
-
- procedure TForm2.Timer1Timer(Sender: TObject);
- begin
- if MediaPlayer1.Position >= MediaPlayer1.Length then
- begin
- Timer1.Enabled:=False;
- MediaPlayer1.Stop;
- Form2.Close;
- end;
- end;
-
- end.
-
-
 |
Ответ отправил: Николай Рубан (статус: 10-ый класс)
Время отправки: 16 сентября 2008, 19:43
Оценка за ответ: 5
Комментарий к оценке: спасибо
|
Мини-форум вопроса
Всего сообщений: 26; последнее сообщение — 16 сентября 2008, 19:55; участников в обсуждении: 4.
Страницы: [1] [2] [Следующая »]
|
Аксион (статус: 4-ый класс), 16 сентября 2008, 18:38 [#1]:
А что за ошибка то?
|
|
Мережников Андрей (статус: Абитуриент), 16 сентября 2008, 18:40 [#2]:
Строку MediaPlayer1.Notify:=true;
переместите в обработчик события FormActivate перед MediaPlayer1.play;
Какая ошибка выходит?
|
|
Аксион (статус: 4-ый класс), 16 сентября 2008, 18:40 [#3]:
Вообще можно вместо form2.close поставить form2.visible:=false тогда форма просто станет невидимой....
|
|
Ученый (статус: 8-ой класс), 16 сентября 2008, 18:44 [#4]:
ошика следущаяя :cannot change Visible in OnShow or OnHide
|
|
Мережников Андрей (статус: Абитуриент), 16 сентября 2008, 18:45 [#5]:
а показывать форму лучше не form2.visible:=true, а form2.show, чтобы она стала видимой на переднем плане.
|
|
Ученый (статус: 8-ой класс), 16 сентября 2008, 18:47 [#6]:
"Строку MediaPlayer1.Notify:=true;
переместите в обработчик события FormActivate перед MediaPlayer1.play" выходит таже ошибка!
|
|
Аксион (статус: 4-ый класс), 16 сентября 2008, 18:48 [#7]:
Ну и? Английский язык то учим?
|
|
Аксион (статус: 4-ый класс), 16 сентября 2008, 18:49 [#8]:
Нельзя изменять видимость в обработчиках процедур OnShow и OnHide ...
|
|
Ученый (статус: 8-ой класс), 16 сентября 2008, 18:53 [#9]:
Слушайте, а как можно сделать так, что запускается одно преложение, на котором воспроизводится видео ролик, потом оно закрывается и открывается друго приложение?
|
|
Ученый (статус: 8-ой класс), 16 сентября 2008, 18:54 [#10]:
" Нельзя изменять видимость в обработчиках процедур OnShow и OnHide ..." что сделать?
|
|
Аксион (статус: 4-ый класс), 16 сентября 2008, 18:58 [#11]:
А почему бы не сделать всё на одной форме?
|
|
Ученый (статус: 8-ой класс), 16 сентября 2008, 19:08 [#12]:
Научи! я на одной не умею! Мне надо чтобы при запуске программы сначала прошла заставка, а потом начала работать сама программа!
|
|
Мережников Андрей (статус: Абитуриент), 16 сентября 2008, 19:08 [#13]:
проблема у Вас в том, что Вы поставили form2.visible:=true; в обработчик OnActivate формы1. Получается следующий порядок: активируется форма1, становится видимой форма2, затем форма2 закрывается и фокус переходит к форме1, т.е. она снова активизируется! Получается бесконечный цикл! Уберите form2.visible:=true из обработчика OnActivate, например в обработчик OnShow первой формы.
|
|
Мережников Андрей (статус: Абитуриент), 16 сентября 2008, 19:10 [#14]:
А mediaplayer1.notify:=true, все таки перставьте как я сказал выше;
|
|
Аксион (статус: 4-ый класс), 16 сентября 2008, 19:11 [#15]:
На чём видио проигрывается? На Panel?
|
|
Ученый (статус: 8-ой класс), 16 сентября 2008, 19:18 [#16]:
"На чём видио проигрывается? На Panel?" да на не самой!
|
|
Ученый (статус: 8-ой класс), 16 сентября 2008, 19:22 [#17]:
Мережников Андрей, сделал как вы и сказали! все катит но одно но: На переднем плане форма1, а форма2 на заднем, нужно наоборот! как это можно сделать?
|
|
Аксион (статус: 4-ый класс), 16 сентября 2008, 19:23 [#18]:
Делаешь так: помещаешь всё что нужно на форму, СВЕРХУ ложешь Panel и когда видио проиграется делаешь: panel1.visible:=false; панель исчезнет и всё что под ней было покажется....
|
|
Мережников Андрей (статус: Абитуриент), 16 сентября 2008, 19:25 [#19]:
как сделать чтобы форма2 была перед формой 1 я тоже уже писал - используйте не form2.visible:=true, а form2.show
|
|
Ученый (статус: 8-ой класс), 16 сентября 2008, 19:28 [#20]:
А где надо писать, а то не че не меняется!
|
Страницы: [1] [2] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|