1. Уважаемые гости и пользователи форума.
    Администрация настоятельно рекомендует не регистрировать несколько аккаунтов для одного пользователя. При выявлении наличия мультиаккаунтов будут заблокированы все учетные записи данного пользователя.
    Аккаунты, зарегистрированные на временную почту будут также заблокированы.

Вопрос Среда разработки Delphi

Тема в разделе "Delphi", создана пользователем aLLeXUs, 14 авг 2014.

  1. Ветеран

    Регистрация:
    4 мар 2012
    Сообщения:
    143
    Симпатии:
    73
    На сколько я знаю, то на данном форуме должно быть много Delphi программистов. И вот у меня есть такой вопрос. Какую среду разработки вы используете? Сам я использую Embercadero RAD Studio XE5. У меня такой вопрос возник потому что получаемые файлы после компиляции получаются большого размера. Вот допустим если я скомпилирую пустой проект в режиме Release, то есть без отладочной информации то exe получается примерно 2 мб, что достаточно много. Подскажите что вы делаете что бы добиться маленького размера исполняемого файла или библиотеки. Ведь я не видел ни программ ни библиотек которые много бы весили при столь незначительном функционале.
     
  2. Ветеран Проверенный

    Регистрация:
    19 дек 2011
    Сообщения:
    350
    Симпатии:
    402
    Embercadero RAD Studio XE3.
    VCL. Можно ненамного уменьшить размер исполняемого файла, в интернете есть несколько статей.
    Из того, что я знаю - KOL, либо писать на чистом WinAPI.
     
  3. Ветеран

    Регистрация:
    19 июн 2011
    Сообщения:
    79
    Симпатии:
    54
    Embercadero RAD Studio XE4 / Delphi 7.
    Это беда новых Delphi XE. Хочешь писать быстро с хорошим функционалом - приходится чем-то жертвовать. Попробуй Delphi 7, если не нужны фичи новых Delphi XE. Либо писать на WinApi, но тогда смысла оставаться на Delphi не вижу, переходи на C/C++.
     
  4. Ветеран

    Регистрация:
    4 мар 2012
    Сообщения:
    143
    Симпатии:
    73
    А что это даст? Я создал пустой проект и в uses удалил все кроме Vcl.Forms, но после компиляции файл все равно занимает 2 мб. Не думаю что компонент форм сколько весил бы
    а можно узнать, сколько весит exe пустого проекта в режиме release? Думаю может перейти на эту версию
    это совсем другой язык, не схожий с delphi, для меня сложный.
    не нашел, не понял как сформулировать. Можно пример статьи?
     
  5. Ветеран

    Регистрация:
    19 июн 2011
    Сообщения:
    79
    Симпатии:
    54
    Никаких модулей не будет. Будет лишь динамическая линковка майковских dll.
    Например:
    Код (Text):
    function CreateWindowExW(dwExStyle: DWORD; lpClassName: PChar;
      lpWindowName: PChar; dwStyle: DWORD; X, Y, nWidth, nHeight: Integer;
      hWndParent: HWND; hMenu: HMENU; hInstance: HINST; lpParam: Pointer): HWND;
      stdcall; external 'user32.dll' name 'CreateWindowExW';
    Затем используешь функцию для своих нужд.
     
  6. Ветеран Проверенный

    Регистрация:
    19 дек 2011
    Сообщения:
    350
    Симпатии:
    402
    2,17 МБ (2 283 008 байт)
    https://www.google.ru/?gws_rd=ssl#newwindow=1&q=delphi xe3 exe size
    ----
    Замена дефолтной иконки Delphi XE3 на свою, весом в 386 байт даёт: 1,89 МБ (1 985 536 байт).
    ----

    Если отключить RTTI
    Код (Text):
    {$WEAKLINKRTTI ON}
    {$RTTI EXPLICIT METHODS([]) FIELDS([]) PROPERTIES([])}
    размер exe уменьшится до 1,53 МБ (1 612 288 байт)
    ----
    В конце можно пройтись UPX'ом, что даст 431 КБ (441 856 байт)
    Скомпильте этот код:
    Код (Text):
    uses
      Windows,
      Messages;

    var
      Msg        : TMSG;
      LWndClass  : TWndClass;
      hMainHandle: HWND;
      hButton    : HWND;
      hStatic    : HWND;
      hEdit      : HWND;
      hFontText  : HWND;
      hFontButton: HWND;

    procedure ReleaseResources;
    begin
      DestroyWindow(hButton);
      DestroyWindow(hStatic);
      DestroyWindow(hEdit);
      DeleteObject(hFontText);
      DeleteObject(hFontButton);
      PostQuitMessage(0);
    end;

    function WindowProc(hWnd,Msg:Longint; wParam : WPARAM; lParam: LPARAM):Longint; stdcall;
    begin
      case Msg of
          WM_COMMAND: if lParam = hButton then
                        MessageBox(hMainHandle,'You pressed the button Hello', 'Hello',MB_OK or MB_ICONINFORMATION);
          WM_DESTROY: ReleaseResources;
      end;
      Result:=DefWindowProc(hWnd,Msg,wParam,lParam);
    end;

    begin
      //create the window
      LWndClass.hInstance := hInstance;
      with LWndClass do
        begin
          lpszClassName := 'MyWinApiWnd';
          Style         := CS_PARENTDC or CS_BYTEALIGNCLIENT;
          hIcon         := LoadIcon(hInstance,'MAINICON');
          lpfnWndProc   := @WindowProc;
          hbrBackground := COLOR_BTNFACE+1;
          hCursor       := LoadCursor(0,IDC_ARROW);
        end;

      RegisterClass(LWndClass);
      hMainHandle := CreateWindow(LWndClass.lpszClassName,'Window Title', WS_CAPTION or WS_MINIMIZEBOX or WS_SYSMENU or WS_VISIBLE, (GetSystemMetrics(SM_CXSCREEN) div 2)-190,
          (GetSystemMetrics(SM_CYSCREEN) div 2)-170, 386,200,0,0,hInstance,nil);

      //Create the fonts to use
      hFontText := CreateFont(-14,0,0,0,0,0,0,0,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,VARIABLE_PITCH or FF_SWISS,'Tahoma');
      hFontButton := CreateFont(-14,0,0,0,0,0,0,0,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,VARIABLE_PITCH or FF_SWISS,'Tahoma');

      //create the static
      hStatic:=CreateWindow('Static','This is static text, like a TLabel',WS_VISIBLE or WS_CHILD or SS_LEFT, 10,10,360,44,hMainHandle,0,hInstance,nil);
      SendMessage(hStatic,WM_SETFONT,hFontText,0);

      //create the edit
      hEdit:=CreateWindowEx(WS_EX_CLIENTEDGE,'Edit','This a Edit like and TEdit', WS_VISIBLE or WS_CHILD or ES_LEFT or ES_AUTOHSCROLL,10,35,360,23,hMainHandle,0,hInstance,nil);
      SendMessage(hEdit,WM_SETFONT,hFontText,0);

      //create the button
      hButton:=CreateWindow('Button','Hello', WS_VISIBLE or WS_CHILD or BS_PUSHBUTTON or BS_TEXT, 10,130,100,28,hMainHandle,0,hInstance,nil);
      SendMessage(hButton,WM_SETFONT,hFontButton,0);

      //message loop
      while GetMessage(Msg,0,0,0) do
      begin
        TranslateMessage(Msg);
        DispatchMessage(Msg);
      end;

    end.
     
    aLLeXUs и sergey3695 нравится это.
  7. Ветеран

    Регистрация:
    4 мар 2012
    Сообщения:
    143
    Симпатии:
    73
    Mailchik, большое спасибо за наглядный пример. Я создал консольное приложение и заменил код на Ваш, в итоге получил exe размером 30 кб (после пакера 14 кб), чего я даже не ожидал... Только вот консольное окно тоже появилось.
    Наверное попробую еще более ранние версии IDE (например RAD Studio 2010) и Delphi 7. Тогда наверное и определюсь окончательно что мне нужно.

    Всем спасибо за внимание.
     
  8. Ветеран

    Регистрация:
    26 июн 2011
    Сообщения:
    66
    Симпатии:
    22
    Delphi XE по умолчанию пакует все VCL в программу. В Project-Options-Packages убери все что не используешь, если будешь юзать программу только на своем компьютере включи опцию Build With Runtime Packages. В Delphi 7 такого нет, размер ехе намного меньше.
     
  9. Ветеран

    Регистрация:
    4 мар 2012
    Сообщения:
    143
    Симпатии:
    73
    убрал все кроме двух пунктов, размер вообще не изменился
     
  10. Старожил

    Регистрация:
    22 апр 2014
    Сообщения:
    4
    Симпатии:
    1
    aLLeXUs, делал как то простой проигрыватель под андроид да ХЕ6, при том что внешние изображения не использовал вообще так размер скомпилированного апк файла был аж 15мб. следует отписать в русскоязычную поддержку программы (адекватная поддержка, да и отвечают быстро) ну или идти на киберфорум где уж точно есть профессиональные программисты нежели здесь
     
  11. Знаток Проверенный

    Регистрация:
    16 июн 2011
    Сообщения:
    345
    Симпатии:
    648
    Профессиональные программисты не парятся размером проги, и вообще по большей части они не представляют во что компилится их код. В данном аспекте как раз таки шарят дзены-любители, ибо только им это интересно.
     
    Nemko нравится это.

Поделиться этой страницей