Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.18;
Скачать: CL | DM;

Вниз

Можно ли при помощи TApplication организовать главный цикл   Найти похожие ветки 

 
NeyroSpace ©   (2004-07-02 11:51) [0]

выборки сообщений? Извращение, но все же... Вот код:
program Project1;
{$R *.DFM}
uses
 windows,
 messages,
 Forms;

type
 TApplication1 = class(TApplication)
 private
   procedure OnApplicationMessage(var Msg: TMsg; var Handled: Boolean);
   procedure OnFormClose(Sender: TObject; var Action: TCloseAction);
   { Private declarations }
 public
   { Public declarations }
 end;

var
 n : integer;
 Application1: TApplication1;
 Form1 :TForm;

procedure TApplication1.OnFormClose(Sender: TObject; var Action: TCloseAction);
begin
SendMessage(Application1.Handle, wm_close, 0 ,0);
end;

procedure TApplication1.OnApplicationMessage(var Msg: TMsg; var Handled: Boolean);
begin
if Msg.message = wm_close then
 begin
 n := 1;
//  Application1.Terminate;//????
 end;
end;

begin
 Application1 := TApplication1.Create(nil);
 Application1.Initialize;
 Application1.OnMessage := Application1.OnApplicationMessage;
 Application1.Run;
 Form1 := TForm.Create(Application1);
 Form1.Visible := true;
 Form1.OnClose := Application1.OnFormClose;

n := 0;
while n = 0 do
 begin
 Application1.ProcessMessages;
 sleep(10);
 end;

Application1.Terminate;//или не надо?
end.

Форму я создал просто так, чтобы было откуда WM_CLOSE послать.
Возникли следующие вопросы:
1.Можно ли вообще так делать?
2.Почему WM_CLOSE не обрабатывается?
3.Если не создать наследника TApplication1 = class(TApplication), то соответственно не переопределить событие
Application1.OnMessage := Application1.OnApplicationMessage;
врезультате приходиться подключать модуль Forms, можно ли как-нибудь это обойти и воспользоваться создаваемым средой Application?
4.Хотелось бы услышать ваши комментарии.


 
Тимохов ©   (2004-07-02 12:02) [1]

у меня не комментарий, а вопрос

какая стоит цель?


 
NeyroSpace ©   (2004-07-02 12:06) [2]

Это проще чем на ВинАпи. Если не подключать Forms, то размер получается 16Кб.


 
Romkin ©   (2004-07-02 12:06) [3]

Простите, а вы код TApplication.Run посмотрели? Внимательно?

repeat
 HandleMessage
until Terminated;


 
Семен Сорокин ©   (2004-07-02 12:08) [4]


> NeyroSpace ©   (02.07.04 12:06) [2]
> Это проще чем на ВинАпи. Если не подключать Forms, то размер
> получается 16Кб.

Извините а как вы собираетесь не подключать Forms, если TApplication там объявлен?


 
Digitman ©   (2004-07-02 12:08) [5]


> Если не подключать Forms, то размер получается 16Кб


не подключай, никто не заставляет
но тогда и про TApplication забудь


 
NeyroSpace ©   (2004-07-02 12:09) [6]

Если не сделать цикла, то Application само завершается, доходя до end.


 
Тимохов ©   (2004-07-02 12:09) [7]

Ты бы сам свой код попытался запустить - много вопрособ вы снялось.


 
NeyroSpace ©   (2004-07-02 12:15) [8]

>не подключай, никто не заставляет
>но тогда и про TApplication забудь
А что генерирует среда в таком случае?
Как получить указатель процедуру выборки сообщений?
И как ее переопределить?

Вопрос конечно чисто теоретический, для повышения уровня образованности :-).


 
NeyroSpace ©   (2004-07-02 12:17) [9]

Имеем:

program Project1;
begin
end.

Запускаем, получаем ехе. Вопрос что создается (из объектов)? Можно ли к этому получить доступ?


 
Romkin ©   (2004-07-02 12:27) [10]

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

repeat
 if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then
 begin
   if Msg.Message <> WM_QUIT then
   begin
       TranslateMessage(Msg);
       DispatchMessage(Msg);
   end
   else
     Terminated := True;
until Terminated;

А процедура обработки сообщений у твоего окна должна быть


 
Digitman ©   (2004-07-02 12:28) [11]


> NeyroSpace ©   (02.07.04 12:17) [9]



> Вопрос что создается (из объектов)?


в этом случае никакие объекты не создаются


> что генерирует среда в таком случае?


среда генерирует вполне работоспособный exe-файл, который ничего полезного не делает

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


> Как получить указатель процедуру выборки сообщений?


а кто ее создал, процедуру-то ? проект-то - пустой ! dummy он)


> как ее переопределить?


прежде чем что-то переопределять, нужно чтобы это "что-то" существовало в коде


 
Тимохов ©   (2004-07-02 12:36) [12]

Про очереди сообщений
Рихтер, издание 4, глава 26. Посмотри в сети - она есть.
многое полезное узнаешь.



Страницы: 1 вся ветка

Текущий архив: 2004.07.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.038 c
3-1087823153
Митяй
2004-06-21 17:05
2004.07.18
ADO "Чудеса в решете"


3-1087997171
Lacky
2004-06-23 17:26
2004.07.18
Добавление поля с Примари кей


14-1088508869
Rem
2004-06-29 15:34
2004.07.18
Культура Пития


1-1089179521
Beton
2004-07-07 09:52
2004.07.18
Повторный запуск приложения


14-1088407605
SammIk
2004-06-28 11:26
2004.07.18
Что-то странное стряслось!?