Консультация № 188615
08.01.2016, 11:37
0.00 руб.
0 7 1
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:
как можно сделать чтобы при запуске программы делфи самая первая форма появилась с анимацией и после 10 секунд стала не видимой или совсем закрылась. Но если закроется то все формы сразу закроются как можно сделать другую форму главной
Заранее спасибочки

Обсуждение

давно
Посетитель
399390
30
08.01.2016, 11:40
общий
давно
Профессионал
153662
1070
08.01.2016, 13:53
общий
08.01.2016, 13:59
Адресаты:
Здравствуйте. Вот код из моей программы, где заставка открывается с анимацией и потом закрывается, на форме есть таймер на 5 сек (5000).
Код:
procedure Tzast.FormShow(Sender: TObject);
begin
AnimateWindow(Handle,1000,AW_BLEND); // Анимация окна в виде плавного проявления
end;

procedure Tzast.Timer1Timer(Sender: TObject);
begin
Close;
end;

procedure Tzast.FormHide(Sender: TObject);
begin
AnimateWindow(Handle,500,AW_BLEND or AW_HIDE); // Анимация окна в виде плавного ухода
end;

procedure Tzast.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:= caFree;
end;

procedure Tzast.FormCreate(Sender: TObject);
var FormRgn: hRgn;
begin
FormRgn := CreateRoundRectRgn(5, 5, 492, 433, 200, 200); // Создали полигон в виде квадрата с закруглёнными углами
SetWindowRgn(zast.Handle, FormRgn, TRUE); // Установили форму окну по полигону
end;
В свойствах проекта главной формой назначена другая форма не эта, то есть просто форма заставки добавлена позже. В свойствах visible обоих форм ставим false. Этот код в главной форме.
Код:
procedure Tzurnals.FormShow(Sender: TObject);
begin
zast.Left:= screen.Width div 2 - 250;
zast.Top:= screen.Height div 2 - 220;
zast.ShowModal;
end;


Функция AnimateWindow дает Вам возможность производить специальные эффекты при показе или сокрытии окон. Имеются четыре типа мультипликации: ролик, слайд, свертывание или развертывание и плавное альфа-перетекание.

Синтаксис

function AnimateWindow(hwnd: HWND, dwTime: DWord, dwFlags: DWord);

Параметры

hwnd - Дескриптор окна, которое анимируется. Вызывающий поток должен владеть этим окном.
dwTime - Устанавливает, сколько необходимо времени, чтобы воспроизвести мультипликацию, в миллисекундах. Как правило, воспроизведение мультипликации занимает 200 миллисекунд.
dwFlags - Определяет тип мультипликации. Этот параметр может быть одно или несколько нижеследующих значений. Обратите внимание! что, по умолчанию, эти флажки дают желаемый результат при показе окна. Чтобы получать желаемый результат при сокрытии окна, используйте флажок AW_HIDE и логический оператор OR с соответствующими флажками.
AW_SLIDE Использует слайдовую анимацию. По умолчанию используется анимационный ролик (прокрутка мультипликации). Этот флажок игнорируется тогда, когда пользуется с флажком AW_CENTER.
AW_ACTIVATE Активизирует окно (при показе окна). Не используйте это значение совместно с AW_HIDE.
AW_BLEND Использует эффект постепенного изменения прозрачности окна. Этот флажок может быть использован только в том случае, если параметр hwnd - окно верхнего уровня.
AW_HIDE Скрывает окно. По умолчанию, окно показывается на экран.
AW_CENTER Делает вид окна сжатым в точку, если используется флажок AW_HIDE или раскрытым из точки до полного размера, если флажок AW_HIDE не используется. Различные предписывающие флаги не имеют никакого действия.
AW_HOR_POSITIVE Анимирует окно слева направо. Этот флажок может быть использован с роликом или слайдом мультипликации. Он игнорируется, когда используется с флажком AW_CENTER или AW_BLEND.
AW_HOR_NEGATIVE Анимирует окно справа налево. Этот флажок может быть использован с роликом или слайдом мультипликации. Он игнорируется, когда используется с флажком AW_CENTER или AW_BLEND.
AW_VER_POSITIVE Анимирует окно сверху вниз. Этот флажок может быть использованы с роликом или слайдом мультипликации. Он игнорируется, когда используется с флажком AW_CENTER или AW_BLEND.
AW_VER_NEGATIVE Анимирует окно снизу вверх. Этот флажок может быть использован с роликом или слайдом мультипликации. Он игнорируется, когда используется с флажком AW_CENTER или AW_BLEND.
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

давно
Профессионал
153662
1070
08.01.2016, 13:56
общий
Ну и закрываем главную форму то же с анимацией.
Код:
procedure Tzurnals.FormClose(Sender: TObject; var Action: TCloseAction);
begin
AnimateWindow(Handle,1000,AW_BLEND or AW_HIDE); // Анимация окна в виде плавного ухода
Action:=caFree; // Действие освобождения ресурсов программы
end;
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

давно
Посетитель
399390
30
08.01.2016, 18:33
общий
спасибо
давно
Мастер-Эксперт
425
4118
09.01.2016, 06:03
общий
Адресаты:
В дополнение.
- Форму закрывать необязательно. Я крайне сомневаюсь, что Ваша программа занимает абсолютно все ресурсы компьютера, чтобы нужно было немедленно их освобождать путём закрытия или удаления. Так что можно безбоязненно держать ненужные в данный момент формы просто невидимыми.
- Показываться первой может и не главная форма, а именно та, которую Вы назначите заставкой для своей программы. Её Вы можете безболезненно закрывать. А главную форму при запуске программы можно делать невидимой и показывать только после закрытия заставки. Это будет намного полезнее, т.к. закрытие главной формы завершает и всю программу, что избавляет программиста от написания дополнительного кода для завершения программы.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Профессионал
153662
1070
09.01.2016, 10:12
общий
это ответ
Здравствуйте, arujan.nurlankul23!
Для анимации формы при открытии и закрытии можно использовать функцию AnimateWindow.
Функция AnimateWindow дает Вам возможность производить специальные эффекты при показе или сокрытии окон. Имеются четыре типа мультипликации: ролик, слайд, свертывание или развертывание и плавное альфа-перетекание.
Синтаксис
Код:
function AnimateWindow(hwnd: HWND, dwTime: DWord, dwFlags: DWord);

Параметры
hwnd - Дескриптор окна, которое анимируется. Вызывающий поток должен владеть этим окном.
dwTime - Устанавливает, сколько необходимо времени, чтобы воспроизвести мультипликацию, в миллисекундах. Как правило, воспроизведение мультипликации занимает 200 миллисекунд.
dwFlags - Определяет тип мультипликации. Этот параметр может быть одно или несколько нижеследующих значений. Обратите внимание! что, по умолчанию, эти флажки дают желаемый результат при показе окна. Чтобы получать желаемый результат при сокрытии окна, используйте флажок AW_HIDE и логический оператор OR с соответствующими флажками.
AW_SLIDE Использует слайдовую анимацию. По умолчанию используется анимационный ролик (прокрутка мультипликации). Этот флажок игнорируется тогда, когда пользуется с флажком AW_CENTER.
AW_ACTIVATE Активизирует окно (при показе окна). Не используйте это значение совместно с AW_HIDE.
AW_BLEND Использует эффект постепенного изменения прозрачности окна. Этот флажок может быть использован только в том случае, если параметр hwnd - окно верхнего уровня.
AW_HIDE Скрывает окно. По умолчанию, окно показывается на экран.
AW_CENTER Делает вид окна сжатым в точку, если используется флажок AW_HIDE или раскрытым из точки до полного размера, если флажок AW_HIDE не используется. Различные предписывающие флаги не имеют никакого действия.
AW_HOR_POSITIVE Анимирует окно слева направо. Этот флажок может быть использован с роликом или слайдом мультипликации. Он игнорируется, когда используется с флажком AW_CENTER или AW_BLEND.
AW_HOR_NEGATIVE Анимирует окно справа налево. Этот флажок может быть использован с роликом или слайдом мультипликации. Он игнорируется, когда используется с флажком AW_CENTER или AW_BLEND.
AW_VER_POSITIVE Анимирует окно сверху вниз. Этот флажок может быть использованы с роликом или слайдом мультипликации. Он игнорируется, когда используется с флажком AW_CENTER или AW_BLEND.
AW_VER_NEGATIVE Анимирует окно снизу вверх. Этот флажок может быть использован с роликом или слайдом мультипликации. Он игнорируется, когда используется с флажком AW_CENTER или AW_BLEND.

Вот пример использования, где заставка открывается с анимацией и потом закрывается, на форме есть таймер на 5 сек (5000).
Код:
    procedure Tzast.FormShow(Sender: TObject);
begin
AnimateWindow(Handle,1000,AW_BLEND); // Анимация окна в виде плавного проявления
end;
procedure Tzast.Timer1Timer(Sender: TObject);
begin
Close;
end;
procedure Tzast.FormHide(Sender: TObject);
begin
AnimateWindow(Handle,500,AW_BLEND or AW_HIDE); // Анимация окна в виде плавного ухода
end;
procedure Tzast.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:= caFree;
end;
procedure Tzast.FormCreate(Sender: TObject);
var FormRgn: hRgn;
begin
FormRgn := CreateRoundRectRgn(5, 5, 492, 433, 200, 200); // Создали полигон в виде квадрата с закруглёнными углами
SetWindowRgn(zast.Handle, FormRgn, TRUE); // Установили форму окну по полигону
end;
В свойствах проекта главной формой назначена другая форма не эта, то есть просто форма заставки добавлена позже. В свойствах visible обоих форм ставим false. Этот код в главной форме.
Код:
    procedure Tzurnals.FormShow(Sender: TObject);
begin
zast.Left:= screen.Width div 2 - 250;
zast.Top:= screen.Height div 2 - 220;
zast.ShowModal;
end;
5
Спасибо!
Об авторе:
Мои программы со статусом freeware для Windows на моём сайте jonix.ucoz.ru

давно
Посетитель
399390
30
09.01.2016, 10:27
общий
спасибо
Форма ответа