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

Вниз

Application - Зачем? и как избавиться   Найти похожие ветки 

 
Dima_dvp   (2003-10-23 23:03) [0]

Зачем нужен Application в Delphi??

Я нашёл только один плюс за него и три минуса.

+
Помогает разделить в коде VCL главное окно и остальные.
Это нужно например для того, чтобы получать WM_IDLE, которое *насколько я знаю но могу ошибаться) приходит только главному окну программы.

-
1)Лишнее место в .exe и время исполнения
2)Не даёт программе использывать такую возможность Windows как плавное сворачивание (как я где-то читал главное окно просто вызывает ShowWindow(..., SW_HIDE) для остальных).
3)В программах, работающих с окнами чужих приложений отображается дважды(например программа, прячущая окна программ видит оба окна в общем случае)

В связхи с этим хочеться спросить как от него лучше избавиться?
(MS Visual C++ не предлагать:))


 
Rouse_   (2003-10-23 23:09) [1]

> (MS Visual C++ не предлагать:))
Пиши на АПИ, серьезно.
А вообще это будет долгий флейм, просто нет времени обьяснять все, поэтому держи выдержку из хелпа:

TApplication encapsulates a windowed application. The methods and properties introduced in TApplication reflect the fundamentals established in the Windows operating system to create, run, sustain, and destroy an application. TApplication thereby simplifies the interface between the developer and the Windows environment. For this purpose TApplication encapsulates behavior for

Windows message processing.
Context-sensitive online help.
Menu accelerator and key processing.
Exception handling.
Managing the fundamental parts defined by the Windows operating system for an application, such as MainWindow, WindowClass, and so on

Each GUI application automatically declares an Application variable as the instance of the application. If the Delphi application is not a Web server application, control panel applet, or NT service application, this variable is of type TApplication.

TApplication does not appear on the Component palette, nor is it available in the form designer to visually manipulate; so it has no published properties. Nevertheless, some of its public properties can be set or modified at design time in the Forms and Application pages of the Project|Options dialog box. In addition, you can add a TApplicationEvents component to any form in the project to intercept the application’s events, and supply event handlers using the IDE.

Note: For application-wide properties and methods that affect the display, see TScreen.


Желаю успехов


 
Dima_dvp   (2003-10-24 00:08) [2]

Нет всё таки объясните мне пожалуйста следующее:
Когда я создаю новое Application, затем удаляю из него модуль Unit1 и остаётся только DPR - Application всё равно остаётся даже если не вызывать Application.Initialize и Run. Из этого следует, что только Visual C++(ну и ASM) способен создать абсолютно оптимизированное приложение. Обидно.
А с англицким у меня не очень - я "Parlez-vous francais" так что мне это не много дало(хотя суть я естественно уловил).
Я понимаю, что это всё хорошо, что Application берёт на себя столько ф-ий, но если он не нужен? Если мне его ф-ии как корове седло. Если я решил сам ВСЁ сделать.
Ну ладно - я смирюсь.
Но тогда вопрос такой:
Как убрать окно Application при исполнении, т.е. чтобы в программах типа см.выше оно не было видно?

P.S. Это интересная особенность - приложений, сделанных из под IDE Borland - сразу видно, что это они даже без запкуска каких-либо утилит потому что такая программа(см. выше) у меня стоит всегда.


 
andre   (2003-10-24 00:23) [3]

Юзай WinApi.


 
Dima_dvp   (2003-10-24 00:28) [4]

Меня просто радует ответ: Юзай WinAPI.
Я вот и спрашиваю: как юзать WinAPI??????????????????? если в Delphi полюбому есть этот Application??? Перейти на VC++??? Или есть решение для Delphi???????


 
Rouse_   (2003-10-24 00:47) [5]

Ну вот к примеру код без Application:

program Demo_APIWindow;

uses
windows,
messages;

const
cPLAY = 40045;

var
wc : TWndClassEx;
Wnd : HWND;
Msg : TMsg;
idhot1: Integer;
Err: Boolean;
hwndWA: HWND;

function WindowProc(wnd : HWND; Msg : Integer; WParam : WParam; LParam : Longint): Longint; stdcall;

Begin
Result := 0;

case msg of

wm_destroy :
Begin
postquitmessage(0);
exit;
Result:=0;
End;

WM_QUIT :
Begin
postquitmessage(0);
exit;
Result:=0;
End;

WM_HOTKEY:
begin
if WParam = idhot1 then
begin
hwndWA := FindWindow("Winamp v1.x", nil);
If (hwndWA<>0) then
begin
SendMessage( hwndWA, WM_COMMAND, cPLAY, 0);
end;
end;
end;

else
Result := DefWindowProc(wnd, msg, wparam, lparam);
end;
End;

begin
wc.cbSize := sizeof(wc);
wc.style := cs_hredraw or cs_vredraw;
wc.lpfnWndProc := @WindowProc;
wc.cbClsExtra := 0;
wc.cbWndExtra := 0;
wc.hInstance := HInstance;
wc.hIcon := LoadIcon(0, IDI_APPLICATION); //
wc.hCursor := LoadCursor(0, idc_arrow);
wc.hbrBackground := COLOR_BTNFACE + 1;
wc.lpszMenuName := nil;
wc.lpszClassName := "Hot key example";

RegisterClassEx(wc);

Wnd := CreateWindow("Hot key example", "Hot key example for Shift", ws_overlapped or WS_SYSMENU, 100, 150, 360, 200, 0, 0, Hinstance, nil);

Err := False;
idhot1:=GlobalAddAtom("Hot key example Atom");
Err := RegisterHotKey(Wnd, idhot1, MOD_CONTROL, 96); // Горячая клавиша Ctrl+Nupad(0)
if not Err then Halt;

ShowWindow(Wnd, CmdShow); // - Окно видно
//ShowWindow(Wnd, SW_HIDE); // - Окна не видно

While GetMessage(Msg, 0, 0, 0) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end.


Писал как демку, тоже с нашего форума парень спрашивал. Код делает окно на АПИ и регистрирует глобальную горячую клавишу для использования ее для Winamp-a

Желаю успехов


 
Dima_dvp   (2003-10-24 00:49) [6]

Ща проверю


 
Rouse_   (2003-10-24 00:54) [7]

Ну и еще TApplication находится в Forms. (это к вопросу как отключить)

Желаю успехов


 
Dima_dvp   (2003-10-24 00:57) [8]

Странно!!!!!!!!!!!
У меня программа - такаяже на все 99%, но у меня объект Application доступен, а в твоей нет?????
Я уже начинаю сходить с ума. Это как??? То что ты написал - для меня не новость. У меня вопрос был как от Application избавиться, а у тебя его нет, а у меня есть - Я СХОЖУ С УМА


 
Rouse_   (2003-10-24 01:02) [9]

Внимательно перечитываем
> Rouse_ © (24.10.03 00:54) [7]

Желаю успехов и я спать, завтра на работе, если будут вопросы, доотвечаю


 
Dima_dvp   (2003-10-24 01:15) [10]

когда писал ответ этого сообщения ещё не было...


 
Dima_dvp   (2003-10-24 01:19) [11]

Виноват. Но Forms у меня не подключен. Просто глюконуло наверное меня(что скорее) или IDE. Вопрос исчерпан. Этот. А теперь другой: Куда приходят WM_IDLE????? на главную окно?? и как сделать программу без иконок в ресурсе. Кроме того что удалить после компиляции


 
Rouse_   (2003-10-24 09:15) [12]

Значит по порядку, модуль Forms вы могли подключить неявно через другой модуль, в котором есть ссылка на Forms. Например через StdCtrls.

WM_IDLE приходят главной оконной процедуре (или если хотите функции) приложения которая реализуется в TApplication или самостоятельно.

А иконки добавляются в виде ресурсов которые используют различные модули. Отключишь эти модули, уберешь и иконки.

Желаю успехов


 
REA   (2003-10-24 09:35) [13]

Может FreePascal? Зачем тебе этот Delphi? - у него классы большие, ресурсы.


 
ZEE   (2003-10-24 10:43) [14]

> Dima_dvp (23.10.03 23:03)
> Зачем нужен Application в Delphi??
непонятна такая нелюбовь к TApplication

> +
> Помогает разделить в коде VCL главное окно и остальные.
> Это нужно например для того, чтобы получать WM_IDLE, которое
> *насколько я знаю но могу ошибаться) приходит только главному
> окну программы.
ИМХО - это не так, можно из без TApplication обойтись
> -
> 1)Лишнее место в .exe и время исполнения
опять же - думаю не особенно много место ест сама TApplication - это все uses Forms виноват

> 2)Не даёт программе использывать такую возможность Windows
> как плавное сворачивание (как я где-то читал главное окно
> просто вызывает ShowWindow(..., SW_HIDE) для остальных).
тоже не факт - можно сворачивать и плавно

> 3)В программах, работающих с окнами чужих приложений отображается
> дважды(например программа, прячущая окна программ видит
> оба окна в общем случае)
это уже не проблема разработчика - а скорее тех хакеров которые хотят поиздеваться над чужими прогами :)

И еще - я даже когда пишу че-нить на Апи, создаю отдельное окно кот. играет роль тогоже TApplication - мне так удобней - например разделять титул приложения и заголовок главного окна, но правда не всегда я пользую там псевдо-аппликатион...

> В связхи с этим хочеться спросить как от него лучше избавиться?
и все-таки чем оно тебе так насолило?..


 
Игорь Шевченко   (2003-10-24 11:25) [15]

LMD


 
Dima_dvp   (2003-10-24 14:48) [16]

to Rouse_:
Не ну я не совсем глупенький, я понимаю как мог бы оказаться модуль Forms в моей программе. Но у меня только Windows и Messages. Поясню в чём была моя ошибка: Как водиться я активно пользуюсь возможностями IDE и поэтому для проверки наличия Application сделал следующее: Ввёл "Application." и у меня появися список сами знаете чего. Вот я испугался.

Извините, виноват.


 
Digitman   (2003-10-24 15:22) [17]


> Dima_dvp


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


 
Думкин   (2003-10-24 15:34) [18]

Удалено модератором



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

Форум: "Потрепаться";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.034 c
1-41241
Ganjo
2003-10-30 21:09
2003.11.13
StringGrid


1-41470
Sirus
2003-10-29 07:16
2003.11.13
Нужно установить вручную Flash Player (неважно какой)???


1-41200
AndriyS
2003-11-02 11:47
2003.11.13
Работа с Stringgrid, как менять во время исполнения размеры


1-41198
valler
2003-11-02 12:07
2003.11.13
Востоновление иконок в tray области при перезапуске explorer


6-41798
$h@dow
2003-09-19 16:05
2003.11.13
Как сделать экономный режим скачки?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский