powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как найти компонент на фоме по имени?
25 сообщений из 50, страница 1 из 2
Как найти компонент на фоме по имени?
    #39708268
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть ли аналог дельфйскому FindComponent?
...
Рейтинг: 0 / 0
Как найти компонент на фоме по имени?
    #39708287
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как найти компонент на фоме по имени?
    #39708297
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видимо, я не совсем корректно поставил вопрос.
Надо найти компонент на форме по его имени в текстовом формате.

Т.е. должно быть не
Код: plaintext
1.
GetDlgItem(IDC_EDIT1)



а что-то вроде
Код: plaintext
1.
GetDlgItem("IDC_EDIT1")
...
Рейтинг: 0 / 0
Как найти компонент на фоме по имени?
    #39708310
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rb,

Это, конечно, всё замечательно, но первая же ассоциация с "дельфйским FindComponent" -- это билдерный FindComponent,
т.к. и тот и другой используют VCL для рисования UI.
Если ты используешь другое средство для отображения UI в C++, то самое время об этом упомянуть во избежание дальнейшей
игры в испорченный телефон.
...
Рейтинг: 0 / 0
Как найти компонент на фоме по имени?
    #39708315
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Использую embedded C++ , компилирую под WinCE
...
Рейтинг: 0 / 0
Как найти компонент на фоме по имени?
    #39708356
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbИспользую embedded C++

В нём нет ни форм, ни компонентов, обломись.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как найти компонент на фоме по имени?
    #39708366
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovSergey_rbИспользую embedded C++

В нём нет ни форм, ни компонентов, обломись.


Как нет, когда прога запускает форму, на которой лежат компоненты.
...
Рейтинг: 0 / 0
Как найти компонент на фоме по имени?
    #39708373
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скажу больше, функция

Код: plaintext
1.
GetDlgItem(IDC_EDIT1)



Находит компонент на форме

А связка
Код: plaintext
1.
GetDlgItem(IDC_EDIT1)->SetWindowText(L"sdsd");



Устанавливает значение в компоненте IDC_EDIT1
...
Рейтинг: 0 / 0
Как найти компонент на фоме по имени?
    #39708408
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbКак нет, когда прога запускает форму, на которой лежат компоненты.

А вот так. Программа показывает диалог на котором лежат окна. Диалог это не форма. Окна
это не компоненты. А если ты внимательно присмотришься к исходникам, то увидишь, что и
"IDC_EDIT1" это не имя, а макрос, разворачивающийся в числовую константу.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как найти компонент на фоме по имени?
    #39708411
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rb, в приведенном тобой примере функция WINAPI GetDlgItem работать не будет, так как, согласно документации, при её вызове должно указываться два параметра - хендл окна и целочисленный (int) идентификатор элемента.

Где ты там строку разглядел?
...
Рейтинг: 0 / 0
Как найти компонент на фоме по имени?
    #39708421
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovSergey_rbКак нет, когда прога запускает форму, на которой лежат компоненты.

А вот так. Программа показывает диалог на котором лежат окна. Диалог это не форма. Окна
это не компоненты. А если ты внимательно присмотришься к исходникам, то увидишь, что и
"IDC_EDIT1" это не имя, а макрос, разворачивающийся в числовую константу.


Значит функция FindWindow должна находить окно на диалоге?
...
Рейтинг: 0 / 0
Как найти компонент на фоме по имени?
    #39708422
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devSergey_rb, в приведенном тобой примере функция WINAPI GetDlgItem работать не будет, так как, согласно документации, при её вызове должно указываться два параметра - хендл окна и целочисленный (int) идентификатор элемента.

Где ты там строку разглядел?

GetDlgItem - перегруженная функция, работает и с одним параметром
...
Рейтинг: 0 / 0
Как найти компонент на фоме по имени?
    #39708424
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbЗначит функция FindWindow должна находить окно на диалоге?

Да.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как найти компонент на фоме по имени?
    #39708426
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devSergey_rb, в приведенном тобой примере функция WINAPI GetDlgItem работать не будет, так как, согласно документации, при её вызове должно указываться два параметра - хендл окна и целочисленный (int) идентификатор элемента.

Где ты там строку разглядел?
Вангую, что это допотопный MFC, который давно уже пора закопать.
...
Рейтинг: 0 / 0
Как найти компонент на фоме по имени?
    #39708442
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovSergey_rbЗначит функция FindWindow должна находить окно на диалоге?

Да.


Только почему-то не находит

Код: plaintext
1.
CWnd * btn_OK=FindWindow(L"Button",L"btnOK");



Возвращает NULL
...
Рейтинг: 0 / 0
Как найти компонент на фоме по имени?
    #39708444
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NekZrdb_devSergey_rb, в приведенном тобой примере функция WINAPI GetDlgItem работать не будет, так как, согласно документации, при её вызове должно указываться два параметра - хендл окна и целочисленный (int) идентификатор элемента.

Где ты там строку разглядел?
Вангую, что это допотопный MFC, который давно уже пора закопать.

Тут и вангвать нечего - Embedded C++ под WinCe
...
Рейтинг: 0 / 0
Как найти компонент на фоме по имени?
    #39708445
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbВозвращает NULL
а btnOk разве окно верхнего уровня ?
документацию хоть почитал бы...
...
Рейтинг: 0 / 0
Как найти компонент на фоме по имени?
    #39708454
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbТолько почему-то не находит

Потому-то во-первых, имя класса у батона "BUTTON", а во-вторых, на нём явно написано не
"btkOK", а, вангую, просто "OK". Почитай уже описание функций, которыми пытаешься
пользоваться.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как найти компонент на фоме по имени?
    #39708459
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cerebrumа btnOk разве окно верхнего уровня ?

Кстати, да. Там, выше, я был неправ, FindWindow не найдёт дочерние окна.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как найти компонент на фоме по имени?
    #39708471
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov"btkOK", а, вангую, просто "OK"
и не исключено, что "&OK" для hot-keys маркеров

автору надо написать обход всех окон его диалога, с помощью EnumWindows/GetWindow (для дочерних) и составить список действительных имен компонентов и их классов, если Spy++ в WinCE не работает
...
Рейтинг: 0 / 0
Как найти компонент на фоме по имени?
    #39708472
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как то совсем грустно становится, если функция ищет не по имени окна, а по сообщению в нем, которое может меняться.

Получается, что EditBox вообще нельзя найти, если пользователь ввел туда какой-то текст?
...
Рейтинг: 0 / 0
Как найти компонент на фоме по имени?
    #39708480
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rb,

просто ты изначально поставил неправильную задачу себе.

Зачем тебе нужно искать таким образом окна ?
У тебя чужой код и ты хочешь подправить их поведение ?

Если код твой собственный, то для всех окон можно задать уникальный control id на этапе создания окна
(или даже после того через SetWindowLong(Ptr)), в CreateWindow(Ex) и используя данный id точно находить то окно, которое тебе нужно

Если код чужой, то тебе ничего не остается кроме полного обхода дерева окон и поиска необходимого окна по каким-либо критериям. Как правило, имени класса и порядка расположения окна в этом дереве вполне достаточно, чтобы точно сказать что ты нашел то, что нужно. По крайней мере до следующего релиза этого софта, где разработчик может внести изменения и весь твой код придется перепроверять

Так зачем тебе это нужно?
Давай начнем хотя бы с этого
...
Рейтинг: 0 / 0
Как найти компонент на фоме по имени?
    #39708483
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey_rbПолучается, что EditBox вообще нельзя найти

А его обычно и не надо искать. При создании окна вменяемый программист обычно сохраняет
где-то его хэндл.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как найти компонент на фоме по имени?
    #39708486
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CerebrumSergey_rb,

просто ты изначально поставил неправильную задачу себе.

Зачем тебе нужно искать таким образом окна ?
У тебя чужой код и ты хочешь подправить их поведение ?

Если код твой собственный, то для всех окон можно задать уникальный control id на этапе создания окна
(или даже после того через SetWindowLong(Ptr)), в CreateWindow(Ex) и используя данный id точно находить то окно, которое тебе нужно

Если код чужой, то тебе ничего не остается кроме полного обхода дерева окон и поиска необходимого окна по каким-либо критериям. Как правило, имени класса и порядка расположения окна в этом дереве вполне достаточно, чтобы точно сказать что ты нашел то, что нужно. По крайней мере до следующего релиза этого софта, где разработчик может внести изменения и весь твой код придется перепроверять

Так зачем тебе это нужно?
Давай начнем хотя бы с этого

Все началось с того, что моя прога, написанная на Лазарусе, работавшая много лет на WinCE6, не работает под WinCe7.

Вот я ищу решения под WinCe7
...
Рейтинг: 0 / 0
Как найти компонент на фоме по имени?
    #39708490
Sergey_rb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovSergey_rbПолучается, что EditBox вообще нельзя найти

А его обычно и не надо искать. При создании окна вменяемый программист обычно сохраняет
где-то его хэндл.


Я уже подумываю о динамическом создании контролов, при запуске программы.
...
Рейтинг: 0 / 0
25 сообщений из 50, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как найти компонент на фоме по имени?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]