Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: hw.t-k.ru
 Профиль | | #3
Добавлено: 14.06.05 21:58
FindWindowEx OR EnumChildWindows... Если есть объект (форма), то For Each ... Next

Ответить

Номер ответа: 4
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #4
Добавлено: 15.06.05 00:01
EnumChildWindows


Вот эта функция мне так нужна, а Эпплман про нёё ***** то есть непонятно изьястняется, про какой то нестандартный компонент втирает... как ей пользоваться то? то есть, могу я перечислить хендлы всего, что имеет хендл и лежит на моей форме?

Ответить

Номер ответа: 5
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #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-сайт: xury.zx6.ru
 Профиль | | #6
Добавлено: 15.06.05 01:10
2 sne:
а чё писать внутри этой ф?
и желательно на вб, а то я только сегодня начал си учить :( и это... я пишу :

..., AddressOf Фанкшн,... и он выдаёт, что неправлильно юзаю. я его вообще этот опратор в первый раз вижу :)

Ответить

Номер ответа: 7
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #7
Добавлено: 15.06.05 10:45
дык ты в модуль запихнул функция надеюсь ??

внутри писать код, те дается hwnd, что еще надо для счастья :) ?

Ответить

Номер ответа: 8
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #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
Попробуй...

Код модуля:
Option Explicit
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


Код формы:
Private Sub Command1_Click()
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-сайт: xury.zx6.ru
 Профиль | | #14
Добавлено: 16.06.05 19:11
2 SyavX

Классный код блин! прикольно видеть слова типа like в программировании

Ответить

Номер ответа: 15
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #15 Добавлено: 16.06.05 22:11
Like это типа '=' ?

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам