Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.10.2011, 14:09   #1
Elegance3
Пользователь
 
Регистрация: 12.10.2011
Сообщений: 30
По умолчанию Приветственное окно в программе

Нужно реализовать приветственное окно перед началом работы программы.
Пробую реализовать по такой схеме: приветственная форма с картинкой и таймером, при запуске форма показывается, таймер отсчитывает к примеру 5-10 секунд, приветственная форма закрывается, и появляется главная форма, с которой будет происходить работа в программе.

Для приветственной формы использую обработчик события таймера вот так:
Цитата:
procedure TForm6.Timer1Timer(Sender: TObject);
begin
Form6.Close;
Form1.Show;
end;
При этом главная форма у меня установлена Form6 (приветственная), таймер уже установлен на 10000, и включен изначально.

В результате: при запуске программы происходит очень быстрое мелькание чего-то (наверное приветственной формы) и все завершается.
Посоветуйте, пожалуйста, как решить данную проблему или же как можно иначе реализовать такие вот приветственные окна. Заранее спасибо
Elegance3 вне форума Ответить с цитированием
Старый 12.10.2011, 14:18   #2
Neobrat
Форумчанин
 
Регистрация: 10.12.2007
Сообщений: 124
По умолчанию

на проекте View source

и там что то в роде

Код:
var
  xFRM : TForm6;
begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  xFRM := TForm6.Create(nil);
  xFRM.ShowModal;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
Русский язык не мой конёк
Neobrat вне форума Ответить с цитированием
Старый 12.10.2011, 14:33   #3
Elegance3
Пользователь
 
Регистрация: 12.10.2011
Сообщений: 30
По умолчанию

Свойство MainFormOnTaskBar у меня не определилось(( может надо подключить что-то в uses?
С помощью вашего кода приветственное окно держится бесконечно долго)
И при его закрытии вылетает ошибка.

Вот что у меня в Source:

Цитата:
var
xFRM : TForm6;
begin
Application.Initialize;
Application.MainFormOnTaskBar:=True ;
xFRM := TForm6.Create(nil);
xFRM.ShowModal;
Application.CreateForm(TForm6, Form6);
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm3, Form3);
Application.CreateForm(TAboutBox, AboutBox);
Application.CreateForm(TForm4, Form4);
Application.Run;
end.
Form6 это приветственная, Form1 - форма с которой осуществляется переход на другие формы.
Elegance3 вне форума Ответить с цитированием
Старый 12.10.2011, 14:39   #4
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Цитата:
С помощью вашего кода приветственное окно держится бесконечно долго)
Ясен пень что бесконечно создали показали а закрывать-то кто будет??
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 12.10.2011, 14:46   #5
Elegance3
Пользователь
 
Регистрация: 12.10.2011
Сообщений: 30
По умолчанию

ну так в обработчике таймера - прописано закрытие формы) или её отсуда же надо закрыть?
Elegance3 вне форума Ответить с цитированием
Старый 12.10.2011, 14:53   #6
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

так а теперь где логика?
форма показана как модальная соответственно пока её не закроешь программа не передаст управления другой форме!
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 12.10.2011, 14:53   #7
Elegance3
Пользователь
 
Регистрация: 12.10.2011
Сообщений: 30
По умолчанию

прошу прощения, впервые сталкиваюсь с понятием модальности


Пробовала в Source прописать закрытие формы 6 - не помогло - держится)

Последний раз редактировалось Elegance3; 12.10.2011 в 14:56.
Elegance3 вне форума Ответить с цитированием
Старый 12.10.2011, 14:55   #8
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Вытащил из рабочего проекта.
Зачем супермегаграбли с использованием таймеров? for to do и application.processmessages уже не те?

Код:
  if not RunParams('nss') then //не обращаем внимания
  begin
    Application.Title := 'Loading...';
    try
      SF := TSplashForm.Create(Application);
      SF.Show;
      SF.Update;
      for i := SF.ProgressLoad.MinValue to SF.ProgressLoad.MaxValue do //Держим заставку 2 секунды
      begin
        Application.ProcessMessages;
        SF.ProgressLoad.Progress := i + 1;
        Delay(20);
      end;
      SF.Hide;
    finally
      FreeAndNil(SF);
    end;
  end;
без всяких таймеров и чего-либо. А вместо прогрессара можно воткнуть цикл от 0 до 100.
TSplashForm - находится в доступных формах(сама она не создаётся).

З.Ы. заставка с долгим ожиданием, через 3-5 секунд заставляет юзеров нервно жать ctrl+alt+del и гонять мышь по рабочему столу. А затем вырубить программу, и запустить ещё ещё раз. Потом юзеры звереют...

Последний раз редактировалось Человек_Борща; 12.10.2011 в 15:04.
Человек_Борща вне форума Ответить с цитированием
Старый 12.10.2011, 15:09   #9
Elegance3
Пользователь
 
Регистрация: 12.10.2011
Сообщений: 30
По умолчанию

Среди компонентов New - Splash Form не нашла((
Elegance3 вне форума Ответить с цитированием
Старый 12.10.2011, 16:25   #10
IliaIT
Форумчанин
 
Аватар для IliaIT
 
Регистрация: 17.03.2009
Сообщений: 977
По умолчанию

судя по коду должно каждые 10 секунд отображать форму 1. и закрывать форму 6. попробуй отладку запустить.

в первую очередь исправь абсурдный код с точки зрения дельфи на следующий
Код:
  Form6.Hide;
  Form1.Show;
  Form6.Timer1.Enabled:=false;
только при закрытии программы не забудь закрыть форму 6, то есть
Код:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form6.close;
end;
1. если запустить прогу с отключённым таймером что происходит? (если всё верно то отобразиться только форма 6)
2. на начальной форме6 создай кнопку где написан твой код из события по таймеру (если всё верно то переходит на форму 1 и закрывает форму 6)



если выдало ошибку где то то надо глядеть что за ошибка. и что её генерирует. чаще всего чего то не то запускается в других формах.
Интуитивно понятный интерфейс - это такой интерфейс, для работы с которым нужна недюжинная интуиция.

Последний раз редактировалось IliaIT; 12.10.2011 в 16:44. Причина: замечена не та процедура
IliaIT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Треугольное окно со сторонами A, B, C. Проверить, пройдёт ли в окно коробка цилиндрической формы (D и H) (паскаль) ihimaru Помощь студентам 5 02.10.2011 22:11
[?] Послать клавишу в чужое окно, не выводя окно на передний план. Moriarty Win Api 4 21.02.2011 05:11
Написать к программе форму, кнопку и окно результатов M.Kelevra Microsoft Office Excel 6 26.12.2010 19:28
Отследить и закрыть окно ошибки в другой программе Человек_Борща Общие вопросы Delphi 4 11.08.2010 11:54
«Окно+символ». Создать класс, представляющий окно в текстовом режиме. RustreX Паскаль, Turbo Pascal, PascalABC.NET 1 11.11.2007 19:28