Dr.Phoenix |
Отправлено: 22.05.2003, 14:54 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 48
|
Сама по себе форма без всякого кода и компонентов жрет дофига места если в опциях компилятора поставить Release, то размер уменьшается незначительно. Вопрос: как создать форму средствами API, чтоб потом не нее можно было компоненты наставить динамически?
|
|
Admin |
Отправлено: 22.05.2003, 18:03 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Нет
Здесь надо не смешивать понятие формы и окна.
Форма — объект, обладающий множеством свойств и методов
а окно — лишь кусок экрана
Создать с помощью API можно окно и размещать в окне
некоторые другие окна (кнопки и т.д.), но не
объекты VCL
Отсюда и размер формы
|
|
Георгий |
Отправлено: 22.05.2003, 18:35 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
место занимают рисунки, которых в ресурсах проги очень много, но что они (рисунки) там делают, причём такие, какие нигде в проге не используются я не знаю.
Проверить это можно любым редактором ресурсов и косвенно это подтверждает высокая степень сжатия exe любым упаковщиком (2-3 раза, что соответствует коэффициенту сжатия рисунков) |
|
Dr.Phoenix |
Отправлено: 27.05.2003, 23:47 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 48
|
1) не знаю скока там рисунков, но если у билдеровской пустой формы поубирать все рисунки ResHack'ом, которые он тока видит, и скомпилить в режиме Release со всеми dll, то весить она будет 437 kb, а если то же самое сделать с формой, скомпиленной на VC++.NET, тока не убирая картинки, т.к. лень было, то она будет весить 157kb.
2) ладно, если форма и окно это не одно и то же, то как создать форму ф-циями API, или еще как-нить, но чтоб она не хавала стока места, ну и чтоб можно было на нее компоненту поставить?
|
|
Георгий |
Отправлено: 28.05.2003, 09:45 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
Можно создать приложение, основанное на диалоговых окнах:
пример на asm — окно описывается в файле ресурсов:
CODE |
#define DS_CENTER 0x0800L
#define DS_MODALFRAME 0x080L
#define DS_3DLOOK 0x080L
#define WS_MINIMIZEBOX 0x00020000L
#define WS_SYSMENU 0x00080000L
#define WS_VISIBLE 0x10000000L
#define WS_OVERLAPPED 0x00000000L
#define WS_CAPTION 0xC00000L
#define IDC_EXIT 2
ZZZ_Dialog DIALOG 10,10,205,30
STYLE DS_CENTER | DS_MODALFRAME | DS_3DLOOK | WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED
CAPTION "Cool program"
BEGIN
PUSHBUTTON "E&xit",IDC_EXIT,141,8,52,13
END
|
сама программа:
CODE |
includelib d:\workpl\watcom\lib386\nt\kernel32.lib; includelib d:\workpl\watcom\lib386\nt\shell32.lib
includelib d:\workpl\watcom\lib386\nt\user32.lib
extrn __imp__GetModuleHandleA@4 :dword
extrn __imp__ExitProcess@4 :dword
extrn __imp__DialogBoxParamA@20 :dword
extrn __imp__EndDialog@8 :dword
GetModuleHandle equ __imp__GetModuleHandleA@4
ExitProcess equ __imp__ExitProcess@4
DialogBoxParam equ __imp__DialogBoxParamA@20
EndDialog equ __imp__EndDialog@8
WM_INITDIALOG equ 110h
WM_CLOSE equ 10h
.386
.model flat
.data
dialog_name db "ZZZ_Dialog",0
.code
_start:
xor ebx,ebx
push ebx
call GetModuleHandle
push ebx
push offset dialog_proc
push ebx
push offset dialog_name
push eax
call DialogBoxParam
push ebx
call ExitProcess
;вызывается окном диалога
dialog_proc proc near
push ebp
mov ebp,esp
dp_hWnd equ dword ptr [ebp+08h];идентификатор диалога
dp_uMsg equ dword ptr [ebp+0Ch];номер сообщения
dp_wParam equ dword ptr [ebp+10h];первый параметр
dp_lParam equ dword ptr [ebp+14h];второй параметр
mov ecx,dp_hWnd
mov eax,dp_uMsg
cmp eax,WM_CLOSE
jne not_close
push 0
push ecx
call EndDialog
xor eax,eax
inc eax
leave
ret 16
not_close:
xor eax,eax
leave
ret 16
dialog_proc endp
end _start
|
строки для компиляции
wasm main.asm
wrc /r /bt=nt dial.rc
wlink file *.obj res *.res form windows nt op c
скомпилированная имеет размер 3 584 байт
с учётом того, что большинство VCL компонентов является банальной обьектной обёрткой для элементов Windows GUI, то такой подход позволит создавать простые приложения, которые занимают значительно меньше места на диске и в ОП.
кстати в Windows GUI есть следующие обьекты:
кнопки, окна, диалоговые окна, полосы прокрутки, меню, акселлераторы (горячие кнопки), функции для рисования графических примитивов, строка состояния, спин (аналог CSpinEdit), трекбар (разновидность полосы прокрутки), индикатор (ProgressBar), окна подсказок (Hint), списки изображений (ImageList?), закладки, окно просмотри деревьев
Вроде ничего не забыл... |
|
Admin |
Отправлено: 28.05.2003, 15:09 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
QUOTE (Dr.Phoenix @ 27 May 2003, 23:47) | 2) ладно, если форма и окно это не одно и то же, то как создать форму ф-циями API, или еще как-нить, но чтоб она не хавала стока места, ну и чтоб можно было на нее компоненту поставить? |
Форма — это объект (компонент) VCL, а окно — это объект Windows
На окно можно "поставить" другое окно (кнопку и т.д.) и описать все
свойства и методы этого другого окна, но не как объект VCL
"Как можно создать форму функциями API" — по-другому этот вопрос
звучит так — "как создать объект VCL ?", а это уже к Borland,
и разработчикам VCL, которые эту библиотеку и создали,
если существует исходный код VCL — надо смотреть там.
|
|
Георгий |
Отправлено: 28.05.2003, 18:06 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
Вот, что я вспомнил — где то 2-3 года назад мне приятель приносил статью о "кодоэкономичной библиотеки", призванной заменить VCL т.к. в ней якобы реализованы теже компоненты, что и в VCL, но они занимают значительно меньше места и в ОП и на диске. Статья "погибла" во время очередной чистки диска...
Нашёл статью
сайт автора тут
когда попробуете скажите как она
Отредактировано Георгий — 28 May 2003, 21:30 |
|
Dr.Phoenix |
Отправлено: 29.05.2003, 09:56 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 48
|
QUOTE (Георгий @ 28 May 2003, 18:06) | Вот, что я вспомнил — где то 2-3 года назад мне приятель приносил статью о "кодоэкономичной библиотеки", призванной заменить VCL т.к. в ней якобы реализованы теже компоненты, что и в VCL, но они занимают значительно меньше места и в ОП и на диске. Статья "погибла" во время очередной чистки диска...
Нашёл статью
сайт автора тут
когда попробуете скажите как она |
библиотека, конечно, клевая, если верить тому, что про нее написанно, но она же для делфи! Или может ее можно как-нить к билдеру приспособить?
|
|
Admin |
Отправлено: 29.05.2003, 10:53 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Если нужен компактный код — надо переходить на Visual C++
Интресный вопрос — если с библиотекой KOL так все хорошо,
то можно-ли на форме KOL размещать объекты VCL ?
Сомневаюсь. А это значит — или VCL или KOL.
Что касается самой идеи и разработки такой библиотеки -
конечно идея очень хорошая, молодцы что сделали
Только сама идея экономии места уже не актуальна, и с каждым днем...
а через года 2... даже представить трудно самый маленький
размер выпускаемого винчестера или планки оперативной памяти.
А идея понравилась !
Кроме того из FAQ по KOL:
QUOTE |
: А будет (есть ли уже) ли KOL под Builder ?
На данный момент такого НЕТ! KOLnMCK — Delphi only and for... кххх... В смысле пока только под Дельфи. Насчет будущего — насколько я знаю создатель (Владимир Кладов — не путать с Создатель не собирается портировать KOLnMCK на Builder, Kylix, Lazarus... и т.д. Ему это не надо.
|
Так что — УВЫ ! Что-то не очень хочется переходить на Delphi.
http://delphikol.narod.ru/
и как пишет автор: "Если у вас есть вопросы и предложения, пишите мне!!!" (delphikol@narod.ru)
|
|
Dr.Phoenix |
Отправлено: 29.05.2003, 11:11 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 48
|
На Visual C++ код, конечно, компактнее, но не настолько. Если в KOL самое маленькое приложение будет весить 14 кб (если верить написанному), то в VC не меньше 150 кб
|
|
Георгий |
Отправлено: 29.05.2003, 11:38 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
QUOTE (Admin @ 29 May 2003, 10:53) | Если нужен компактный код — надо переходить на Visual C++ |
Сомневаюсь, что он (код) с использованием MFC будет компактным... |
|
Alexander |
Отправлено: 04.06.2003, 12:53 |
|
Не зарегистрирован
|
Господа, вам чего, делать нечего — писать на API VCL-евские формы ?
Умеете динамически создавать — ну и прекрасно.
Кстати, один hint по поводу ресурсов — можно например одну форму сделать как шаблон для всех, а при динамическом создании остальных (как с MDI children) вы уже задает все свойства. В ресурсах будет жить только одна исходная.
А вообще, кого сильно волнует размер кода ?
Вы что, на дискетах программы носите ? |
|
Георгий |
Отправлено: 04.06.2003, 16:48 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
тут дело принципа — хочу маленький размер и всё!
а обьективной необходимости в этом нет — прогу на BCB уже можно в промышленное оборудование во flash зашивать — 16Mbit не много стоит (по сравнению со стоимостью оборудования и ПО).
Другое дело, что "за державу обидно" — прога ничего не делает (пустое окно) а место жрёт, но и тут есть обратная сторона — когда прога и печатает, картинки красивые показывает, "принимает" решения, общается с операторами а занимает каких-то жалких 2MB и при добавлении новых функций практически не увеличивается в размере — заказчик начинает думать, что его дурят — деньги как бы низачто берут... А если не дай Бог её оптимизируешь и чем-то упакуешь и станет она на 486-80 с 32 RAM бегать быстрее, чем у конкурентов на P4 с 256MB RAM и приэтом и надёжнее и проще в обслуживании и стоит дешевле и сделана была в 2-3 раза быстрее — начинают коситься — типа що цэ за х*уйня? как такое может быть — где подвох — и идут к конкурентам покупать монстрообразное ПО...
Что то — я от темы отклонился... |
|
|