Форум: "Основная";
Текущий архив: 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