Die kleinsten EXEs bekommst du, wenn du konsequent auf die Nutzung der Delphi-VCL verzichtest und ein sog. generisches API-Programm schreibst. Wie das geht, steht noch gut in alten Turbo-Pascal Büchern, das läßt sich problemlos in Delphi übernehmen. Wenn du ein neues Projekt startest, lösche die Unit1, Form1, siehe dir den Projekt-Quelltext an und lösche ihn komplett. Dann kannst du dort deinen Code reinschreiben (s.u.). Ist recht unkonfortabel zu programmieren, aber für sehr einfache „popelige“ Programme ohne aufwendiges GUI unschlagbar in Resourcenverbrauch und Ausführungsgeschwindigkeit.
Wenn du gar keine Fenster brauchst, schreibe einfach ein Programm wie dies:
**program** ShortAndSimple;
**begin**
_// mach irgendwas_
**end.**
Mit Fenstern wirds etwas komplizierter:
**program** NonVCLHelloWorld;
**uses** Messages, Windows;
_{$R \*.RES.}_
**const**
AppName: array[0..10] of Char = 'HelloWinApp';
**function** WndProc(HWnd: HWND; Msg: UINT; wParam: WPARAM;
lParam: LPARAM): LRESULT; stdcall;
**begin**
**case** Msg **of**
WM\_DESTROY:
**begin**
PostQuitMessage(0);
Result := 0;
**end**
**else**
Result := DefWindowProc(HWnd, Msg, WParam, LParam);
**end** ;
**end** ;
**var**
C: TWndClass;
Handle: HWND;
Msg: TMsg;
Result: Integer;
**begin**
**with** WClass **do begin**
style := CS\_VREDRAW **or** CS\_HREDRAW;
lpfnWndProc := @WndProc;
cbClsExtra := 0;
cbWndExtra := 0;
C.hInstance := HInstance;
hIcon := LoadIcon(HInstance, IDI\_APPLICATION);
hCursor := LoadCursor(HInstance, IDC\_ARROW);
hbrBackground := GetStockObject(WHITE\_BRUSH);
lpszMenuName := nil;
lpszClassName:= @AppName;
**end** ;
RegisterClass(WClass);
Handle := CreateWindow(@AppName, 'Hello World!',
WS\_OVERLAPPEDWINDOW, CW\_USEDEFAULT,
CW\_USEDEFAULT,
CW\_USEDEFAULT, CW\_USEDEFAULT, 0, 0, HInstance, **nil** );
ShowWindow(Handle, SW\_NORMAL);
UpdateWindow(Handle);
**while** GetMessage(Msg,0,0,0) **do begin**
TranslateMessage(Msg);
DispatchMessage(Msg);
**end** ;
**end**.
Gruß,
Jochen