Проблема заставки

У меня такой вопрос пишу электронную книгу по Corel Draw не могу сделать к ней заставку.. Нашел на форуме разные способы реализации этой возможности но вся проблема в том что при запуске сначала курсор мыши переходит в песочные часы а потом моя заставка пролитает за доли секунды и запускает само приложение тоесть это не есть хорошо.. заставка создаеться для того чтоб пока приложение грузилось в это время была видна заставка а не песочные часы мыши.. так вот может кто нибудь писал такие заставки или может кто ссылочку кинет на ресурс а то в инете только я нахожу все одно и то же вот это:Статья просто-напросто безграмотная... Заставки создаются совсем не так... Главная цель создания заставки - показать пользователю какую-либо информацию в процессе загрузки большой программы, чтобы пользователь не гадал, грузится программа, или не грузится почему-то... Кроме имени пользователя можно, например, выводить на заставку какую-либо информацию о процессе загрузки программы (как, например, делает это сам Дельфи, показывая имена загружаемых пакетов). Не надо трогать обработчик OnShow главной формы... не надо ставить на форму-заставку таймер... Ничего этого не надо ! А надо - вот как :1) Создаем форму-заставку. Тут простор для фантазии безграничен. Единственное, что правильно написано в статье - нужно установить Border Style вашей формы в bsNone, и Position в poScreenCenter. Visible в False устанавливать НЕ НАДО ! Еще необходимо убрать заставку из списка авто-создаваемых (Auto-Create) форм, переместив ее в список доступных (Available) форм. Это можно сделать через диалог Project->Options на закладке Forms.2) Допустим, мы создали форму-заставку согласно пункту 1, и назвали ее frmSplash. Наша задача теперь - запустить заставку в начале загрузки, и убрать ее в конце загрузки, до запуска самого кода приложения. Для этого открываем файл проекта нашего приложения (через меню Priject->ViewSource). В секцию Uses добавляем модули Windows и SysUtils. В конце файла-проекта видим примерно такие строчки :begin Application.Initialize; Application.CreateForm(TMainForm, MainForm); Application.Run; end.Application.Initialize выполняет инициализацию объекта-приложения. Application.CreateForm создает главную форму и выполняет ее событие OnCreate, в котором обычно производятся всякие предустановки, загрузка данных и т.д. Application.Run начинает выполнять код приложения... Мы создаем заставку после инициализации объекта Application, и убираем ее перед запуском основного кода :begin Application.Initialize;frmSplash := TfrmSplash.Create(Application); frmSplash.Show; frmSplash.Update;Application.CreateForm(TMainForm, MainForm);Sleep(500) ; frmSplash.Hide ; FreeAndNil(frmSplash) ;Application.Run; end.3). Если на форме-заставке положить объект TLabel, то его свойство Caption можно изменять из обработчика OnCreate главной формы примерно так :frmSplash.Label1.Caption := 'Читаю конфигурацию...' ; frmSplash.Update ;Пример формы, создающей заставку, можно найти в стандартных примерах к Delphi 7, в папке Demos\Db\MastApp (файлы mastapp.dpr и Splash.pas). Там код, убирающий заставку, несколько упрощен по сравнению с моим, но основная идея та же... Если уж автор статьи не потрудился изучить стандартные примеры Delphi, то Бог ему судья...P.S. Даже последнее предложение этой статьи - чушь... Delphi давно уже не создает приложения объемом меньше 300 килобайт... какие там 100-150 ??? Впрочем, для маленьких приложений, у которых процесс загрузки занимает менее секунды, заставки действитейльно излишни ********************************* И все в этом духе но что то это не прокатывает...
9 ответов

Очень много словесной шелухи. В чем вопрос? Какие ваши требования к заставке? Можете в двух словах описать? Только без цитирования статей...


В двух словах нужна заставка которая отображает что приложение готовиться к запуску, а не заставка которая появляеться и исчезает мгновенно... а да того как она появиться не будет торчать курсор мыши с песочными часами...


И этот вариант рассматривался на форуме. В форме с заставкой - таймер, по которому происходит запуск главного окна и уничтожение формы-заставки.


Тема эта уже обсуждалась на форуме, вот здесь: http://programmersforum.ru/showthrea...F2%E0%E2%EA%F3


Я видил все сообщения на эту тему но там происходит все не честно там заводиться таймер на 5 секеунд.... а если мое приложение грузиться скажем 3 секунды или 7 секунд тогда что?


Тогда смотри эту тему, начиная с седьмого поста: ProgressBar в заставке приложения


Еще лутше давайте разберем код: procedure TForm1.FormCreate(Sender: TObject); begin label1.Caption:='Загрузка в memo1'; memo1.Lines.LoadFromFile('c:\1.txt' ); progressbar1.Position:=progressbar1 .Position+10;label1.Caption:='Загрузка в memo2'; memo1.Lines.LoadFromFile('c:\2.txt' ); progressbar1.Position:=progressbar1 .Position+10;label1.Caption:='Загрузка в listbox1'; listbox1.Items.LoadFromFile('c:\3.t xt'); progressbar1.Position:=progressbar1 .Position+10;label1.Caption:='Загрузка завершена'; end;Все прексрасно работает но он показывает загрузку тех компонент которые находяться формы заставки а как показать загрузку других компонент с других форм в этом createform написать так form2.memo1.Lines.LoadFromFile('c:\ 2.txt');И получим ERROR каккую именно не помню вчера делалp.s А на заставку word или delphi тоже таймер воткнули на 5 секунд? И вообще машины у все разные и загрузка по разному протикаетКто нибудь может превести действительно реально работающию заставку а не импровизацию на нее?


Доброе время суток!!! Както 3 месяца назат я мучился с заставкай!!! Ну и вот что вышло!!! Просто в самый конец своего кода скопируй и всё в принципе!
var
 SplashImage: TImage;
 SplashForm: TForm;
 I : Integer;
begin
 SplashForm := TForm.create(nil);
 with SplashForm do
 begin
 BorderStyle := bsNone;
 Position := poScreenCenter;
 // размеры показываемого изображения
 ClientWidth := 405;
 ClientHeight := 310;
 end;
 SplashImage := TImage.Create(SplashForm);
 with SplashImage do
 begin
SplashImage.Picture.LoadFromFile('splash.bmp');
 Stretch := true;
 Align := alClient;
 Parent := SplashForm;
 end;
 with SplashForm do
 begin
 Show;
 for I := 1 to 1 do
 begin
 Repaint;
 // паказ изоброжения в секундах (1000 – одна секунда, 2000 – две секунды и т.д.)
 Sleep(5000);
 end;
 Close;
 Free;
 end;


Скажите а для чего Sleep(5000) просто застовляем окно отображаться 5 секунд... ? А мне хотелось бы не импровизация заставки а реальная заставка которая отображаеться пока приложение готовиться к запуску.... или я ошибаюсь и этот пример подходит?