-
Пример такой: есть форма в ресурсе на ней, к примеру, флажёк (может быть что угодно). Как узнать хендл флажка зная только его индефикатор, например #2001. Нужно для того чтобы отослать сообщение этому флажку, но для отправки ведь нужно знать его хендл, FindWindow не подойдёт (класс элемента неизвестен).
-
форма или диалог? это разные понятия.
-
Диалог. Но я даю ведь FindResource есть, сто раз мимо прошёл и не заметил, хотя использовал эту функцию много раз.
-
GetDlgItem делает именно то, что тебе нужно. Там еще есть функции вида GetDlg* , может быть пригодится.
-
Спасибо то что надо. Я хочу сделать функцию AssignCtrl которая будет возвращать хендл, и чтобы потом можно было изменять свойства элементов на диалоге из ресурса обычным для Object Pascal способом.
-
> AnarchyMob © (29.10.08 15:19) [4] > чтобы потом можно было изменять свойства элементов на диалоге
Честно говоря, не думаю, что это удачная идея. Просто дублируете функционал, то же самое стандартным способом делают функции SetWindowLong(), SetWindowLongPtr() etc.
> обычным для Object Pascal способом. использование объектного паскаля (или любого другого языка/реализации) и механизмов winapi не взаимоисключает друг друга ;) там реально нет нужды огород городить ради установки и получения стиля элементов диалога, и так все достаточно понятно.
-
> использование объектного паскаля (или любого другого языка/реализации) > и механизмов winapi не взаимоисключает друг друга ;) там > реально нет нужды огород городить ради установки и получения > стиля элементов диалога, и так все достаточно понятно.
Вот я про это и говорю, я делаю библиотеку AFL (Anarchy Function Library) в которой не использую ни классов ни объектов, а просто упращаю функции WinAPI, у меня там для динамического изменения свойств компонентов используются функции и процедуры вида: Set... и Get..., например SetCaption устанавливает текст компонента, в первом параметре указываешь хендл элемента, а во втором новый текст. Вот так, а для изменения свойств компонентов из ресурсных диалогов будут использоватся процедуры и функции вида: RSet... и RGet....
-
> не использую ни классов ни объектов Весьма оригинально, т.е. ООП ваще "лесом идет"? Весьма странный подход для программирования в многозадачной среде...ну, да дело Ваше.
-
Весьма оригинально, т.е. ООП ваще "лесом идет"? Весьма странный подход для программирования в многозадачной среде...ну, да дело Ваше.Сейчас я вам всё объясню, начну с того что на данный момент я я т.с. специализируюсь на разработке ПО для WinCE (только сейчас я решил этим занятся всерьёз). Долго выбирал инструмент для написания программ, был опыт работы с MSVS 2005, Pelles C, PPL и наконец Lazarus (в сторону "басика" и "технологий будущего" типа .NET я даже не смотрел). Потом подумав "взвесив" все за к.г. и против я решил остановится на IDE Lazarus и, соответственно, языке Free Pascal. В "лазаре" я программировал используя LCL, KOL и WinAPI, после всех испытаний решил остановится на библиотеке KOL, и как-раз с её использованием я начал "ваять" своё первое приложение. Я кидал на форму (под словом кидал я подрозумеваю конечно функции New... я не использовал MCK по причине сырости "зеркал") всё новые и новые компоненты, экзешник хоть и рос, но рост проходил достаточно спокойно. Момент истины наступил тогда когда я на одну из закладок TabControlla вывел картинку (битмап), потребление оперативной памяти моей программой возрасло сразу !!! на 54 кб !!! я ***ел, у меня в памяти были свежи воспоминания о том что подобная прога с картинкой написанная в MSVS 2005 и/или Pelles C потребляла 14 кб. В этот момент моё представление о Free Pascal'e Lazarus'e & KOL коренным образом поменялось и я, в порыве отчаянья удалил "лазаря" со своего компьютера, после, немного успокоившись я понял что на Сях я писал используя только WinAPI (и нескольких классиков для вывода картинок, работы с файлами и прчей "шелухи"). Опять установив Lazarus немного настроив его я переписал весь код своей недоработанной программы на "голый" WinAPI (тоже с картинкой) какое было моё удивление когда я увидел что WinAPI'шная программа занимает в оп. памяти всего-навсего 14,9 кб (ВОТ ЭТО СУПЕР !!!) и всё работает, после этого моя вера в WinAPI только возрасла, и я наконец понял на чём нужно программировать если надо получить маленький ЕХЕ и минимальное потребление оп. памяти. P.S. Я в начале цитировал ваши слова по поводу ООП, так что, давайте подведём итоги. (LCL & VCL) использования классов, их там "туева хуча", результат: я лучше промолчу. KOL использование объектов (их там немного) результат конечно неплохой, но тоже не сахар размер программы небольшой (хотя очень сильно зависит от количества и типа контроллов (использование универсальных элементов (ListView and TreeView) предпочтительнее с точки зрения сокращения потребления оп. памяти)), но оперативки жрёт уйма (если флешку еще прикупить можно то оперативку никак). И наконец WinAPI результат: размер мизерный потребление памяти минимальное, но размер ручного кода в разы больше чем при использовании вышеуказаных вариантов, вот иммено для уменьшения ручного кода я и решил написать библиотеку построенную на "чистом" WinAPI, она из себя будет представлят как-бы сворачивание кода, а в итоге будет выходить код полностью на WinAPI. И еще, программирование на WinAPI даёт самое главное (по крайней мере для меня) качество как нативность кода, и правильное представление о программировании в целом (ведь иногда люди создающие достаточно неплохие программы в Delphi иной раз даже не знают как устроена система сообщений в Windows и что такое CALLBACK функции (паскалевский тип Stdcall)). P.S.S. Я решил отказатся от дублирования всех функций Set... & Get... для использования их с элементами управления из ресурсных диалогов (глупо ради одного параметра в каждой функции переписывать все эти функции), я лучше буду приводить все ресурсные контроллы сразу к типу HWND в секции var. P.P.S.S. Все мои вышесказаные слова справедливы в случае программирования для платформы WinCE, для Win32 может быть всё немного иначе, но WinAPI и на платформе Win32 "рулит". P.P.S.S.S. Кстати свою библиотеку AFL я пишу паралельно и для WinCE и для Win32.
-
Кстати, есть такая библиотека ACL (API Control Library) от А. Боковикова и подборка LENIN INC win32api library. Последняя стала платной, но можно найти предыдущие версии, которые распространялись на бесплатной основе. Может быть, поможет в разработке.
-
> AnarchyMob © (06.11.08 03:35) [8] > > после этого моя вера в WinAPI только возрасла, и я наконец > понял на чём нужно программировать если надо получить маленький > ЕХЕ и минимальное потребление оп. памяти.
Вообще, для разных целей - разные инструменты. На мой взгляд, если разработка вашего приложения на чистом winapi займет столько же времени и усилий, сколько разработка этого же приложения на KOL, то тогда игра стоит свеч. Иначе - все зависит от обстоятельств.
Никто не спорит с тем, что с точки зрения ресурсов выгоднее всего писать на winapi. Вопрос лишь в том, чтобы найти компромисс между производительностью/затратами на разработку. В зависимости от задачи подбирается инструмент (то бишь, библиотека).
-
Спасибо за то что подсказали что есть библиотеки WinAPI, это мне сильно поможет в разработке моей "библы". LENIN INC примерно то что я собирался делать, вот только мне всё надо для WinCE, а для Win32 я не буду создавать свою библиотеку (зачем делать то что уже есть), сконцентрируюсь только на WindowsMobile. ACL пока что-то не нашёл, но буду икать.
По поводу обстоятельств. Поймите меня, упрощение программирования до бесконечности вести нельзя, если постоянно упрощать и упрощать то делфи вскоре превратится в нечто напоминающее Multimedia Builder (среда для создания AutoRun'ов), ведь упрощение это только внешне, а что внутри, внутри сотни классов и классиков вообщем такие дебри в которые нехочется даже "суватся". А правда что The Bat на делфи написана (вообще, "фейс" делфовских прог виден за сто километров :-)
-
Извините меня, я только сейчас понял что пишу НЕМНОГО не в тему, просьба модераторам сего замечательного сайта, пожалуйста не "убивайте" тему, а (если это возможно) нежно перенесите её в конференцию WinAPI чтобы можно было продолжать эту дискуссию. Ладно?
-
Извините меня, я только сейчас понял что пишу НЕМНОГО не в тему, просьба модераторам сего замечательного сайта, пожалуйста не "убивайте" тему, а (если это возможно) нежно перенесите её в конференцию WinAPI чтобы можно было продолжать эту дискуссию. Ладно?
|