Страница: 1 | 2 |
Вопрос: TextBox'ы
Добавлено: 14.06.05 14:11
Автор вопроса: AgentFire | ICQ: 192496851
Здравствуйте!
Какой функцией можно перебрать все текстбоксы на форме и узнать что в них написано? Хэндл формы есть.
Ответы
Всего ответов: 22
Номер ответа: 1
Автор ответа:
ViktorZ
ICQ: 271202919
Вопросов: 56
Ответов: 837
Профиль | | #1
Добавлено: 14.06.05 14:41
Кстати меня тоже этот ? волновал, но это было давно и я решил эту проблему, че то там с EACH связано было. И еще помню что хендл мне не нужен был.
Номер ответа: 2
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #2
Добавлено: 14.06.05 21:32
Решил? Как??
Номер ответа: 3
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #3
Добавлено: 14.06.05 21:58
FindWindowEx OR EnumChildWindows... Если есть объект (форма), то For Each ... Next
Номер ответа: 4
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #4
Добавлено: 15.06.05 00:01
Вот эта функция мне так нужна, а Эпплман про нёё ***** то есть непонятно изьястняется, про какой то нестандартный компонент втирает... как ей пользоваться то? то есть, могу я перечислить хендлы всего, что имеет хендл и лежит на моей форме?
Номер ответа: 5
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #5
Добавлено: 15.06.05 00:49
угу, можешь...
В модуле пиши что-то такое
BOOL CALLBACK EnumChildProc(
HWND hwnd, // handle to child window
LPARAM lParam // application-defined value
);
вызывай и в качестве торого параметра - указатель на эту функцию...
Номер ответа: 6
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #6
Добавлено: 15.06.05 01:10
2 sne:
а чё писать внутри этой ф?
и желательно на вб, а то я только сегодня начал си учить и это... я пишу :
..., AddressOf Фанкшн,... и он выдаёт, что неправлильно юзаю. я его вообще этот опратор в первый раз вижу
Номер ответа: 7
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #7
Добавлено: 15.06.05 10:45
дык ты в модуль запихнул функция надеюсь ??
внутри писать код, те дается hwnd, что еще надо для счастья ?
Номер ответа: 8
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #8
Добавлено: 15.06.05 15:47
ээээ, она мне хвндешки детей пресылает туда что ли?
Номер ответа: 9
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #9
Добавлено: 15.06.05 20:54
А можно код, плиз? Я, конечно, все понимаю, но как это дело состыковать?
Номер ответа: 10
Автор ответа:
SyavX
Вопросов: 25
Ответов: 149
Профиль | | #10
Добавлено: 15.06.05 22:29
Попробуй...
Код модуля:
Private Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Public Counter As Integer
Public TextBoxTxt() As String
Dim hWin As Long, hParent As Long
Function EnumWinProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
Dim c As Byte, t As Integer
Dim sText As String
Dim sClass As String
sClass = Space$(128)
c = GetClassName(hwnd, sClass, 128)
If c > 0 Then
sClass = Left$(sClass, c)
If sClass Like "*TextBox*" Or sClass Like "*Edit*" Then
sText = Space$(128)
t = GetWindowText(hwnd, sText, 128)
'Çàíîñèì òåêñò â ìàññèâ
ReDim Preserve TextBoxTxt(Counter)
TextBoxTxt(Counter) = Left$(sText, t)
Counter = Counter + 1
End If
End If
EnumWinProc = 1
End Function
Public Function FindTextBoxes(hWndParent As Long) As Long
hParent = hWndParent
EnumChildWindows hParent, AddressOf EnumWinProc, 0&
FindTextBoxes = 1
End Function
Код формы:
Dim i As Integer
FindTextBoxes Me.hwnd
For i = 0 To Counter - 1
Form1.List1.AddItem TextBoxTxt(i)
Next i
End Sub
Номер ответа: 11
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #11
Добавлено: 16.06.05 13:19
Про EACH - актуально в случае если форма своей программы. Тогда действительно хендл не нужен. Код будет наподобие этого
Private Sub EnumText()
Dim Ctrl As Control
For Each Ctrl In Me.Controls
If TypeOf Ctrl Is TextBox Then MsgBox Ctrl.Text
Next Ctrl
End Sub
Номер ответа: 12
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #12
Добавлено: 16.06.05 15:41
Нет, форма не моего приложения. А так я бы и сам может быть допер.
Номер ответа: 13
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #13
Добавлено: 16.06.05 16:21
В таком случае хочу сделать небольшой комментарий к коду SyavX'а
If the target window is owned by the current process, GetWindowText causes a WM_GETTEXT message to be sent to the specified window or control. If the target window is owned by another process and has a caption, GetWindowText retrieves the window caption text. If the window does not have a caption, the return value is a null string. This behavior is by design. It allows applications to call GetWindowText without hanging if the process that owns the target window is hung. However, if the target window is hung and it belongs to the calling application, GetWindowText will hang the calling application.
To retrieve the text of a control in another process, send a WM_GETTEXT message directly instead of calling GetWindowText.
Надеюсь, переводить не нужно?
Номер ответа: 14
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #14
Добавлено: 16.06.05 19:11
2 SyavX
Классный код блин! прикольно видеть слова типа like в программировании
Номер ответа: 15
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #15
Добавлено: 16.06.05 22:11
Like это типа '=' ?