Delphi как сделать всплывающее окно

Обновлено: 20.05.2024

Delphi как сделать всплывающее окно

Это сделано для того, чтобы заставка была видна в период указанного времени – 5000 миллисекунд, т.е. 5 секунд.

Перейти в файл проекта, нажав Ctrl+F12 и выбрав Project1. Исходный код должен выглядеть так:

Теперь мы внесём сюда немного изменений и код должен стать таким:

Форумчанин Ага, спасибо, все получилось!)) Капсула от спама Форумчанин Незачто, ведь нато он и форум Форумчанин

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

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;

type
TForm1 = class(TForm)
RichEdit1: TRichEdit;
GroupBox1: TGroupBox;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Button7: TButton;
Button8: TButton;
Button9: TButton;
Button10: TButton;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
PrintDialog1: TPrintDialog;
PrinterSetupDialog1: TPrinterSetupDialog;
procedure Button1Click(Sender: TObject);
procedure Button10Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure Button9Click(Sender: TObject);
private
< Private declarations >
public
< Public declarations >
end;

var
Form1: TForm1;

uses Unit2, Unit3;

procedure TForm1.Button10Click(Sender: TObject);
begin
Close
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if SaveDialog1.Execute then RichEdit1.Lines.SaveToFile(SaveDial og1.FileName);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
if OpenDialog1.Execute then RichEdit1.Lines.LoadFromFile(openDi alog1.FileName);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
if PrintDialog1.Execute then RichEdit1.Print('Документ 1');
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
RichEdit1.SelectAll
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
RichEdit1.ClearSelection
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
RichEdit1.Lines.SaveToFile('Быстрый документ.txt')
end;

procedure TForm1.Button8Click(Sender: TObject);
begin
RichEdit1.Lines.LoadFromFile('Быстр ый документ.txt');
end;

procedure TForm1.Button9Click(Sender: TObject);
begin
Form2.Showmodal
end;

Диалоговые окна в Дельфи (процедуры и функции, реализующие диалоговые окна)

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

Процедура ShowMessage

Функция MessageDlg

  • mtWarning (окно содержит черный восклицательный знак в желтом треугольнике и заголовок Warning);
  • mtError (окно содержит белый косой крест в красном круге и заголовок Error);
  • mtInformation (окно содержит синюю букву «i» в белом круге и заголовок Information);
  • mtConfirmation (окно содержит синий знак «?» в белом круге и заголовок Confirmation);
  • mtCustom (окно не содержит картинки, в заголовке выводится название исполняемого файла приложения).

Параметр AButtons задает набор кнопок окна и может принимать любые комбинации следующих значений:

Для значения параметра AButtons имеются две константы — mbYesNoCancel и mbOKCancel, задающие предопределенные наборы кнопок:

  • mbYesNoCancel = [mbYes, mbNo, mbCancel];
  • mbOKCancel = [mbOK, mbCancel]

При нажатии любой из указанных кнопок (кроме кнопки Help) диалоговое окно закрывается, а результат (свойство ModalResult) возвращается функцией MessageDlg.

Параметр HelpCtx определяет контекст (тему) справки, которая появляется во время отображения диалогового окна при нажатии пользователем клавиши <F1>. Обычно! значение этого параметра равно нулю.

Пример использования функции MessageDlg:

При нажатии кнопки Button1 производится простейшая проверка даты. Код даты вводится в поле редактирования DateEdit1, размещенное в форме. Если длина даты меньше допустимой, выдается предупреждение с запросом на автоматическую коррекцию (см. скриншот). При утвердительном ответе пользователя в поле даты записывается текущая дата, при отрицательном — фокус передается полю ввода даты.

Функция MessageDlgPos

Функция MessageDlgPos(const Msg: String; AType: TMsgDlgType; AButtons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer) : Word отличается от функции MessageDlg наличием параметров Х и Y, управляющих положением окна на экране.

Функция InputBox

Функция InputBox(const ACaption, APrompt, ADefault: String): String отображает диалоговое окно для ввода строки текста. Окно выводится в центре экрана и содержит поле ввода с надписью, а также кнопки ОК и Cancel.

Параметр ACaption задает заголовок окна, а параметр APrompt содержит поясняющий текст к полю ввода. Параметр ADefault определяет строку, возвращаемую функцией при отказе пользователя от ввода информации (нажатие кнопки Cancel или клавиши <Esc>).

Пример использования функции InputBox:

Приведенная процедура отображает окно запроса на ввод фамилии пользователя (см. скриншот).

По умолчанию предлагается Иванов.

Функция InputQuery

Функция InputQuery (const ACaption, APrompt: String; var Value: String): Boolean отличается от функции InputBox тем, что вместо третьего параметра— строки по умолчанию— используется параметр Value, который в случае подтверждения ввода содержит введенную пользователем строку.

В качестве результата функция возвращает логическое значение, позволяющее определить, каким образом завершен диалог. Если нажата кнопка ОК, то функция возвращает значение True, если нажата кнопка Cancel или клавиша <Esc> — значение False.

В вышеуказанной процедуре с помощью функции InputQuery выводится окно запроса, аналогичное приведенному ранее. Возвращаемый функцией InputQuery результат не анализируется.

Кроме рассмотренных диалоговых окон, в Delphi имеется ряд других специализированных диалоговых окон, например диалоговое окно выбора каталога, вызываемое функцией Select Directory модуля FileCtrl.

Модальные формы в Delphi

Модальной называется форма, которая должна быть закрыта перед обращением к любой другой форме данного приложения. Если пользователь пытается перейти в другую форму, не закрыв текущую модальную форму, Windows блокирует эту попытку и выдает предупреждающий сигнал. Запрет перехода в другую форму при незакрытой модальной форме относится только к текущему приложению, так что пользователь может активизировать любое другое приложение Windows.

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

Модальные формы часто называют диалоговыми формами (окнами), или диалоговыми панелями, хотя существуют и немодальные диалоговые окна. Для выполнения различных операций в Windows часто используются стандартные диалоговые формы, с которыми пользователь имеет дело при работе с приложениями. Такие формы называются общими, или стандартными диалоговыми окнами, для работы с ними Delphi предлагает специальные компоненты. Мы рассмотрим их в другой статье.

Типичным примером модальной диалоговой формы системы Delphi является диалоговое окно About Delphi (см. скриншот).

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

Метод ShowModal

Для отображения формы в модальном режиме служит метод ShowModal.

Выполнение вышеуказанной процедуры (путем выбора пункта меню mnuAbout), приводит к отображению формы fmAbout в модальном режиме. Пункт меню может иметь заголовок (например, О программе), задаваемый в свойстве Caption. Пользователь может продолжить работу с приложением, только закрыв эту модальную форму.

Многие формы можно отображать и в немодальном режиме, например, так:

Напомним, что метод Show является процедурой, т. е. не возвращает результат.

При закрытии модальной формы функция ShowModal возвращает значение свойства ModalResult типа TModalResult. Возможные значения этого свойства рассмотрим в следующих статьях.

Вообще говоря, код результата при закрытии возвращает любая форма. В данном случае его можно использовать для организации ветвления: возвращаемый после закрытия диалогового окна код результата анализируется и в зависимости от значения выполняются те или иные действия.

В качестве примера рассмотрим, как происходит управление диалоговой формой в реальном приложении.

Как правило, управление кодом результата диалога выполняется не программно (через свойство ModalResult формы), а с помощью кнопок. Чаще всего диалоговая форма содержит кнопки подтверждения и отмены выполненных операций. Кнопка подтверждения диалога в зависимости от назначения может называться по-разному, например: ОК, Ввод, Открыть, Yes. Кнопка отмены диалога часто называется Отмена или Cancel.

Как отмечалось, закрыть форму можно, используя свойство ModalResult кнопки. Если свойство имеет значение, отличное от mrNone, то при нажатии кнопки форма автоматически закрывается. При закрытии в качестве результата форма возвращает значение, определяемое свойством ModalResult кнопки, закрывшей эту форму.

Рассмотрим в качестве примера следующую процедуру:

В вышеуказанной процедуре устанавливаются значения свойств кнопки btnOK подтверждения и кнопки btnCancel отмены диалога fmDialog. При нажатии любой из них форма автоматически закрывается (без выполнения обработчиков события нажатия кнопок) и возвращает соответствующий результат.

Напомним, что обычно свойства кнопок и самой модальной формы задаются в окне Инспектора объектов при проектировании приложения. В приведенном примере для наглядности некоторые свойства устанавливаются в обработчике события onCreate формы.

При закрытии формы методом Close всегда возвращается значение mrCancel ее свойства ModalResult. Скрытие формы методом Hide не изменяет значение свойства ModalResult.

В принципе разработчик может самостоятельно создать любую модальную форму, однако стоит сказать, что для выполнения типовых действий Delphi предлагает ряд предопределенных диалоговых окон. Наиболее простые диалоговые окна реализуются с помощью специальных процедур и функций, в более общих случаях удобно использовать специальные компоненты — стандартные диалоговые окна. Кроме того, ряд диалоговых форм расположен на странице Dialogs в Хранилище объектов.

Как создать всплывающее окно?

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Изображения 94731 / 64177 / 26122 Ответы с готовыми решениями:

Как сделать всплывающее окно?
подскажите как сделать всплывающее окно: допустим нажимаем на Тему 1(lable1) и появляется окно типа.

Ehlib, как скрыть всплывающее окно?
день добрый! подскажите как скрыть (навсегда) всплывающее окно.

Delphi 7: Как настроить всплывающее окно
Как настроить вот такое всплывающее окно?

Как сделать всплывающее окно на рабочий стол?
Я создал программу для курсовой работы ! Курсавая на тему Крылатые фразы , так вот я хочу чтобы на.

2474 / 1850 / 242 Записей в блоге: 2

Вызвать другую форму методом Show или ShowModal.

Добавлено через 1 минуту
Похоже ответ не годится, так как ТС уже и картинку успел поменять.

3476 / 2600 / 740 Любой визуальный компонент. Мне нужно в нем еще кнопку и окно ввода добавить. Я не понимаю как это сделать 498 / 251 / 56 Всегда онлайн 1077 / 781 / 295

SviatoIa, что-то наподобие выпадающего списка с другими компонентами? В стандартном наборе такого нет, можете по нажатию кнопки показывать\скрывать панель. Где-то в инете может и есть такой компонент.

Добавлено через 2 минуты
В AlphaControls есть FrameBar.

Супер-модератор 31148 / 20357 / 7928 Записей в блоге: 6 Где-то в инете , а на вкладке Additional, компонент называется TCategoryButtons, и делает абсолютно то, что нарисовано у ТС-а на картинке. Только для этого требуется Дельфи, начиная с 2009. Всегда онлайн 1077 / 781 / 295 UI, в моем случае у меня Delphi 7, и я не имел возможности знать что есть TCategoryButtons. 87844 / 49110 / 22898

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Всплывающее окно
Здрвствуйте. Подскажите, а как сделать такую всплывающую подсказку

Всплывающее окно
Здравствуйте, поставил себе цель создания &quot;баннера&quot; для рабочего стола.Вопрос вот в чом как.


Всплывающее окно
Привет всем Как можно реализовать такую задачу. Есть Form1 она себе работает в фоне, а я работаю.

Показать всплывающее окно
procedure TForm1.Button3Click(Sender: TObject); var arr : array of integer; i, k : Integer; //.

Всплывающее окно

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы ( 2 ) 94731 / 64177 / 26122 Ответы с готовыми решениями:

Всплывающее окно
Здрвствуйте. Подскажите, а как сделать такую всплывающую подсказку

Всплывающее окно
Здравствуйте, поставил себе цель создания &quot;баннера&quot; для рабочего стола.Вопрос вот в чом как.

Показать всплывающее окно
procedure TForm1.Button3Click(Sender: TObject); var arr : array of integer; i, k : Integer; //.

836 / 731 / 342 При срабатывание условия в Form1. Что ты много написал всего, по идее задача простая, оформи срабатывание условий от таймера или от горячих назначенных клавиш например, да и обрабытывай код о чем ты там писал. 5009 / 3907 / 1291 Записей в блоге: 18

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

что конкретно может "породить событие" в форме1?
нужны подробности.

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

Так и сделано.
В Form1 допустим сработал таймер.
Выполняется код Form2.Show;

В Form2 прописал при показе формы
Form2.FormStyle:=fsStayOnTop;
form2.FormStyle:=fsNormal;

При этом показывается и Form1, а мне надо чтоб она оставалась на панели задач
Если к добавить Form1.Hide; при показе Form2.
То к ней у меня не будет доступа.
Пока я с Form2 не покажу ее.

Добавлено через 12 минут

вот ни разу не понятно, что как работает
если одна форма что-то делает реально, то другие формы приложения в этот момент курят
если только действие не ведется в другом потоке, о чем мы тут не знаем
что конкретно может "породить событие" в форме1?
нужны подробности.

Работает только главная форма, остальная в покое.
Все сделано на процедурах без потоков.
При срабатывании таймера на Form1
Запускается Form2, в Edit мы ввели даные.
Закрыли Form2, передали даные Form1 процедуре MyProcedure
И вернули фокус в прежнее окно.

5009 / 3907 / 1291 Записей в блоге: 18 насколько я понимаю, проблема в невозврате фокуса?
тут возможно нужно глобально записывать в событии Form2.OnDeactivate, где был фокус
а в конце обработчика таймера использовать эту информацию и передавать туда фокус насколько я понимаю, проблема в невозврате фокуса?
тут возможно нужно глобально записывать в событии Form2.OnDeactivate, где был фокус
а в конце обработчика таймера использовать эту информацию и передавать туда фокус До этого я еще не дошел так как не могу сделать две независимых формы.
В моем случае при использовании метода Form.Show у меня
Два окна но одна иконка на панели задач, а мне надо две иконки
Два независимых окна
Вот пример на скрине 5009 / 3907 / 1291 Записей в блоге: 18 procedure TMyForm.CreateParams(var Params: TCreateParams) ; begin inherited; Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW; Params.WndParent := 0; end;

А какие параметры надо передавать процедуре CreateParams

Добавлено через 2 часа 11 минут
Так с этим разобрался
Вот только так как в вашем примере у меня не работает
Пришлось в основной класс формы записать

Вот теперь проблема в фокусе
Как реализовать следующее
Нажал я кнопку в Form1 запустился таймер
Пошел в другое окно
Сработал таймер, всплыла Form2 поверх остальных окон
Ввел данные в едит
Form2 закрылась, меня вернуло в прошлую прогу.
При этом форма один не всплывала

В событие Form2 FormShow ввожу

Form2 всплывает но фокус не на ней, и Form1 тоже всплывает 5009 / 3907 / 1291 Записей в блоге: 18

Решение

все перемешалось
давайте сначала
обе формы form1 form2 получают перегруженный метод CreateParams
из автосоздания убираем все формы кроме form1
на form1 кнопка и таймер на 5000
вот код form1
Кликните здесь для просмотра всего текста

запускаем
при нажатии кнопки form1 исчезла, Form2 появилась, вводим что хотим
через 5 секунд появляется form3 модально
работаем с ней, закрываем
фокус как был в Form2 так и остался. никакого шаманства
но пользователи проклянут вас в веках, если вдруг с перепугу будет всплывать модальная форма

Добавлено через 2 минуты
в form2 неплохо бы добавить

давайте сначала

Давайте все сначала
Вот логика программы
Запустил я программу.
В поле Edit ввел время для Timer1
Нажал на кнопку, запустился таймер.
Все таймер себе идет, программа сидит на панели задач.
Я пошел к примеру в текстовый редактор
Печатаю я себе, и вот таймер сработал.
Что должно произойти.
Form1 как лежала на панели так и лежит, и иконка не исчезает
Form2 выскакивает, фокус с текстового редактора идет на Edit Form2
Я ввел значение в Edit для Timer2 Form1, Form2 закрылась
Фокус передался в текстовый редактор, и я себе продолжаю печатать на том месте где и печатал
А Form1 лежит на панели задач и ждет пока Timer2 не сработает
Он сработал, в его событии он нажал кнопку один и пошло все по кругу.
Спасибо вам за то что вы еще пытаетесь мне помоч

Кликните здесь для просмотра всего текста Кликните здесь для просмотра всего текста 5009 / 3907 / 1291 Записей в блоге: 18

я-то думал, вы работаете в форме этого же приложения
а у вас вообще блокнот.

Добавлено через 3 минуты
тогда я вообще не понимаю, в чем проблема
у меня все и так работает
вообще без дополнений
запустил форму 1 свернутую, перешел в блокнот
через 5 сек сработал таймер, вывел окно
я закрыл окно и продолжил работать в блокноте.

через 5 сек сработал таймер, вывел окно У меня оно всплывает но не поверх того окна окна в котором я работаю, мне надо на него переключится мышкой.
Можете ваш проект скинуть, может я где то что то пропустил у себя. 5009 / 3907 / 1291 Записей в блоге: 18 оно должно узнать где вы сейчас и перекрыть это окно . оно должно узнать где вы сейчас и перекрыть это окно . Да, оно должно всплывать поверх остальных окон.
Пробовал с помощью
Оно всплывает но на нем нету фокуca, заголовок окна не активный, риска в эдите мигает но когда начинаю вводить текс, то нечего не происходит. 5009 / 3907 / 1291 Записей в блоге: 18

тогда прочитайте текст от производителя ОС и расслабьтесь:

The system restricts which processes can set the foreground window. A process can set the foreground window only if one of the following conditions is true:

The process is the foreground process.
The process was started by the foreground process.
The process received the last input event.
There is no foreground process.
The foreground process is being debugged.
The foreground is not locked (see LockSetForegroundWindow).
The foreground lock time-out has expired (see SPI_GETFOREGROUNDLOCKTIMEOUT in SystemParametersInfo).
No menus are active.
An application cannot force a window to the foreground while the user is working with another window. Instead, Windows flashes the taskbar button of the window to notify the user.

Всплывающие окна

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

Ну и конечно надо настроить как-то более-менее красиво нашу форму, чтобы было похоже на красивое окно, можно конечно в дальнейшем свой дизайн придумать, нарисовать и украсить, но пока что сделаем ее чуть-чуть прозрачной и просто изменим стиль нашей формы, кроме этого, мы на нашем TLabel напишем что-нибудь, например, «Hello World» =).

Давайте поставим свойство формы AlphBlend в True, а AlphaValue в 180 установим. В свойстве Caption уберем надпись, а в свойстве BorderStyle установим в bsToolWindow, установим нужный размер нашей формы в нужный, а затем на событии OnShow необходимо нам написать первоначальное установление появление окна, по идее все всплывающие окна появляются рядом с треем. Но нам необходимо, чтобы наше окно первоначально появилось ниже панели задач, а из-за панели задач затем уже будет появляться наше окно — всплывать, итак на событии OnShow написан следующий код

Таким образом у нас окно появиться ниже панели задач и как раз в правой стороне экрана и таким образом будет появляться вверх. Теперь нам необходимо сделать якобы движение окна, то есть эффект его появления. Для этого в свойстве TTimer - Interval установим в 1 и на событие OnTimer напишем следующий код

Тут если окно полностью появилось, то мы останавливаем наш таймер. Можно добиться и другого эффекта, просто уберем TTimer и на OnShow формы напишем следующий код

Достаточно неплохо, так что можно делать и свои всплывающие окна, только их приукрасить

Возвращаясь к теме плавного закрытия окна (т.н. затухания) на примере варианта реализации всплывающих окон из прошлого примера, рассмотрим несколько способов реализовать эффект затухания. Итак суть проблемы такова, при появлении некоторого события в приложении, возникает всплывающее окно подсказка, реализованное в виде обычной формы TPopupForm = class (TForm). Возникающее событие может иметь несколько типов, например, ошибка или оповещение, и в зависимости от типа события, всплывающее окно может иметь собственные настройки отображения, к каковым относятся цвет, прозрачность, и время отображения. Для хранения настроек окон по типам события был предусмотрен класс TPopupConfig. При возникновении события создавалось окно, которое по истечении указанного в popupConfig времени закрывалось. Для более эффектного закрытия окна был реализован метод "затухания", вариации которого мы рассмотрим сейчас. При любой реализации метода затухания используется свойство AlphaBlendValue класса TForm. которое уменьшается до значения равного нулю, после чего форма закрывается. Вариант №1, изначально приведенный в прошлом примере, имел один существенный недостаток.

При срабатывании таймера закрытия (popupTimer) вызывался метод destroy формы, который в свою очередь вызывал событие onDestroy, в котором непосредственно реализовано затухание, приведенное выше. Поскольку форма всплывающего окна выполняется в главном потоке приложения, то использование функции sleep() приостанавливает также главный поток, что неприемлемо, поскольку также "замораживает" и главную форму приложения. рассмотрим вариант реализации №2. на форму всплывающего окна добавим таймер fadeTimer:TTimer, имеющий интервал 5ms, с изначальным значением enabled = false. При срабатывании таймера закрытия окна, таймер затухания приводится в активное состояние.

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

После чего окно будет закрыто. Для более интересной реализации самого окна можно придать ему форму с закругленными углами. для этого при создании всплывающего окна определим его форму:

Всплывающие окна (popups)

Да, приложение наше будет состоять из двух форм, одна главная TMainForm, и как говорилось форма всплывающего окна TPopupForm. Для хранения аватаров пользователей заведем на главной форме TImageList, в который добавим некоторый набор картинок. Список же пользователей будем хранить в экземпляре uList : TStringList (глобальная переменная), который непосредственно заполним при создании главной формы:

Для описания события определим структуру TPopupInfo, которая будет хранить следующую информацию: время возникновения, тип события (TEventType), некоторый идентификатор действия, текстовое описание события, имя пользователя, и иконка пользователя.

Далее нам предстоит еще один интересный шаг. Чтобы управлять всплывающими окнами (упорядочивать их) и предоставлять информацию о настройках окон (цвет, прозрачность, время отображения) опишем класс TPopupConfig:

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

Сама процедура реорганизации списка окон будет вычислять координаты, в которые следует передвинуть окно, начиная с правого нижнего угла экрана. Причем при регистрации нового окна, оно будет отображено, именно здесь, а не с помощью методов непосредственно самой формы popup окна.

Для управления нашими цветами окон и другими свойствами разместим на главной форме переключатель TypeCombo (TComboBox) для выбора настраиваемого окна, TButtonColor для выбора цвета окна, пару TEdit и TUpDown для настройки времени отображения и прозрачности. Используя данные элементы управления будем изменять соответствующие свойства в TPopupConfig.

Расширим процедуру создания главной формы, и помимо заполнения списка "контактов", создами наш класс настройки (глобальная переменная), а также заполним наш typeCombo и выполним сопутствующие действия

Вот в общем то и все, что касается главного модуля программы. Теперь перейдем непосредственно к самому всплывающему окну. Здесь нам предстоит переписать конструктор окна, в котором будет выполнены действия по настройке его вида, запустить таймер времени жизни окна, по срабатыванию которого окно будет закрыто, ну и собственно саму процедуру закрытия окна. Итак, конструктор мы перепишем, так чтобы в качестве параметра он принимал, как уже гооврилось выше, структуру описания нашего события.

Какие действия следует выполнить в конструкторе: 1. вызвать родительский конструктор. 2. настроить цвет, прозрачность и время жизни, получив их у popupConfig 3. заполнить данные в Label'ах и установить иконку 4. зарегистрировать наше окно в popupConfig 5. запустить таймер времени жизни 6. очистить память которую занимала полученная структура TPopupInfo

При срабатывании таймера следует закрыть окно

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

вот собственно и все. Кстати свойство visible формы установлено в false, а также в событие onClick можно также указать обработчик popupTimerTimer для закрытия окна по клику. Вот кажется и описал все что касатеся созданных всплывающих окон. На самом деле у данной реализации есть один недостаток, при подобной реализации затухания окна при закрытии, а именно использовании функции sleep, засыпает основной поток, т.е главная форма программы также перестает реагировать. Т.е необходимо чтобы вслывающие окна запускались в новом потоке. Напоследок, как обычно рисунок

Процедура ShowMessage Delphi:

Применение процедуры ShowMessage позволяет вывести на экран окно с необходимым текстом и кнопкой подтверждения OK. Процедура ShowMessage Delphi организована следующим образом:

Функция MessageDlg Delphi:

В качестве значения функции MessageDlg выступает число, проверка значения которого может показать, какая командная кнопка завершила диалог. Общий вид обращения к данной функции представлен ниже:

  • КонтекстСправки означает параметр, обозначающий раздел справочной системы, который впоследствии выведется на экран при нажатии пользователем на клавишу F1. В случае отсутствия справочной системы, параметр КонтекстСправки должен быть приравнен нулю.

Значение функции MessageDlg определяет, на какую из командных кнопок щелкнул пользователь при работе с программой (табл. ниже).

Читайте также: