Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Перебор всех контролов формы


Автор: efedron 23.8.2005, 13:36
Не могу вспомнить, как можно перечислить все контролы, лежащие на форме, поочередно выполнив с ними какое-нть действие. Напр. мне надо получить их hWnd.
А если быть уж совсем точным, то на форме у меня лежит dhtml edit и мне нужно получить его hWnd (явным образом он свойства такого не имеет)

Автор: boevik 23.8.2005, 14:09
Код

dim c as Control
For each c in Me.Controls
....
Next c

Автор: efedron 24.8.2005, 07:17
boevik
спасибо, но фокус с перебором не проходит.
Таким образом определить hWnd контрола DHTMLEdit не удается, как же это можно осуществить при запуске программы? smile

Автор: efedron 29.8.2005, 13:09
ну где же вы, профессионалы?? на данный момент мне удалось яастично решить проблему таким образом: я получаю hwnd окна, находящегося под курсором мыши и специально навожу туда курсор. В этом случае все ок, но так не делать - это несерьезно, прошу помощи!!!

Автор: Exception 30.8.2005, 01:20
помещай dhtmlEdit в пикчербокс picContainer, и добавь код:
Код
Declare Function FindWindowExA Lib "user32" (ByVal hWndParent As Long, ByVal hWndChildAfter As Long, ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Sub Form_Load()
Dim h As Long
h = FindWindowExA(picContainer.hWnd, 0, vbNullString, vbNullString)
MsgBox h
End Sub

писал вслепую, проверь.

Автор: efedron 30.8.2005, 13:06
Run-time error
не знаю какой хэндл в этом случае содержит h, но явно не хендл dhtmledit smile

Автор: Exception 30.8.2005, 16:42
с чего ты взял что не его? это точно должно сработать
Добавлено @ 16:43
с чего ты взял что не его? это точно должно сработать. а зах тебе его хэндл?

Автор: Guest 3.9.2005, 08:11
Run-time error
лень код выкладывать, но пикчербокс содержит другой хендл, я проверил, а нужно мне это для того, чтобы послать окну dhtmledit сообщение WM_KEYDOWN (нажатие клавиши "End"), чтобы он прокрутился вниз.

Автор: Naghual 6.9.2005, 09:33
smile

Удивляют меня эти гости.

Ему
Цитата(Guest @ 3.9.2005, 08:11)
лень код выкладывать


А вы отвечайте ему! Да еще и так, что бы все и сразу заработало.

Автор: Mephisto 6.9.2005, 10:03
ГЫ. Прикольно. А ты уверен что не работет? Лично я думаю, должно работать. Покажи код!

Автор: Exception 6.9.2005, 10:39
а ты попробуй его дестройвиндов, можа он только на сендмессэдж не реагирует.
зы активикс с апи дело тёмное, активиксы иногда хвнд даже меняют.. ззы а SendKeys юзать не пробовал?

Автор: Mephisto 6.9.2005, 10:48
Цитата(Run @ 6.9.2005, 10:39)
можа он только на сендмессэдж не реагирует

А эт че возможно? Сообщения посылаются всегда и всегда обрабатываются. Нуна только знать куда отсылать. smile

Автор: Exception 6.9.2005, 11:33
активиксы не всегда корректно работают с апи ф-циями. всё возможно...
а вот код покажи, эфедрон

Автор: efedron 6.9.2005, 15:49
Naghual
Цитата
Удивляют меня эти гости.

я просто не заметил, что не залогинился...
оффтоп: объясняю почему лень, потому, что у этого форума (насколько я понял) нельзя прикреплять файлы (я бы с удовольствием прикрепил архив файлов проекта)
Поэтому выкладываю весь код в листинге:
Код

VERSION 5.00
Object = "{683364A1-B37D-11D1-ADC5-006008A5848C}#1.0#0"; "dhtmled.ocx"
Begin VB.Form Form1 
   Caption         =   "Form1"
   ClientHeight    =   4635
   ClientLeft      =   60
   ClientTop       =   345
   ClientWidth     =   4470
   LinkTopic       =   "Form1"
   ScaleHeight     =   4635
   ScaleWidth      =   4470
   StartUpPosition =   3  'Windows Default
   Begin VB.CommandButton Command2 
      Caption         =   "ПослатьСообщение"
      Height          =   615
      Left            =   2400
      TabIndex        =   6
      Top             =   3120
      Width           =   1575
   End
   Begin VB.TextBox Text3 
      Height          =   285
      Left            =   120
      TabIndex        =   5
      Top             =   2520
      Width           =   2175
   End
   Begin VB.TextBox Text2 
      Height          =   285
      Left            =   120
      TabIndex        =   4
      Top             =   3480
      Width           =   2175
   End
   Begin VB.Timer Timer1 
      Interval        =   1000
      Left            =   3960
      Top             =   3960
   End
   Begin VB.TextBox Text1 
      Height          =   285
      Left            =   120
      TabIndex        =   3
      Top             =   3120
      Width           =   2175
   End
   Begin VB.CommandButton Command1 
      Caption         =   "Send message to DHTMLEdit"
      Height          =   255
      Left            =   120
      TabIndex        =   2
      Top             =   2040
      Width           =   2775
   End
   Begin VB.PictureBox picContainer 
      BorderStyle     =   0  'None
      Height          =   1935
      Left            =   120
      ScaleHeight     =   1935
      ScaleWidth      =   3495
      TabIndex        =   0
      Top             =   120
      Width           =   3495
      Begin DHTMLEDLibCtl.DHTMLEdit DHTMLEdit1 
         Height          =   1815
         Left            =   0
         TabIndex        =   1
         Top             =   0
         Width           =   3495
         ActivateApplets =   0   'False
         ActivateActiveXControls=   0   'False
         ActivateDTCs    =   -1  'True
         ShowDetails     =   0   'False
         ShowBorders     =   0   'False
         Appearance      =   1
         Scrollbars      =   -1  'True
         ScrollbarAppearance=   1
         SourceCodePreservation=   -1  'True
         AbsoluteDropMode=   0   'False
         SnapToGrid      =   0   'False
         SnapToGridX     =   50
         SnapToGridY     =   50
         BrowseMode      =   -1  'True
         UseDivOnCarriageReturn=   0   'False
      End
   End
   Begin VB.Label Label1 
      Caption         =   "WindowFromPoint"
      Height          =   255
      Left            =   120
      TabIndex        =   7
      Top             =   2880
      Width           =   2295
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Declare Function FindWindowExA Lib "user32" (ByVal hWndParent As Long, ByVal hWndChildAfter As Long, ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Option Explicit
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint 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 Const WM_CHAR = &H102
Private Const WM_KEYDOWN = &H100

Private Type POINTAPI
        x As Long
        y As Long
End Type

Dim h As Long

Private Sub Command1_Click()
SendMessage h, WM_KEYDOWN, 35, 0&
End Sub

Private Sub Command2_Click()
SendMessage CLng(Val(Text1.Text)), WM_KEYDOWN, 35, 0&

End Sub

Sub Form_Load()
h = FindWindowExA(picContainer.hWnd, 0, vbNullString, vbNullString)
DHTMLEdit1.LoadDocument "c:\boot.ini"
Text3.Text = h
End Sub

Private Sub Timer1_Timer()
Dim pCur As POINTAPI
Dim hWnd As Long
Dim sText As String
sText = String$(256, " ")
GetCursorPos pCur
hWnd = WindowFromPoint(pCur.x, pCur.y)
Text1.Text = hWnd
GetWindowText hWnd, sText, 255
Text2.Text = Trim$(sText)
End Sub

этот примерчик показывает, что dhtml реагирует на посылку ему сообщения, а переменная h содержит не его хендл.

Автор: Naghual 6.9.2005, 16:45
А этот пример показывает как прикреплять файлы.
smile

Автор: efedron 7.9.2005, 10:02
Naghual
очень оригинально...где информативность-то? smile

Автор: Naghual 7.9.2005, 10:44
efedron
Ты же не первый день на форуме!
Внизу темы, под формой Быстрого ответа есть кнопка Ответ. Вот на нее нажимаеш и имееш возможность постить файл.

Но это все оффтоп.

Автор: efedron 8.9.2005, 09:26
Naghual
сэнкс, просто этой кнопкой никогда не пользовался....
ну да ладно...будут еще советы?

Автор: Exception 9.9.2005, 11:46
от'enum'ь все дочерние окна пикчербокса - вот тебе и хэндл. повторяю вопрос: SendKeys не помогает?

Автор: efedron 12.9.2005, 12:29
Run-time error
Цитата
повторяю вопрос: SendKeys не помогает?

в принципе, помогает, но не хотелось бы закрывать вопрос, поскольку ответ может быть полезен и для других случаев.
Цитата
от'enum'ь все дочерние окна пикчербокса

а как я узнаю что нашел именно тот хендл?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)