Конференция "KOL" » Как узнать хендл элемента зная его индификатор в ресурсе? [Lazarus, WinALL]
 
  • AnarchyMob © (28.10.08 22:06) [0]
    Пример такой: есть форма в ресурсе на ней, к примеру, флажёк (может быть что угодно). Как узнать хендл флажка зная только его индефикатор, например #2001. Нужно для того чтобы отослать сообщение этому флажку, но для отправки ведь нужно знать его хендл, FindWindow не подойдёт (класс элемента неизвестен).
  • Danger © (29.10.08 05:28) [1]
    форма или диалог?
    это разные понятия.
  • AnarchyMob © (29.10.08 10:36) [2]
    Диалог. Но я даю ведь FindResource есть, сто раз мимо прошёл и не заметил, хотя использовал эту функцию много раз.
  • Danger © (29.10.08 13:57) [3]
    GetDlgItem делает именно то, что тебе нужно.
    Там еще есть функции вида GetDlg* , может быть пригодится.
  • AnarchyMob © (29.10.08 15:19) [4]
    Спасибо то что надо. Я хочу сделать функцию AssignCtrl которая будет возвращать хендл, и чтобы потом можно было изменять свойства элементов на диалоге из ресурса обычным для Object Pascal способом.
  • Danger © (30.10.08 09:34) [5]

    > AnarchyMob ©   (29.10.08 15:19) [4]
    > чтобы потом можно было изменять свойства элементов на диалоге

    Честно говоря, не думаю, что это удачная идея. Просто дублируете функционал, то же самое стандартным способом делают функции SetWindowLong(), SetWindowLongPtr() etc.

    > обычным для Object Pascal способом.
    использование объектного паскаля (или любого другого языка/реализации) и механизмов winapi не взаимоисключает друг друга ;) там реально нет нужды огород городить ради установки и получения стиля элементов диалога, и так все достаточно понятно.
  • AnarchyMob © (05.11.08 19:42) [6]

    > использование объектного паскаля (или любого другого языка/реализации)
    > и механизмов winapi не взаимоисключает друг друга ;) там
    > реально нет нужды огород городить ради установки и получения
    > стиля элементов диалога, и так все достаточно понятно.


    Вот я про это и говорю, я делаю библиотеку AFL (Anarchy Function Library) в которой не использую ни классов ни объектов, а просто упращаю функции WinAPI, у меня там для динамического изменения свойств компонентов используются функции и процедуры вида: Set... и Get..., например SetCaption устанавливает текст компонента, в первом параметре указываешь хендл элемента, а во втором новый текст. Вот так, а для изменения свойств компонентов из ресурсных диалогов будут использоватся процедуры и функции вида: RSet... и RGet....
  • MTsv DN (05.11.08 19:59) [7]
    > не использую ни классов ни объектов
    Весьма оригинально, т.е. ООП ваще "лесом идет"? Весьма странный подход для программирования в многозадачной среде...ну, да дело Ваше.
  • AnarchyMob © (06.11.08 03:35) [8]
    Весьма оригинально, т.е. ООП ваще "лесом идет"? Весьма странный подход для программирования в многозадачной среде...ну, да дело Ваше.

    Сейчас я вам всё объясню, начну с того что на данный момент я я т.с. специализируюсь на разработке ПО для 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.
  • Danger © (06.11.08 05:19) [9]
    Кстати, есть такая библиотека ACL (API Control Library) от А. Боковикова и подборка LENIN INC win32api library. Последняя стала платной, но можно найти предыдущие версии, которые распространялись на бесплатной основе. Может быть, поможет в разработке.
  • Danger © (06.11.08 06:03) [10]

    > AnarchyMob ©   (06.11.08 03:35) [8]
    >
    >  после этого моя вера в WinAPI только возрасла, и я наконец
    > понял на чём нужно программировать если надо получить маленький
    > ЕХЕ и минимальное потребление оп. памяти.

    Вообще, для разных целей - разные инструменты. На мой взгляд, если разработка вашего приложения на чистом winapi займет столько же времени и усилий, сколько разработка этого же приложения на KOL, то тогда игра стоит свеч. Иначе - все зависит от обстоятельств.

    Никто не спорит с тем, что с точки зрения ресурсов выгоднее всего писать на winapi. Вопрос лишь в том, чтобы найти компромисс между производительностью/затратами на разработку. В зависимости от задачи подбирается инструмент (то бишь, библиотека).
  • AnarchyMob © (06.11.08 17:14) [11]
    Спасибо за то что подсказали что есть библиотеки WinAPI, это мне сильно поможет в разработке моей "библы". LENIN INC примерно то что я собирался делать, вот только мне всё надо для WinCE, а для Win32 я не буду создавать свою библиотеку (зачем делать то что уже есть), сконцентрируюсь только на WindowsMobile. ACL пока что-то не нашёл, но буду икать.

    По поводу обстоятельств. Поймите меня, упрощение программирования до бесконечности вести нельзя, если постоянно упрощать и упрощать то делфи вскоре превратится в нечто напоминающее Multimedia Builder (среда для создания AutoRun'ов), ведь упрощение это только внешне, а что внутри, внутри сотни классов и классиков вообщем такие дебри в которые нехочется даже "суватся". А правда что The Bat на делфи написана (вообще, "фейс" делфовских прог виден за сто километров :-)
  • AnarchyMob © (06.11.08 17:28) [12]
    Извините меня, я только сейчас понял что пишу НЕМНОГО не в тему, просьба модераторам сего замечательного сайта, пожалуйста не "убивайте" тему, а (если это возможно) нежно перенесите её в конференцию WinAPI чтобы можно было продолжать эту дискуссию. Ладно?
  • AnarchyMob © (06.11.08 17:58) [13]
    Извините меня, я только сейчас понял что пишу НЕМНОГО не в тему, просьба модераторам сего замечательного сайта, пожалуйста не "убивайте" тему, а (если это возможно) нежно перенесите её в конференцию WinAPI чтобы можно было продолжать эту дискуссию. Ладно?
 
Конференция "KOL" » Как узнать хендл элемента зная его индификатор в ресурсе? [Lazarus, WinALL]
Есть новые Нет новых   [134431   +15][b:0][p:0.001]