Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.01.26;
Скачать: [xml.tar.bz2];

Вниз

размер 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.006 c
14-83258
panov
2004-01-05 18:31
2004.01.26
Задачка-)


3-83125
СержК
2003-12-29 15:03
2004.01.26
Клиентская часть MSSQL


1-83188
User
2004-01-13 15:16
2004.01.26
Последняя строка файла


14-83279
DDA
2004-01-03 23:48
2004.01.26
HKEY_DYN_DATA


8-83213
Meteor
2003-09-22 22:14
2004.01.26
TMediaPlayer





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский