Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.05;
Скачать: CL | DM;

Вниз

Компоненты на 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;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.037 c
2-1139933356
Yeg
2006-02-14 19:09
2006.03.05
БД для Интернета


6-1132797718
Bomm
2005-11-24 05:01
2006.03.05
Как узнать текущию рабочию группу?


2-1139850113
YK
2006-02-13 20:01
2006.03.05
Какие ещё библиотеки??? И в чем дело??


1-1138789069
FreeAdvisor
2006-02-01 13:17
2006.03.05
Заголовок сообщения на языке по умолчанию ОСи


2-1139078593
Человек
2006-02-04 21:43
2006.03.05
Сайт без браузера