Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.26;
Скачать: CL | DM;

Вниз

размер exe-файла   Найти похожие ветки 

 
sbuffoon   (2004-01-14 03:31) [0]

Как уменьшит размер исполняемого файла


 
Aristarh Dark   (2004-01-14 05:00) [1]

Пиши без использования VCL. Чистый Win-API и размеры файла уменьшатся.


 
Andy BitOff ©   (2004-01-14 05:04) [2]

Или используй упаковщики. Хотя, тут на любителя.


 
Piople ©   (2004-01-14 05:47) [3]

Маленькое дополнение к вышесказанному:
Если писать на "чистом" API, то вместо ~350кб ты получишь ~12кб
Если пользоваться упаковщиками, то лучшие, на мой взгляд, ASPack и UPX


 
Anatoly Podgoretsky ©   (2004-01-14 09:12) [4]

Build with run time packages кардинально уменьшает размер ехе файла, очень кардинально.


 
alex_*** ©   (2004-01-14 09:21) [5]

ну вообще-то размер самого ЕХЕ уменьшит, но в сумме с нужными .bpl увеличит в несколько раз в лучшем случае.


 
ALEIIIKA ©   (2004-01-14 09:57) [6]

Киньте пример простой формы на "чистом" API. Заранее благодарен.


 
PVOzerski ©   (2004-01-14 09:59) [7]

Посмотри библиотеку KOL - ссылки и форум найдешь на этом же сайте.


 
Anatoly Podgoretsky ©   (2004-01-14 10:02) [8]

alex_*** © (14.01.04 09:21) [5]
Про bpl и процее речи не было, только про размер ЕХЕ


 
alex_*** ©   (2004-01-14 10:04) [9]

)) согласен


 
[lamer]Barmaglot ©   (2004-01-14 10:46) [10]

Самый простой пример WinAPI, который я нашел у себя...


program PlainAPI;

uses
Windows,
Messages;

//{$R *.res}

function PlainWinProc (hWnd: THandle; nMsg: UINT;
wParam, lParam: Cardinal): Cardinal; export; stdcall;
begin
Result := 0;
case nMsg of
wm_Create:
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,
integer(cw_UseDefault), 0,
integer(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
// Insert user code here
WinMain;
end.


 
ALEIIIKA ©   (2004-01-14 12:26) [11]

Чтобы отрисовывать на созданной форме, я так понимаю необходимо здесь

case nMsg of
wm_Create:
begin

end;

добавить обработку события wm_Paint?


 
[lamer]Barmaglot ©   (2004-01-14 13:45) [12]

Зависит от того, что ты собираешся рисовать. Если стандартный компонент, то чтото типа:

CreateWindowEx(0,"Button","Директория",ws_Child or ws_Visible or ws_Border or BS_PUSHBUTTON or BS_TEXT,
0,0,200,100,hWnd, id_Button1,hInstance,nil);

А если например вывести картинку, то тогда ручками, только не в WM_Create, а после него то есть приблизительно такой код:

case nMsg of
wm_Create:
begin
...
end;

wm_Paint:
begin
...
end;

Вообщем я лучше приведу более менее работающий код - попытка динамического изменения размеров компонентов в рунтайм


program PlainAPI;

uses
Windows,
Messages,
Commctrl;

//{$R *.res}

const
id_ListView1 = 100;
id_ListView2 = 105;
id_Button1 = 110;
id_Button2 = 115;
id_SButton1 = 120;
id_SButton2 = 125;
id_Edit1 = 130;
id_Combobox1 = 140;

var
hWnd_ListView1: THandle;
hWnd_ListView2: THandle;
hWnd_Button1: THandle;
hWnd_Button2: THandle;
hWnd_SButton1: THandle;
hWnd_SButton2: THandle;
hWnd_Edit1: THandle;
hWnd_Combobox1: THandle;

function PlainWinProc (hWnd: THandle; nMsg: UINT;
wParam, lParam: Cardinal): Cardinal; export; stdcall;
var
// hdc: THandle;
// ps: TPaintStruct;
Rect: TRect;
// TextMetric: TTextMetric;
begin
Result := 0;
case nMsg of
{wm_Paint:
begin
hdc := BeginPaint (hWnd, ps);
// Ellipse (hdc, 100, 100, 300, 300);
EndPaint (hWnd, ps);
end;}
wm_Create:
begin
hWnd_ListView1:=CreateWindowEx(0,"SysListView","ListView1",ws_Child or ws_Visible or ws_Border,
0,0,0,0,hWnd, id_ListView1,hInstance,nil);
hWnd_ListView2:=CreateWindowEx(0,"SysListView","ListView2",ws_Child or ws_Visible or ws_Border,
0,0,0,0,hWnd, id_ListView2,hInstance,nil);
hWnd_Button1:=CreateWindowEx(0,"Button","Директория",ws_Child or ws_Visible or ws_Border or BS_PUSHBUTTON or BS_TEXT,
0,0,0,0,hWnd, id_Button1,hInstance,nil);
hWnd_Button2:=CreateWindowEx(0,"Button","Поиск",ws_Child or ws_Visible or ws_Border or BS_PUSHBUTTON or BS_TEXT,
0,0,0,0,hWnd, id_Button2,hInstance,nil);
hWnd_SButton1:=CreateWindowEx(0,"Button","<---",ws_Child or ws_Visible or ws_Border or BS_PUSHBUTTON or BS_TEXT,
0,0,0,0,hWnd, id_SButton1,hInstance,nil);
hWnd_SButton2:=CreateWindowEx(0,"Button","--->",ws_Child or ws_Visible or ws_Border or BS_PUSHBUTTON or BS_TEXT,
0,0,0,0,hWnd, id_SButton2,hInstance,nil);
hWnd_Edit1:=CreateWindowEx(0,"Edit","Edit1",ws_Child or ws_Visible or ws_Border or ES_AUTOHSCROLL or ES_LEFT,
0,0,0,0,hWnd, id_Edit1,hInstance,nil);
hWnd_Combobox1:=CreateWindowEx(0,"Combobox","Combobox1",ws_Child or ws_Visible or ws_Border or CBS_AUTOHSCROLL or CBS_DROPDOWN or CBS_HASSTRINGS,
0,0,0,0,hWnd, id_Combobox1,hInstance,nil);
//--------------------------------------------------------------------
// ListView_SetBKColor(hWnd_ListView1, GetSysColor(COLOR_APPWORKSPACE));
// ListView_SetBKColor(hWnd_ListView2, GetSysColor(COLOR_APPWORKSPACE));
end;
wm_Size:
begin
GetClientRect(hWnd, Rect);
SetWindowPos(hWnd_ListView1,0,rect.Left + rect.Right div 100 , Rect.Top+Rect.Bottom div 5,Rect.Right-(Rect.Right div 2+rect.Right div 25)-rect.Right div 100,Rect.Bottom-(Rect.Bottom div 5)-rect.Right div 100,swp_NoZOrder); //GetDlgItem(hWnd, id_ListView1)
SetWindowPos(hWnd_ListView2,0,Rect.Right div 2+rect.Right div 25 , Rect.Top+Rect.Bottom div 5,Rect.Right-(Rect.Right div 2+rect.Right div 25)-rect.Right div 100,Rect.Bottom-(Rect.Bottom div 5)-rect.Right div 100,swp_NoZOrder);
SetWindowPos(hWnd_Button1,0,rect.Left + rect.Right div 100 , Rect.Top+Rect.Bottom div 100,Rect.Right div 5,Rect.Bottom div 15,swp_NoZOrder);
SetWindowPos(hWnd_Button2,0,rect.Left + rect.Right div 100 , (Rect.Top+Rect.Bottom div 100)+(Rect.Bottom div 15+Rect.Bottom div 100),Rect.Right div 5,Rect.Bottom div 15,swp_NoZOrder);
SetWindowPos(hWnd_SButton1,0,Rect.Right div 2-rect.Right div 30 , Rect.Top+Rect.Bottom div 2,(Rect.Right div 2+Rect.Right div 30)-(Rect.Right-(Rect.Right div 2+rect.Right div 30)),Rect.Bottom div 15,swp_NoZOrder);
SetWindowPos(hWnd_SButton2,0,Rect.Right div 2-rect.Right div 30, (Rect.Top+Rect.Bottom div 2)+Rect.Bottom div 15+Rect.Bottom div 50,(Rect.Right div 2+Rect.Right div 30)-(Rect.Right-(Rect.Right div 2+rect.Right div 30)),Rect.Bottom div 15,swp_NoZOrder);
SetWindowPos(hWnd_Edit1,0,rect.Left + rect.Right div 100+(Rect.Right div 5)+ rect.Right div 100 , Rect.Top+Rect.Bottom div 100+(Rect.Bottom div 30){+(TextMetric)} ,Rect.Right-(3*(Rect.Right div 100)+Rect.Right div 5),Rect.Bottom div 15,swp_NoZOrder or SWP_SHOWWINDOW); // Неокончено
SetWindowPos(hWnd_Combobox1,0,rect.Left + rect.Right div 100+(Rect.Right div 5)+ rect.Right div 100 , ((Rect.Top+Rect.Bottom div 100)+(Rect.Bottom div 15+Rect.Bottom div 100))+(Rect.Bottom div 30){+(TextMetric)} ,Rect.Right div 5,Rect.Bottom div 15,swp_NoZOrder or SWP_SHOWWINDOW); // Неокончено
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
// Insert user code here
WinMain;
end.



p.s. если хочешь заняться программированием на WinAPI вот тебе сайтик http://luckie-online.de/tutorials/win32apituts/ там если покопаться очень много интересного. Одна проблема он на немецком. С другой стороны примеры на Delphi, а их переводить вроде как не надо... :-).


 
ALEIIIKA ©   (2004-01-14 14:10) [13]

Спасибо за ссылку, много интересного!


 
Piter ©   (2004-01-14 14:43) [14]

Ну не надоело вам отвечать на этот вопрос?! Вот блин... вынесите его в FAQ наконец-то...



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

Текущий архив: 2004.01.26;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.015 c
14-83265
yorik
2004-01-05 12:43
2004.01.26
Download Upload, Буфер - за помощь вознагрждение :-)!!!


3-83095
Orxan
2003-12-29 17:04
2004.01.26
Ищу DBGrid, в котором:


14-83235
Думкин
2004-01-06 06:14
2004.01.26
С днем рождения! 6 января.


9-83087
NikotiN
2003-07-11 15:33
2004.01.26
Как в TBitmap загрузить изображение из TMemoryStream?


14-83259
cybervector
2004-01-05 13:26
2004.01.26
Кто уже видел D8? Какие впечатления?