Уменьшаем размер ехе в delphi

Задача этого документа раскрыть извечный вопрос минимизации размеров ехе фаила в делфях

для меня сужествует несколько различных способов уменьшения размера исполняемого фаила

1 создания приложения полностью на Win Api
2 использование более компактных библиотек чем у делфии
3 всем давно известный run time packages

1 это найболее лучший способ для написания небольших приложений (прим тоян)
и многие забыли или не знали о такой возможности в делфи
вот пример скелета окна на делфи в чистом API

program Project1;

uses
Windows, Messages;

const
WinName = 'MainWClass';

function MainWndProc(Window: HWnd; AMessage, WParam, LParam: Longint): Longint; stdcall;
begin
//подпрограмма обработки сообщений получаемых приложением
case AMessage of
WM_DESTROY:
begin
PostQuitMessage(0);
Result := 0;
Exit;
end;
else
Result := DefWindowProc(Window, AMessage, WParam, LParam);
end;
end;

function InitApplication: Boolean;
var
wcx: TWndClass;
begin
//Заполняем структуру TWndClass
// перерисовываем, если размер изменяется
wcx.style := CS_HREDRAW or CS_VREDRAW;
// адрес оконной процедуры
wcx.lpfnWndProc := @MainWndProc;
wcx.cbClsExtra := 0;
wcx.cbWndExtra := 0;
// handle to instance
wcx.hInstance := hInstance;
// загружаем стандандартную иконку
wcx.hIcon := LoadIcon(0, IDI_APPLICATION);
// загружаем стандартный курсор
wcx.hCursor := LoadCursor(0, IDC_ARROW);
// делаем светло-cерый фон
wcx.hbrBackground := COLOR_WINDOW;
// пока нет главного меню
wcx.lpszMenuName := nil;
// имя класса окна
wcx.lpszClassName := PChar(WinName);

// Регистрируем наш класс окна.
Result := RegisterClass(wcx) <> 0;
end;

function InitInstance: HWND;
begin
// Создаем главное окно.
Result := CreateWindow(
// имя класса окна
PChar(WinName),
// заголовок
'Project 1',
// стандартный стиль окна
WS_OVERLAPPEDWINDOW,
// стандартные горизонтальное, вертикальное положение, ширина и высота
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
0,//нет родительского окна
0,//нет меню
hInstance, // handle to application instance
nil); // no window-creation data
end;

var
hwndMain: HWND;
AMessage: msg;
begin
if (not InitApplication) then //обработка ошибок создания окна
MessageBox(0, 'Ошибка регистрации окна', nil, mb_Ok)
else
begin
hwndMain := InitInstance;
if (hwndMain = 0) then
MessageBox(0, 'Ошибка создания окна', nil, mb_Ok)
else
begin
// Показываем окно и посылаем сообщение WM_PAINT оконной процедуре
ShowWindow(hwndMain, CmdShow); //данные строчки можно
UpdateWindow(hwndMain);// убрать если не хотите видеть окна (!)

while (GetMessage(AMessage, 0, 0, 0)) do //цикл приема и отправки сообщений на обработку
begin
TranslateMessage(AMessage);
DispatchMessage(AMessage);
end;
end;
end;

end.

после этого уже можно свободно компилить и дивиться столь малым размерам фаила

2 кроме меня люди уже давным давно задумались над данной проблеммой
и видимо она их очень сильно волновала что заставилоа написать новые свои
библиотеки которые сохраняя функциональнось уменьшают размер фаила
в качетве примера могу привести библиотеку KOL и таких библиотек достаточно
их с легкостью можно найти в интернете...

3 да это самый простой способ но есть большое НО с ехе прийдется носить эти самые пакеты
а именно те которые использованы (project>>>information for project>>packages used)
так вот многие на этом и останавливаются ... хм но не такие как я... я подумал что если в рунтайм пэкеджах
(project>>>options>>>packages>>buld with...) убрать те которые появляются в выше описанных (те в использованных)
произойдет ли уменьшение размеров ... и как не странно - произойдет и пакеты не надо тоскать - работает как и раньше !!!
а вот какие убрать это уж вам самим надо найти тк для разных программ разные вариации...

 
Хостинг от uCoz