Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];

Вниз

Можно ли при помощи 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.036 c
14-1088372089
SergP
2004-06-28 01:34
2004.07.18
dcu --> pas???


1-1088473840
GrayFace
2004-06-29 05:50
2004.07.18
Как поучить указатель на функцию объекта?


11-1077122347
DDA
2004-02-18 19:39
2004.07.18
Delete folder?


14-1088140285
nemo
2004-06-25 09:11
2004.07.18
Как правильно попросить у родителей девушки руку их дочери?


3-1087544281
axx
2004-06-18 11:38
2004.07.18
Помогите с Exception





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский