![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Компоненты на api (или еще как-нибудь) [D7, WinXP]
Дмитрий_177 © (2006-02-01 20:47:00)Написал я несколько своих компонентов, еще давно, но теперь я изучаю программирование на чистом api, чтобы размер программы был небольшим, по сравнению с использованием VCL. Так вот вопрос в том, что как мне вставить те компоненты, которые я создал? Точнее даже не вставить, а переписать их чтоли... на api... такое вообще реально? если они используют обработку сообщений "CM_...", "WM_...". Или придется всетаки подключать модудь с компонентом и программа "поползет" в размере...?
TUser (2006-02-17 14:16:00) [1]> А как же делают программы на api? как туда кнопочки вставляют, Edit-ы и другие компоненты?
Компонент - понятие Delphi. Система про них ничего не знает. Система знает про окна. Кнопка - это окно, и эдит - это окно, и все остальное. У окна есть оконная процедура, которая обрабатывает приходящие данному окну сообщения (эй, тут юзер кнопку давит). И окно что-то делает в ответ. Это все так выглядит с точки зрения Windows.
В Delphi есть такое понятие - компонент. Это объект класса TComponent. И ничего больше. Просто куча кода и данных в памяти. Некоторые компоненты создают windows-окно и работают с ним. Назначают оконную процедуру. Шлют туда некоторые сообщения (изменяй размер и ползи вон туда). Предоставляют процедуры обработки некоторых сообщенией.
Компонент должен взаимодействовать с другими компонентами, например с Parent'ом. Если ты пишешь API-проложение, то у тебя нет формы. У тебя есть окно, а класса TForm нет. И бросить на эту форму ничего нельзя. Никакую кнопку и никакой эдит. Надо создавать окно, которое будет кнопкой, и окно, которое будет эдитом. Самому назначать им оконные процедуры. Реализовывать обработку сообщений.
Кратно говоря, так.
> А вот по поводу размера: надо написать например будильник, который будет постоянно запущен на компе, чтобы он "прозвонил" вовремя ))) если exe будет например мегабайт занимать, я думаю что не очень как-то будет тратить мегабайт оперативки на какой-то будильник :) т.к. при запуске программы она записывается в оперативную память, ведь так?
Exe не грузится в память целиком. Он будет занимать существенно меньше. Кроме того, не все, что загружено будет физически находится в оперативной памяти - что то на диск скинется.
> Значит, грубо говоря, получается так, что если программа постоянно, имеется ввиду продолжительное время, будет находиться в памяти(к примеру тот же будильник) то ее лучше сжать ASPack-ом. А если программа "разовая", т.е. какойнибудь калькулятор, т.е. посчитал и выключил, то ее лечше не сжимать. Или я все напутал? :-)
Принципиально не верно. Сжатая программа как раз загрузится в память полностью, и будет в оперативке занимать больше места, чем несжатая.
> И еще... Так ведь при написании программы с VCL, в exe-шник запихивается многое ненужное, свойства которые не используем, события методы... Я тут так подумал, а есть какиенибудь компоненты "облегченные" так сказать...))) Где минимум свойств методов и т.д..
Есть библиотека KOL. Там нет виртуальных методов, поэтому многого ненужного в exe не оказывается.
> Сжатие всякими аспаками может нарушить этот механизм и, возможно, системе придется загрузить в физическую память весь образ программы.
Не может, а обязательно нарушит. Или может у меня старая версия?
Извините, многое повторил.
Amoeba (2006-02-03 15:10:00) [2]
> Сжатие всякими аспаками может нарушить этот механизм и,
> возможно, системе придется загрузить в физическую память
> весь образ программы.
Не просто может, а нарушает. Загружается весь образ программы и не иначе.
> Правда авторы аспак клянутся что они с этим борются и все
> будет хорошо.
Как-то в это трудно поверить...
homm (2006-02-02 23:51:00) [3]
> homm © (02.02.06 00:46) [21]
Слепец ;)
Дмитрий_177 (2006-02-02 23:43:00) [4]Я извеняюсь конечно... но где мне эти KOL-компоненты найти? на какой они закладке в Delphi или где вообще?
Sergey Masloff (2006-02-02 21:09:00) [5]Дмитрий_177 (02.02.06 21:05) [32]
Есть KOL см. в списке вверху. Но только смысла нет ИМХО
Sergey Masloff (2006-02-02 21:08:00) [6]Нет сжимать вообще смысла нет. Просто при "загрузке" программа не загружается полностью а постранично. Этим управляет ОС. Допустим (очень приблизительно) загружена 1 страница (4кб) и выполняется код который обращается к другой странице. Той еще нет в памяти, возникает исключение обрабатываемое ОС при обработке которого подгрузится нужная страница и код в ней выполнится прозрачно для программы. Если страница долгое время не использовалась ее вытеснит из физической памяти. Это случай с обычной программой.
Сжатие всякими аспаками может нарушить этот механизм и, возможно, системе придется загрузить в физическую память весь образ программы. Правда авторы аспак клянутся что они с этим борются и все будет хорошо.
Но если все как было раньше то сэкономить можно только место на диске (а кому оно нужно?)
Дмитрий_177 (2006-02-02 21:05:00) [7]И еще... Так ведь при написании программы с VCL, в exe-шник запихивается многое ненужное, свойства которые не используем, события методы... Я тут так подумал, а есть какиенибудь компоненты "облегченные" так сказать...))) Где минимум свойств методов и т.д..
Дмитрий_177 (2006-02-02 20:57:00) [8]Значит, грубо говоря, получается так, что если программа постоянно, имеется ввиду продолжительное время, будет находиться в памяти(к примеру тот же будильник) то ее лучше сжать ASPack-ом. А если программа "разовая", т.е. какойнибудь калькулятор, т.е. посчитал и выключил, то ее лечше не сжимать. Или я все напутал? :-)
Игорь Шевченко (2006-02-02 15:04:00) [9]homm © (02.02.06 14:26) [29]
Пропустил фразу "занимаемая приложением".
homm (2006-02-02 14:26:00) [10]Ну и кчему этот лекбиз? Точны в терминах?
Тогда это вот что:
> К тому же, оперативная память в Windows - ресурс крайне
> непостоянный
Бывает зайдеш в свойства Мой компьютера - там только 100мб ОЗУ, а зайдеш через часок уже 200 ;)
ЗЫ В соем глазу... (с)
Игорь Шевченко (2006-02-02 14:12:00) [11]homm © (02.02.06 13:54) [27]
Нет, к стыду моему, не понял. Резидентными программами называются те, которые постоянно присутствуют в памяти. Таковых очень немного, часть ядра, HAL.
К тому же, оперативная память в Windows - ресурс крайне непостоянный и его использование в качестве критерия можно не принимать.
homm (2006-02-02 13:54:00) [12]
> Игорь Шевченко © (02.02.06 13:48) [25]
>
>
> > для резидентных программ - точно
>
>
> В мире Windows нету резидентных программ
>
Ну вы поняли что я имею ввиду ;)
homm (2006-02-02 13:54:00) [13]2ASoft
> если очень хочется маленький размер и очень мало писать
> ручками, то можно юзать HIAsm :)
А как ты думаешь на чем же основан HiAsm? Хотя лично я считая данный проект мягко говоря извращеным.
> Нет, если ты не используешь ересь вроде ASPack :-) На практике
> в память в Windows записываются только те страницы кода,
> которые исполняются
В том то и дело что из всего бреда, что содержится в 350кб VCL *.exe реально нужно килобайт патьдесят. Все остальное мусор, от которого к сожалению нельзя отказатся.
Игорь Шевченко (2006-02-02 13:48:00) [14]
> для резидентных программ - точно
В мире Windows нету резидентных программ
Дмитрий_177 (2006-02-02 13:22:00) [15]Тут ASPack проскочил... Как я понял его не рекомендуется использовать?
ASoft (2006-02-02 10:37:00) [16]если очень хочется маленький размер и очень мало писать ручками, то можно юзать HIAsm :)
Германн (2006-02-02 01:48:00) [17]
> Дмитрий_177 (01.02.06 21:02) [4]
>
> А вот по поводу размера: надо написать например будильник,
> который будет постоянно запущен на компе, чтобы он "прозвонил"
> вовремя ))) если exe будет например мегабайт занимать, я
> думаю что не очень как-то будет тратить мегабайт оперативки
> на какой-то будильник :)
А что ты подразумеваешь под "оперативкой"?
homm (2006-02-02 00:46:00) [18]Начет API - это книжку какую нибудь надо причитать
А насчет
> теперь я изучаю программирование на чистом api, чтобы размер
> программы был небольшим, по сравнению с использованием VCL.
это правильно (для резидентных программ - точно). Только идею с API тоже нужно оставить. То что тебе нужно - KOL ( http://bonanzas.rinet.ru/) и соседний форум
http://www.delphimaster.ru/cgi-bin/forum.pl?n=10
> Кефир87 ©
> Меня это возмутило чеснгаваря 8) Запусти диспетчер задач
> и псмотри сколько занимает, ну например ася твоя или еще
> что-нибудь резедентное 8)
лично у меня из резидентов:
(имя) (память) (вирт.п.)
amoumain.exe (дрова мыши) 464/848 кб
taskmgr.exe 720/1016 кб (как раз мегабайт)
winamp ;) 2728/4908 кб но не считается. У него функций явно побольше чем у будильника
DrPass (2006-02-01 23:14:00) [19]
> при запуске программы она записывается в оперативную память,
> ведь так?
Нет, если ты не используешь ересь вроде ASPack :-) На практике в память в Windows записываются только те страницы кода, которые исполняются
> А вот посылать кто посылает эти сообщения, если честно не
> знаю...
Это внутренние сообщения VCL. Нет компонент VCL, нет и этих сообщений.
Кефир87 (2006-02-01 23:08:00) [20]
> я думаю что не очень как-то будет тратить мегабайт оперативки
> на какой-то будильник :)
Меня это возмутило чеснгаваря 8) Запусти диспетчер задач и псмотри сколько занимает, ну например ася твоя или еще что-нибудь резедентное 8)