|
Задача этого документа раскрыть извечный вопрос минимизации
размеров ехе фаила в делфях
для меня сужествует несколько различных способов уменьшения
размера исполняемого фаила
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...) убрать те которые появляются в выше описанных (те
в использованных)
произойдет ли уменьшение размеров ... и как не странно - произойдет
и пакеты не надо тоскать - работает как и раньше !!!
а вот какие убрать это уж вам самим надо найти тк для разных
программ разные вариации...
|