[Delphi 5] EXE kleiner machen

Hallo !

Ich habe da mal noch eine Frage :

Wenn ich eine Delphi Anwendung erstelle, nur ein Fenster mit keinem Element darauf, ist das EXE File dazu schon „riesig“.

Gibt es Möglichkeiten, diese Größe zu verringern ? Ein kleines Tool von mir, daß nur einen String generiert muß keine 386 KB groß sein !

Danke im voraus

Daniel

Du kannst Units und PAckages aus dem Projekt entfernen. Bilder etc. aus Resourcen laden und nicht an mehreren Stellen über den Objektinspektor…

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

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

Noch’n Link dazu:
Super erklärt mit allem drum & dran ist es hier:

http://www.delphi-resource.com/articles/raw_api.shtml

Jochen