Okenní aplikace pod 20 kB ?! - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

Soutěž

Sponzorem soutěže je:

IDIF

 

Kde se koná výstava fotografií Luďka Vojtěchovského?

V dnešní soutěži hrajeme o:



Delphi

Okenní aplikace pod 20 kB ?!

serial

31. ledna 2002, 00.00 | Potřebujete napsat pod Windows opravdu malou aplikaci, a s vaším RAD nástrojem se nedokážete dostat pod 300kB? Ukážeme vám, jak napsat opravdu malou aplikaci..



Jak je nám, programátorům pracujícím pod Delphi známo, komfort, který nám dopřává RAD je vykoupen větším nárokem na diskový prostor. Pokud chceme vytvořit jen malý "okenní" program, nestlačíme většinou velikost výsledného souboru pod 300 kB. Dnes si ukážeme, jak můžeme vytvořit aplikaci, která má velikost menší než 20 kB!

Vytvoříme-li pomocí jednotky forms prázdné "okno" a zkompilujeme pod Delphi5 Standard, výsledná velikost souboru bude něco málo pod 300 kB, což je poměrně hodně. Hlavně, pokud nám na velikosti exe souboru opravdu záleží. Takovým malým příkladem je vytvoření instalačního programu.

Vše je založeno na tom, že nesmíme použít jednotku forms. Namísto toho použijeme API funkce. Ovšem práce na takovém projektu je značně složitější, jelikož si všechno musíme obsluhovat sami.
A nyní k názornému příkladu. Vytvoříme okno aplikace, které bude obsahovat statický text, tlačítka, editbox a dialogové okno. Také bude možno, mimo myši, obsluhovat aplikaci pomocí klávesnice.

program smallapp;
uses
  Windows,  //API funkce
  Messages; //ovlada zprávy systemu

{$R *.RES}
Používáme pouze jednotky Windows a Messages, které zprostředkovávají API funkce a zprávy systému.

hInst:=GetModuleHandle(nil); //handle aplikace
  with wClass do
  begin
    Style:=         CS_PARENTDC;
    hIcon:=         LoadIcon(hInst,'MAINICON');
    lpfnWndProc:=   @WindowProc;
    hInstance:=     hInst;
    hbrBackground:= COLOR_BTNFACE+1;
    lpszClassName:= 'Message Class';
    hCursor:=       LoadCursor(0,IDC_ARROW);
  end;

  RegisterClass(wClass);  //registrace tridy

  // Vytvoreni hlavniho okna
  Handle:=CreateWindow(
    'Message Class',           // Registrovany class name
    'Small Application',       // Titulek okna
    WS_OVERLAPPEDWINDOW or     // Zakladni styl
    WS_VISIBLE,                // Viditelne okno
    posx,                      // Pozice okna X
    posy,                      // Pozice okna Y
    width,                     // Sirka
    height,                    // Vyska
    0,                         // Handle okna
    0,                         // Handle menu
    hInst,                     // Handle aplikace
    nil);                      // Struktura okna

Takto vytvoříme hlavní okno naší aplikace.

//funkce obsluhuje kazdou udalost hlavniho okna
function WindowProc(hWnd,Msg,wParam,lParam:Longint):Longint; stdcall;
begin
  Result:=DefWindowProc(hWnd,Msg,wParam,lParam); //Vratime vzdy default message
  case Msg of
    WM_SIZE:    Resize; //Zmena velikosti
    WM_COMMAND: 
      If lParam=hCloseButton Then CloseApp Else //Stisknuto tlacitko zavrit
      If lParam=hShowButton Then ShowMess; //Stisknuto tlacitko zobrazit
    WM_DESTROY: ShutDown;  //Zavreni okna
  end;
end;

Je důležité obsluhovat zprávy systému.

Procedure ShowMess;
var
sText: Integer; // velikost textu v editboxu
Text :   PChar; // buffer pro text editboxu
begin
  sText:=GetWindowTextLength(hMessEdit)+1;   //zjistime velikost textu
  GetMem(Text,sText);
  GetWindowText(hMessEdit,Text,sText);  //zjistime text
  MessageBox(hMessEdit,Text,'MessageBox',mb_ok OR MB_ICONINFORMATION);
  //vyvolame MessageBox
  FreeMem(Text);
end;

Procedura zobrazí dialogové okno s textem, který byl vyplněn v editboxu.

Náš výsledný soubor má velikost pouhých 19 kB ! Další zmenšení exe souboru se dá docílit pomocí komprimačních programů. Osobně doporučuji UPX, který naleznete zde. Po zabalení má soubor neuvěřitelných 11 kB !!!

Dnes jsme si ukázali základy, jak vytvářet aplikace pomocí API funkcí. V některém příštím díle si ukážeme, jak se dá takto vytvořit instalační program. Všechny zdroje k programu naleznete zde.

Tématické zařazení:

 » Rubriky  » Delphi  

 » Rubriky  » Windows  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: