Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1139815977
VadimK
2006-02-13 10:32
2006.03.05
FB1.5 Ошибка Internal gds software consistency check...


2-1140342723
Ольга
2006-02-19 12:52
2006.03.05
Сортировка набора данных, возвращаемого хранимой процедурой


3-1136904430
Vetas
2006-01-10 17:47
2006.03.05
Подскажите с хранимой процедурой


1-1138790667
ALS
2006-02-01 13:44
2006.03.05
XPManifest + LoadCursor = глюк


3-1136392871
Нютик
2006-01-04 19:41
2006.03.05
Как сложить строки с одинаковым кодом?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский