![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как написать приложение используя WinAPI [D7, Win95/98, WinME, NT4, Win2k, WinXP]
Elysium © (2004-05-19 13:39:00)Подскажите, как написать приложение, не используя TApplication & TForm, т.е. используя только WinAPI(необходимы минимальные размеры софтины).
Игорь Шевченко (2004-05-19 22:16:00) [1]
> созданное с помощью TApplication & TForm - занимает в памяти
> (WinXP) - 2700 кб, а созданное с помощью приведенного выше
> кода 1500 кб
Это тебе Task Manager показывает - не верь ему. На самом деле и то и то занимают гораздо меньше места.
Elysium (2004-05-19 21:49:00) [2]Кстати, когда я говорил о Pentium 200. Я имел ввиду и память мегов 16, и хард 1гиг, и тому подобное, т.е. слабенькая машина.
А по поводу того что она памяти меньше занить не будет тут, я буду спорить, приложение с одним окном (т.е. голое) созданное с помощью TApplication & TForm - занимает в памяти (WinXP) - 2700 кб, а созданное с помощью приведенного выше кода 1500 кб.Вроде как разница есть. И по поводу размера на диске в первом случае 364Кб, а с использованием API - 16кб.Вроде как бы разница есть в первом и во втором аспекте.
DVM (2004-05-19 17:33:00) [3]
> что желательно (я повторюсь желательно) чтобы она занимала
> минимум памяти. Вот.
От того, что программа написана "чиста API" она меньше памяти занимать не будет. А может и больше будет. Выигрыш в скорости и в размере на диске (последнее не всегда)
Digitman (2004-05-19 16:12:00) [4]
> использовать ее могут даже на Pentium 200
а это здесь причем ? речь-то не о производительности ЦП, а о ресурсах системы в целом ..
> программка всегда будет висеть в памяти
да на здоровье ! нехай висит себе !
только вот никто не заствляет тебя, пока "программка висит", грузить в ВАП процесса все что ни попадя .. просто разумный и осмысленный подход нужен к использованию ресурсов в каждый момент времени работы приложения
Elysium (2004-05-19 15:38:00) [5][lamer]Barmaglot спасибо за код.
Digitman - действительно с ресурсами у меня все в порядке, но использовать ее могут даже на Pentium 200. И программка всегда будет висеть в памяти, так, что желательно (я повторюсь желательно) чтобы она занимала минимум памяти. Вот.
Всем спасибо за комментарии и ответы.
Digitman (2004-05-19 14:57:00) [6]
> необходимы минимальные размеры софтины
чем это обосновано ?
судя по перечисленным в теме ОС, с ресурсами аппаратно-программных конфигураций, под управлением которых планируется использовать "софтину", у тебя д.б. все в порядке ...
SammIk (2004-05-19 14:47:00) [7]http:\\logid.narod.ru\PopUp.zip
[lamer]Barmaglot (2004-05-19 13:46:00) [8]Держи код минимального приложения на WinAPI...
function PlainWinProc (hWnd: THandle; nMsg: UINT;
wParam, lParam: Cardinal): Cardinal; export; stdcall;
var
Rect: TRect;
begin
Result := 0;
case nMsg of
wm_Create:
begin
end;
wm_Size:
begin
end;
wm_Destroy:
PostQuitMessage (0);
else
Result := DefWindowProc (hWnd, nMsg, wParam, lParam);
end;
end;
procedure WinMain;
var
hWnd: THandle;
Msg: TMsg;
WndClassEx: TWndClassEx;
lpStartUpInfo: TStartUpInfo;
begin
WndClassEx.cbSize := sizeOf (TWndClassEx);
WndClassEx.lpszClassName := 'PlainWindow';
WndClassEx.style := cs_VRedraw or cs_HRedraw;
WndClassEx.hInstance := HInstance;
WndClassEx.lpfnWndProc := @PlainWinProc;
WndClassEx.cbClsExtra := 0;
WndClassEx.cbWndExtra := 0;
WndClassEx.hIcon := LoadIcon (hInstance,MakeIntResource ('MaINICON'));
WndClassEx.hIconSm := LoadIcon (hInstance,MakeIntResource ('MAINICON'));
WndClassEx.hCursor := LoadCursor (0, idc_Arrow);;
WndClassEx.hbrBackground := COLOR_WINDOW;
WndClassEx.lpszMenuName := nil;
if RegisterClassEx (WndClassEx) = 0 then
MessageBox (0, 'Invalid class registration','Plain API', MB_OK)
else
begin
hWnd := CreateWindowEx (WS_EX_OVERLAPPEDWINDOW and WS_THICKFRAME{WINDOWEDGE},
WndClassEx.lpszClassName,
'Plain API Demo',
WS_OVERLAPPEDWINDOW,
cw_UseDefault, 0,
cw_UseDefault, 0,
0,0,HInstance,nil);
if hWnd = 0 then
MessageBox (0, 'Window not created',
'Plain API', MB_OK)
else
begin
GetStartUpInfo(lpStartUpInfo);
ShowWindow (hWnd, lpStartUpInfo.wShowWindow);
while GetMessage (Msg, 0, 0, 0) do
begin
TranslateMessage (Msg);
DispatchMessage (Msg);
end;
end;
end;
end;
begin
WinMain;
end.