Форум: "Основная";
Текущий архив: 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