Форум: "Начинающим";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];
ВнизКомпоненты на api (или еще как-нибудь) Найти похожие ветки
← →
Дмитрий_177 (2006-02-01 20:47) [0]Написал я несколько своих компонентов, еще давно, но теперь я изучаю программирование на чистом api, чтобы размер программы был небольшим, по сравнению с использованием VCL. Так вот вопрос в том, что как мне вставить те компоненты, которые я создал? Точнее даже не вставить, а переписать их чтоли... на api... такое вообще реально? если они используют обработку сообщений "CM_...", "WM_...". Или придется всетаки подключать модудь с компонентом и программа "поползет" в размере...?
← →
Rouse_ © (2006-02-01 20:54) [1]Компонент и АПИ... хм... Мысль конечно замечательная, но применима только с точки зрения написания компонента (что есть правильно), но не для использования в приложении не опирающемся на VCL.
Похали-ка к начинающим :)
← →
Rouse_ © (2006-02-01 20:57) [2]Вдогонку, а зачем размер то программы маленький? Сейчас век выделенок и жестких дисков по 200-300 гигобайт вроде как.
В мастера Демосцены без знания ассемблера тоже лезть не стоит...
ЗЫ: CM_... сообщений в АПИ нет...
← →
Дмитрий_177 (2006-02-01 20:58) [3]А как же делают программы на api? как туда кнопочки вставляют, Edit-ы и другие компоненты?
← →
Дмитрий_177 (2006-02-01 21:02) [4]А вот по поводу размера: надо написать например будильник, который будет постоянно запущен на компе, чтобы он "прозвонил" вовремя ))) если exe будет например мегабайт занимать, я думаю что не очень как-то будет тратить мегабайт оперативки на какой-то будильник :) т.к. при запуске программы она записывается в оперативную память, ведь так?
← →
Sergey Masloff (2006-02-01 21:06) [5]Дмитрий_177 (01.02.06 21:02) [4]
>т.к. при запуске программы она записывается в оперативную память, ведь так?
Нет
>А как же делают программы на api?
Ну кнопочки это всего лишь окна специального вида. Так что как обычно CreateWindow()....
← →
Дмитрий_177 (2006-02-01 21:11) [6]Хорошо.. а как тогда тотже ListBox?
← →
Sergey Masloff (2006-02-01 21:16) [7]То же самое.
← →
Sergey Masloff (2006-02-01 21:19) [8]На всякий случай
BUTTON
COMBOBOX
EDIT
LISTBOX
RICHEDIT
RICHEDIT_CLASS
SCROLLBAR
STATIC
Это все предопределенные классы окон которые предоставляет Windows
Ну еще MDICLIENT но это отдельная песня
← →
Gero © (2006-02-01 21:26) [9]http://excode.ru/arttopic40.html?ex=611fc40ee631363a2e72402b24e41aee
← →
Zeqfreed © (2006-02-01 21:40) [10]Список контролов с описаниями и примерами использования:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/wincontrols.asp
← →
Дмитрий_177 (2006-02-01 21:44) [11]Т.е. получается так, что на api можно сделать программу только со стандартными компонентами, включенные в windows? А если со своими компонентами(они для скинообразной формы) то придется включать в программу модули этих компонентов(они VCL)?
← →
begin...end © (2006-02-01 21:45) [12]> А как же делают программы на api? как туда кнопочки вставляют,
> Edit-ы и другие компоненты?
Ресурсы
← →
Zeqfreed © (2006-02-01 21:53) [13]Дмитрий_177 (01.02.06 21:44) [11]
Можно отрисовывать что угодно, как угодно и, практичеки, где угодно посредством API-функций.
← →
Дмитрий_177 (2006-02-01 22:03) [14]А как тогда отлавливать сообщения CM...? они помоему Борландовские в VCL
← →
Sergey Masloff (2006-02-01 22:08) [15]Да отлавливать без проблем как и любое сообщение. А вот посылать кто их будет?
← →
Zeqfreed © (2006-02-01 22:11) [16]Дмитрий_177 (01.02.06 22:03) [14]
У тебя в голове каша. Не нужно смешивать WinAPI и VCL. Считай, что VCL — это надстройка над WinAPI. Если пишешь программу на WinAPI, то не надо пытаться примешать туда VCL, используй стандартные механизмы, сообщение и все остальное. В MSDN это все довольно подробно описано, а так же есть множество примеров, на Delphi в том числе.
← →
Дмитрий_177 (2006-02-01 22:12) [17]Я ловлю CM_MOUSEENTER при наведении курсора на компонент, CM_MOUSELEAVE когда курсор выходит за пределы компоненты и т.д. А вот посылать кто посылает эти сообщения, если честно не знаю...
← →
Sergey Masloff (2006-02-01 22:39) [18]Дмитрий_177 (01.02.06 22:12) [17]
Собственно говоря, их даже не посылают а делают Perform() см. Forms.pas
← →
Кефир87 © (2006-02-01 23:08) [19]
> я думаю что не очень как-то будет тратить мегабайт оперативки
> на какой-то будильник :)
Меня это возмутило чеснгаваря 8) Запусти диспетчер задач и псмотри сколько занимает, ну например ася твоя или еще что-нибудь резедентное 8)
← →
DrPass © (2006-02-01 23:14) [20]
> при запуске программы она записывается в оперативную память,
> ведь так?
Нет, если ты не используешь ересь вроде ASPack :-) На практике в память в Windows записываются только те страницы кода, которые исполняются
> А вот посылать кто посылает эти сообщения, если честно не
> знаю...
Это внутренние сообщения VCL. Нет компонент VCL, нет и этих сообщений.
← →
homm © (2006-02-02 00:46) [21]Начет 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 кб но не считается. У него функций явно побольше чем у будильника
← →
Германн © (2006-02-02 01:48) [22]
> Дмитрий_177 (01.02.06 21:02) [4]
>
> А вот по поводу размера: надо написать например будильник,
> который будет постоянно запущен на компе, чтобы он "прозвонил"
> вовремя ))) если exe будет например мегабайт занимать, я
> думаю что не очень как-то будет тратить мегабайт оперативки
> на какой-то будильник :)
А что ты подразумеваешь под "оперативкой"?
← →
ASoft (2006-02-02 10:37) [23]если очень хочется маленький размер и очень мало писать ручками, то можно юзать HIAsm :)
← →
Дмитрий_177 (2006-02-02 13:22) [24]Тут ASPack проскочил... Как я понял его не рекомендуется использовать?
← →
Игорь Шевченко © (2006-02-02 13:48) [25]
> для резидентных программ - точно
В мире Windows нету резидентных программ
← →
homm © (2006-02-02 13:54) [26]2ASoft
> если очень хочется маленький размер и очень мало писать
> ручками, то можно юзать HIAsm :)
А как ты думаешь на чем же основан HiAsm? Хотя лично я считая данный проект мягко говоря извращеным.
> Нет, если ты не используешь ересь вроде ASPack :-) На практике
> в память в Windows записываются только те страницы кода,
> которые исполняются
В том то и дело что из всего бреда, что содержится в 350кб VCL *.exe реально нужно килобайт патьдесят. Все остальное мусор, от которого к сожалению нельзя отказатся.
← →
homm © (2006-02-02 13:54) [27]
> Игорь Шевченко © (02.02.06 13:48) [25]
>
>
> > для резидентных программ - точно
>
>
> В мире Windows нету резидентных программ
>
Ну вы поняли что я имею ввиду ;)
← →
Игорь Шевченко © (2006-02-02 14:12) [28]homm © (02.02.06 13:54) [27]
Нет, к стыду моему, не понял. Резидентными программами называются те, которые постоянно присутствуют в памяти. Таковых очень немного, часть ядра, HAL.
К тому же, оперативная память в Windows - ресурс крайне непостоянный и его использование в качестве критерия можно не принимать.
← →
homm © (2006-02-02 14:26) [29]Ну и кчему этот лекбиз? Точны в терминах?
Тогда это вот что:
> К тому же, оперативная память в Windows - ресурс крайне
> непостоянный
Бывает зайдеш в свойства Мой компьютера - там только 100мб ОЗУ, а зайдеш через часок уже 200 ;)
ЗЫ В соем глазу... (с)
← →
Игорь Шевченко © (2006-02-02 15:04) [30]homm © (02.02.06 14:26) [29]
Пропустил фразу "занимаемая приложением".
← →
Дмитрий_177 (2006-02-02 20:57) [31]Значит, грубо говоря, получается так, что если программа постоянно, имеется ввиду продолжительное время, будет находиться в памяти(к примеру тот же будильник) то ее лучше сжать ASPack-ом. А если программа "разовая", т.е. какойнибудь калькулятор, т.е. посчитал и выключил, то ее лечше не сжимать. Или я все напутал? :-)
← →
Дмитрий_177 (2006-02-02 21:05) [32]И еще... Так ведь при написании программы с VCL, в exe-шник запихивается многое ненужное, свойства которые не используем, события методы... Я тут так подумал, а есть какиенибудь компоненты "облегченные" так сказать...))) Где минимум свойств методов и т.д..
← →
Sergey Masloff (2006-02-02 21:08) [33]Нет сжимать вообще смысла нет. Просто при "загрузке" программа не загружается полностью а постранично. Этим управляет ОС. Допустим (очень приблизительно) загружена 1 страница (4кб) и выполняется код который обращается к другой странице. Той еще нет в памяти, возникает исключение обрабатываемое ОС при обработке которого подгрузится нужная страница и код в ней выполнится прозрачно для программы. Если страница долгое время не использовалась ее вытеснит из физической памяти. Это случай с обычной программой.
Сжатие всякими аспаками может нарушить этот механизм и, возможно, системе придется загрузить в физическую память весь образ программы. Правда авторы аспак клянутся что они с этим борются и все будет хорошо.
Но если все как было раньше то сэкономить можно только место на диске (а кому оно нужно?)
← →
Sergey Masloff (2006-02-02 21:09) [34]Дмитрий_177 (02.02.06 21:05) [32]
Есть KOL см. в списке вверху. Но только смысла нет ИМХО
← →
Дмитрий_177 (2006-02-02 23:43) [35]Я извеняюсь конечно... но где мне эти KOL-компоненты найти? на какой они закладке в Delphi или где вообще?
← →
homm © (2006-02-02 23:51) [36]
> homm © (02.02.06 00:46) [21]
Слепец ;)
← →
Amoeba © (2006-02-03 15:10) [37]
> Сжатие всякими аспаками может нарушить этот механизм и,
> возможно, системе придется загрузить в физическую память
> весь образ программы.
Не просто может, а нарушает. Загружается весь образ программы и не иначе.
> Правда авторы аспак клянутся что они с этим борются и все
> будет хорошо.
Как-то в это трудно поверить...
← →
TUser © (2006-02-17 14:16) [38]> А как же делают программы на api? как туда кнопочки вставляют, Edit-ы и другие компоненты?
Компонент - понятие Delphi. Система про них ничего не знает. Система знает про окна. Кнопка - это окно, и эдит - это окно, и все остальное. У окна есть оконная процедура, которая обрабатывает приходящие данному окну сообщения (эй, тут юзер кнопку давит). И окно что-то делает в ответ. Это все так выглядит с точки зрения Windows.
В Delphi есть такое понятие - компонент. Это объект класса TComponent. И ничего больше. Просто куча кода и данных в памяти. Некоторые компоненты создают windows-окно и работают с ним. Назначают оконную процедуру. Шлют туда некоторые сообщения (изменяй размер и ползи вон туда). Предоставляют процедуры обработки некоторых сообщенией.
Компонент должен взаимодействовать с другими компонентами, например с Parent"ом. Если ты пишешь API-проложение, то у тебя нет формы. У тебя есть окно, а класса TForm нет. И бросить на эту форму ничего нельзя. Никакую кнопку и никакой эдит. Надо создавать окно, которое будет кнопкой, и окно, которое будет эдитом. Самому назначать им оконные процедуры. Реализовывать обработку сообщений.
Кратно говоря, так.
> А вот по поводу размера: надо написать например будильник, который будет постоянно запущен на компе, чтобы он "прозвонил" вовремя ))) если exe будет например мегабайт занимать, я думаю что не очень как-то будет тратить мегабайт оперативки на какой-то будильник :) т.к. при запуске программы она записывается в оперативную память, ведь так?
Exe не грузится в память целиком. Он будет занимать существенно меньше. Кроме того, не все, что загружено будет физически находится в оперативной памяти - что то на диск скинется.
> Значит, грубо говоря, получается так, что если программа постоянно, имеется ввиду продолжительное время, будет находиться в памяти(к примеру тот же будильник) то ее лучше сжать ASPack-ом. А если программа "разовая", т.е. какойнибудь калькулятор, т.е. посчитал и выключил, то ее лечше не сжимать. Или я все напутал? :-)
Принципиально не верно. Сжатая программа как раз загрузится в память полностью, и будет в оперативке занимать больше места, чем несжатая.
> И еще... Так ведь при написании программы с VCL, в exe-шник запихивается многое ненужное, свойства которые не используем, события методы... Я тут так подумал, а есть какиенибудь компоненты "облегченные" так сказать...))) Где минимум свойств методов и т.д..
Есть библиотека KOL. Там нет виртуальных методов, поэтому многого ненужного в exe не оказывается.
> Сжатие всякими аспаками может нарушить этот механизм и, возможно, системе придется загрузить в физическую память весь образ программы.
Не может, а обязательно нарушит. Или может у меня старая версия?
Извините, многое повторил.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];
Память: 0.56 MB
Время: 0.013 c