powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / хочу избавиться от циклов
9 сообщений из 9, страница 1 из 1
хочу избавиться от циклов
    #37884475
Горан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. такой вопрос. Есть сторонняя программа. Пытаюсь расширить ее функционал. При выборе в комбобоксе выскакивает моя форма. Проблема в том, у большинства контролов отсутствуют имена, поэтому приходится искать перебором хендлов. Более того на форме есть кнопки при которых меняется содержание одних и тех же контролов, поэтому поиск нужного идет по изменившемуся содержанию.


Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
' Module
Option Explicit
Public cmbHandle as Long
' перебираем контролы на родительской форме
Public Function EnumChildProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
    Dim h2 As Long
     sClass = Space$(mconMAXLEN)
      h2 = iGetClassName(hwnd, sClass, mconMAXLEN)
    sClass = Left$(sClass, h2)
    If sClass = "ThunderRT6ComboBox" Then start(hwnd)
    EnumChildProc = 1
 
Function start(cmbH As Long)' смотрим содержит ли этот комбобокс нужную нам строку
    Dim strFind As String
    strFind = "<Tag>"
    res = SendMessage(cmbH, CB_FINDSTRING, 0, ByVal strFind)
    If res >= 0 Then cmbHandle = cmbH
End Function

'Form1

'ищем нужный хендл
Dim handl as Long ' хендл родительского окна
 Dim index As Long, textin As Long
 Dim st As String
Do While cmbHandle = 0
        Sleep (100)
        EnumChildWindows handl, AddressOf EnumChildProc, ByVal 0&
    Loop

akk:
        index = SendMessage(cmbHandle, CB_GETCURSEL, 0, 0)
          Select Case index

           Case 0     ' Поле Tag находится на первой позиции
                  'Form1.Visible = True
            Case Else
                GoTo akk
        End Select



Все работает, но жрет дофига памяти и грузит проц. Нет ли какого-нибудь способа избежать перебора (например аналог эвентс из С++)?
...
Рейтинг: 0 / 0
хочу избавиться от циклов
    #37884972
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Горан
> Здравствуйте. такой вопрос.

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

Ы?

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
хочу избавиться от циклов
    #37885340
Горан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спассбо за ответ, но на форме есть несколько кнопок, по которым в окне появляются новые контролы и исчезают старые. Тот который нужен мне появляется только после нажатия одной из этих кнопок. В, принципе, можно пробежаться по форме, получить хендл кнопки, по нажатию которой появляется необходимы мне комбобокс и только после этого пробегаться и сохранять в структуру. но как отловить нажатие на кнопку?
...
Рейтинг: 0 / 0
хочу избавиться от циклов
    #37885355
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Горан
> но как отловить нажатие на кнопку?

Сабкласить нужную кнопку. При отлове события Click, выполнить "родной обработчик, потом найти добавленые контролы и
сохранить их для дальнейшего использования

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
хочу избавиться от циклов
    #37885411
Игорь Горбонос,

сабклассинг окна не системного класса возможен при исполнении кода в процессе-владельце дескриптора окна. То есть для применения сабкласинга придётся делать DLL injection. При том, что VB не делает "из коробки" простых DLL.

Горан,
посмотрите хуки , может, надётся что полезное.
...
Рейтинг: 0 / 0
хочу избавиться от циклов
    #37885508
QValD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Горан, так это на твоей форме контролы без имени, к которым нужно обращаться, или на чужеродной?
...
Рейтинг: 0 / 0
хочу избавиться от циклов
    #37885551
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
QValDГоран, так это на твоей форме контролы без имени, к которым нужно обращаться, или на чужеродной?ГоранЕсть сторонняя программа.
...
Рейтинг: 0 / 0
хочу избавиться от циклов
    #37885584
QValD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyQValDГоран, так это на твоей форме контролы без имени, к которым нужно обращаться, или на чужеродной?ГоранЕсть сторонняя программа.
Горан При выборе в комбобоксе выскакивает моя форма .
...
Рейтинг: 0 / 0
хочу избавиться от циклов
    #37885601
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и чо? десять раз в секунду проверяет комбобокс на наличие определенного значения
на кой этот гемор в своей программе?
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / хочу избавиться от циклов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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