Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 907

/ вопрос открыт /

Приветствую, уважаемые эксперты! нужно чтобы при запуске программы выходило 2 формы, форма1 и форма2! форма2 на первом плане! на форме2 воспроизводится ролик, после его окончания форма2 закрывается! на экране остается только форма1! в чем проблема: в том что при закрыти формы2 выходит ошибка!

Приложение:
  1.  
  2.  
  3. unit Unit1;
  4.  
  5. interface
  6.  
  7. uses
  8. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  9. Dialogs;
  10.  
  11. type
  12. TForm1 = class(TForm)
  13. procedure FormActivate(Sender: TObject);
  14. private
  15. { Private declarations }
  16. public
  17. { Public declarations }
  18. end;
  19.  
  20. var
  21. Form1: TForm1;
  22.  
  23. implementation
  24.  
  25. uses Unit2;
  26.  
  27. {$R *.dfm}
  28.  
  29. procedure TForm1.FormActivate(Sender: TObject);
  30. begin
  31. Form2.visible:=true;
  32.  
  33. end;
  34.  
  35. end.
  36.  
  37.  
  38. unit Unit2;
  39.  
  40. interface
  41.  
  42. uses
  43. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  44. Dialogs, ExtCtrls, MPlayer;
  45.  
  46. type
  47. TForm2 = class(TForm)
  48. MediaPlayer1: TMediaPlayer;
  49. Panel1: TPanel;
  50. procedure MediaPlayer1Notify(Sender: TObject);
  51. procedure FormActivate(Sender: TObject);
  52.  
  53. private
  54. { Private declarations }
  55. public
  56. { Public declarations }
  57. end;
  58.  
  59. var
  60. Form2: TForm2;
  61.  
  62. implementation
  63.  
  64. {$R *.dfm}
  65.  
  66. procedure TForm2.MediaPlayer1Notify(Sender: TObject);
  67. begin
  68. MediaPlayer1.Notify:=true;
  69. form2.close
  70. end;
  71.  
  72. procedure TForm2.FormActivate(Sender: TObject);
  73. begin
  74. MediaPlayer1.Play;
  75.  
  76. end;
  77.  
  78.  
  79.  
  80. 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!

Приложение:
  1. //========UNIT 1========
  2. unit Unit1;
  3.  
  4. interface
  5.  
  6. uses
  7. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  8. Dialogs, unit2;
  9.  
  10. type
  11. TForm1 = class(TForm)
  12. procedure FormShow(Sender: TObject);
  13. private
  14. { Private declarations }
  15. public
  16. { Public declarations }
  17. end;
  18.  
  19. var
  20. Form1: TForm1;
  21.  
  22. implementation
  23.  
  24. {$R *.dfm}
  25.  
  26. procedure TForm1.FormShow(Sender: TObject);
  27. begin
  28. Form2.ShowModal;
  29. end;
  30.  
  31. end.
  32.  
  33.  
  34. //========UNIT 2========
  35. unit Unit2;
  36.  
  37. interface
  38.  
  39. uses
  40. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  41. Dialogs, MPlayer, ExtCtrls, StdCtrls, ComCtrls;
  42.  
  43. type
  44. TForm2 = class(TForm)
  45. Panel1: TPanel;
  46. MediaPlayer1: TMediaPlayer;
  47. Timer1: TTimer;
  48. procedure FormShow(Sender: TObject);
  49. procedure Timer1Timer(Sender: TObject);
  50. private
  51. { Private declarations }
  52. public
  53. { Public declarations }
  54. end;
  55.  
  56. var
  57. Form2: TForm2;
  58.  
  59. implementation
  60.  
  61. {$R *.dfm}
  62.  
  63. procedure TForm2.FormShow(Sender: TObject);
  64. begin
  65. MediaPlayer1.Play;
  66. end;
  67.  
  68. procedure TForm2.Timer1Timer(Sender: TObject);
  69. begin
  70. if MediaPlayer1.Position >= MediaPlayer1.Length then
  71. begin
  72. Timer1.Enabled:=False;
  73. MediaPlayer1.Stop;
  74. Form2.Close;
  75. end;
  76. end;
  77.  
  78. end.
  79.  
  80.  


Ответ отправил: Николай Рубан (статус: 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] [Следующая »]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:52
Выполнено за 0.03 сек.