Announcement

Collapse
No announcement yet.

"kleinstes" Delphi-Programm

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • "kleinstes" Delphi-Programm

    Hi! <BR>
    eigentlich hat es keinen wirklichen sinn, aber nur so aus interesse. welche möglichkeiten habe ich das "compilat" möglichst klein zu kriegen? eine standard exe is ja immernoch ziemlich groß.
    danke für infos diesbezüglich

    mfg
    jan

  • #2
    Dieser Wettbewerb ist schon mehrfach gefuehrt worden. Erst mal muss man ohne VCL auskommen. Es gibt einige Alternativen, die recht vollstaendig sind. Man kann auch noch EXE-Packer anwenden, aber das bringt bei wirklich kleinen Programmen nichts. Ich finde das auch ein bischen unfair.<br>
    Man kann so um die 20K erreichen

    Comment


    • #3
      14k um genau zu sein, nur macht das program dann nicht's, hat kein Icon, kein GUI, rein garnichts. Drunter gehts nicht da das PE Fileformat für NT/2000 diese 14k benötigt. Man könnte rein theoretisch auf 2k kommen, aber dann läuft die EXE nur auf Win95,3.11.

      Gruß Hage

      Comment


      • #4
        &gt; eine standard exe is ja immernoch ziemlich groß.<p>
        Natürlich. Im Gegensatz zu MS-Programmiersprachen wird in Delphi-Anwendungen default-mäßig fast alles einkompiliert, was benötigt wird. Machst Du gleichen Versuch mit einer VB oder VC++ Anwendung, wird die natürlich kleiner. Aber versuche die mal auf einem frisch installierten Rechner ohne den Laufzeitbibliotheken von MS laufen zu lassen Fairerweise muss man natürlich zugeben, dass sicherlich über 90% der Windowsrechner die erforderlichen Laufzeitbibliotheken für MS drauf haben.<p>
        Schöne Grüße, Mario Noac
        Schöne Grüße, Mario

        Comment


        • #5
          Hi!
          @hagen: genau das ist es was ich suche. ich brauch kein gui, kein icon usw. nur ein programm, welches code ausführt und so klein wie möglich ist. gibt's da irgendwo sourcen oder weitere infos ?
          danke

          mfg ja

          Comment


          • #6
            Hi,

            wenn du keine gui benötigst, dann mach doch daraus eine konsolenanwendung "{$APPTYPE CONSOLE}".

            mfg sve

            Comment


            • #7
              hi sven! <br>
              ja klar..das könnte ich tun, nur hab ich dann immernoch das blöde konsolenfenster abgesehen davon interessiert es mich, wie man die größe weiter drücken könnte.

              mfg
              ja

              Comment


              • #8
                Ich hatte gerade Langeweile<br>

                <b>if not </b> Assigned(PraktischerNutzen) <b>then</b><br>
                &nbsp;&nbsp;http://www.bendlins.de/nico/delphi/Kurzweil.bat<br>

                - nic

                Comment


                • #9
                  Hallo,

                  warum so spartanisch. Das folgende sollte für diesen Zweck ausreichen, wobei dort neben dem Fenster und dem Dialog auch ein Menü, ein Icon und sonstige Controls verfügbar sind. Über den <i>Borland Resource Workshop 4.5</i> wird die graphische Benutzeroberfläche visuell zusammengeklick, als RC-Datei gespeichert und beim Compileren in das RES-Format übersetzt und eingebunden:
                  <pre>
                  { ************************************************** **************
                  Typ : Win32-API-Programm
                  Autor : Andreas Kosch
                  Erstellt am : 18.08.96
                  Compiler : Delphi 2.0 / 3.0 / 4.0 / 5.01
                  Betriebssystem : Windows 95 / Windows 2000
                  Beschreibung : Generisches Win32-API-Programm
                  verwendet ein ANIMATE_Control
                  Revisionen : 29.03.1997 Ivory
                  07.06.1997 Test Delphi 3.0 C/S
                  18.09.2000 Test Delphi 5.01
                  ************************************************** ************** }

                  program animate;

                  {$R 'ANIMATEX.res' 'ANIMATEX.RC'} // Dlg + AVI-Ressource

                  uses
                  SysUtils,
                  Windows,
                  Messages,
                  Commctrl;

                  const
                  szClassName = 'DelGenAVI';
                  szTitle = 'Delphi 5 und das Windows-API (oder wer braucht die VCL?)';
                  cm_Exit = 101; // Menüpunkt Exit
                  cm_About = 201; // Menüpunkt Info über...
                  id_AniCtrl = 11; // ID im Dialogfenster

                  (* Dialogfensterprocedur, die für die Behandlung der Botschaften
                  für das Dialogfenster zuständig ist.
                  Achtung! Aufrufkonvention »stdcall« nicht vergessen. *)

                  function About(Dialog: HWnd; Message, WParam: Word;
                  LParam: Longint): Bool; stdcall;
                  begin
                  Result := True;
                  case Message of
                  WM_INITDIALOG: begin
                  // AVI ist in den Ressourcen !
                  SendMessage(GetDlgItem(Dialog, id_AniCtrl),
                  ACM_OPEN, 0,
                  LongInt(PChar('AVICOPY')));
                  Exit;
                  end;
                  WM_COMMAND : if (LoWord(WParam) = id_Ok) or
                  (LoWord(WParam) = id_Cancel) then
                  begin
                  EndDialog(Dialog, 1);
                  Exit;
                  end;
                  end;
                  Result := False;
                  end;

                  (* Fensterprocedure der registrierten Fensterklasse, die für die
                  Bearbeitung der Botschaften für das Hauptfenster der Anwendung
                  zuständig ist. Auch hier darf die Aufrufkonvention »stdcall«
                  nicht fehlen! *)

                  function WindowProc(Window: HWnd; Message : UINT; wParam: WPARAM;
                  LParam: LPARAM): Longint; stdcall;
                  begin
                  Result := 0;
                  case Message of
                  WM_COMMAND: if LoWord(WParam) = cm_About then
                  begin
                  // Dialogfenster aufrufen
                  DialogBox(HInstance, 'ABOUTBOX', Window, @About);
                  Exit;
                  end
                  else if LoWord(wParam) = cm_Exit then
                  begin
                  // Programm beenden
                  PostQuitMessage(0);
                  Exit
                  end;
                  WM_DESTROY: begin
                  // Programm beenden
                  PostQuitMessage(0);
                  Exit;
                  end;
                  end;
                  // nichtbehandelte Botschaften -> Standardbehandlung
                  Result := DefWindowProc(Window, Message, WParam, LParam);
                  end;

                  (* Prozedur »WinMain« als die Schaltzentrale des Programms :
                  - Fensterklasse initialisieren
                  - Fensterklasse registrieren
                  - Fenster dieser Klasse erzeugen
                  - Message-Loop starten und auf Programmende warten *)

                  procedure WinMain;
                  var
                  aWindow : HWnd;
                  WindowClass : TWndClassEx;
                  Message : TMsg;
                  begin
                  // InitApplication
                  WindowClass.cbSize := SizeOf(TWndClassEx);
                  WindowClass.Style := CS_HRedraw OR CS_VRedraw;
                  WindowClass.hInstance := HInstance;
                  WindowClass.lpfnWndProc := @WindowProc;
                  WindowClass.cbClsExtra := 0;
                  WindowClass.cbWndExtra := 0;
                  WindowClass.hIcon := LoadIcon(hInstance, PChar('BIG'));
                  WindowClass.hIconSm := LoadImage(hInstance, PChar('SMALL'),
                  IMAGE_ICON, 16, 16, 0);
                  WindowClass.hCursor := LoadCursor(0, idc_Arrow);
                  WindowClass.hbrBackground := COLOR_BTNFACE + 1;
                  WindowClass.lpszMenuName := 'TESTMENU';
                  WindowClass.lpszClassName := szClassName;
                  // Rückgabewert 0 -> Fehlschlag -> sofort raus hier
                  if RegisterClassEx(WindowClass) = 0 then
                  Halt(1);
                  // InitInstance
                  aWindow := CreateWindowEx(WS_EX_OVERLAPPEDWINDOW, szClassName,
                  szTitle, WS_OVERLAPPEDWINDOW,
                  CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,
                  0, 0, HInstance, nil);

                  // Fensterhandle = 0 -> Fehlschlag -> sofort raus hier
                  if aWindow = 0 then
                  Halt(2);
                  // Aha - gültiges Handle -> Zeige dich !
                  ShowWindow(aWindow, SW_SHOW);
                  UpdateWindow(aWindow);
                  // neuen Windows95-Controls initialisieren
                  InitCommonControls;
                  // Message-Loop starten
                  while GetMessage(Message, 0, 0, 0) do
                  begin
                  TranslateMessage(Message);
                  DispatchMessage(Message);
                  end;
                  Halt(Message.wParam);
                  end;

                  begin
                  WinMain;
                  end.
                  </pre>
                  P.S: Der Borland Resource Workshop kann auch durch Notepad ersetzt werden:
                  <pre>
                  TESTMENU MENU
                  {
                  POPUP "&Datei"
                  {
                  MENUITEM "Exit", 101
                  }

                  POPUP "&Hilfe"
                  {
                  MENUITEM "&Info über", 201
                  }

                  }

                  ABOUTBOX DIALOG 22, 35, 185, 106
                  STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
                  CAPTION "Info über ANIMATE.EXE"
                  FONT 8, "MS Sans Serif"
                  LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
                  {
                  DEFPUSHBUTTON "OK", 1, 10, 82, 50, 14
                  PUSHBUTTON "Abbruch", 2, 70, 82, 50, 14
                  PUSHBUTTON "Help", 9, 130, 82, 50, 14
                  CONTROL "Generic1", 11, "SysAnimate32", 7 | WS_CHILD | WS_VISIBLE, 43, 10, 96, 54
                  }
                  </pre&gt

                  Comment


                  • #10
                    Ohne SysUtils.pas wär´s noch mal ein Stück kürzer, wobei ich auf die Schnelle im Kosch´schen Code keine Verwendung von einer SysUtils-Routine gefunden habe. (Oder ich hab´s übersehen.)<br><br>
                    <i>Mathias was here )</i&gt

                    Comment


                    • #11
                      <i>"warum so spartanisch"</i>

                      Langeweile

                      - nic

                      Comment


                      • #12
                        Go*** 2 ist ja auch fertig. ;o)<br><br>
                        Was haben AVIs für einen Ressourcentyp? Ich habe mir erst mal mit "Animate_Open" beholfen, weil ich es ernsthaft nicht gepackt habe, die AVI in die Ressourcen zu kriegen (na ja, das schon) und anzuzeigen. War wohl der falsche Typ (RC_DATA)?<br><br>
                        btw: SysUtils kann wirklich weg, Andreas.<br><br>
                        Mathias

                        Comment


                        • #13
                          Hallo Mathias,

                          der Borland Resource Workshop legt die AVI wie folgt in der RC-Datei ab:
                          <pre>
                          AVICOPY AVI LOADONCALL MOVEABLE
                          {
                          '52 49 46 46 14 52 00 00 41 56 49 20 4C 49 53 54'
                          'E0 07 00 00 68 64 72 6C 61 76 69 68 38 00 00 00'
                          .....
                          }
                          </pre>
                          Als Typ wird AVI genutzt.

                          &gt;..btw: SysUtils kann wirklich weg, Andreas...

                          Im originalen Programm stehen mehr Programmzeilen in der Nutzfunktion, die ich vor dem Posten hier im FORUM entfernt habe. Die Uses-Auflistung wird bei derartigen Aktion immer vergessen :-

                          Comment


                          • #14
                            &gt;&gt; Die Uses-Auflistung wird bei derartigen Aktion immer vergessen.<br><br>
                            Macht ja nix. Dafür gibt´s ja Leute wie mich, die das alles ausprobieren (wollen und müssen), und die auch in fremden Codezeilen wie der Teufel rumkürzen ... ;o)<br><br><br>
                            Ich nehme für Ressourcen den Editor vom Visual Studio 6. Nichts für ungut, aber der Borland RWS ist mir ein bisschen zu antiquiert. Oder bin ich einfach nur verwöhnt? :-D<br>
                            Danke für die Antwort; ich konnte im PSDK irgendwie nichts zu AVIs finden. Jetzt bin ich wieder schlauer.<br><br>
                            Gruß,<br>Mathias

                            Comment

                            Working...
                            X