Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как написать приложение используя 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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо