powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Контрол в чужое окно
28 сообщений из 28, показаны все 2 страниц
Контрол в чужое окно
    #33832418
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть необходимосто поместить comboBox в стороннее окно к примеру в calc.exe. И обрабатывать события данного контрола.
...
Рейтинг: 0 / 0
Контрол в чужое окно
    #33832578
ZeusTheTrueGod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и замашки, а тем более на визуал Бейсике :))
Вроде бы с помощью WinApi это делается так
1. СreateWindowEx (...до хера параметров,в качестве owner-window - hwnd калькулятора, а в качестве classname - 'edit' или 'combo'). Точно не скажу, нужен справочник по CreateWindow
2. Если нужна какая-то обработка - делай таймер и эмулируй getMessage,TranslateMessage,dispatchMessage.

Лучше откзаться от использовани VB в таких целях и писать на С++.
...
Рейтинг: 0 / 0
Контрол в чужое окно
    #33832607
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZeusTheTrueGod
Лучше откзаться от использовани VB в таких целях и писать на С++.
Какая разница? Писать все равно на WinAPI.
...
Рейтинг: 0 / 0
Контрол в чужое окно
    #33832651
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все это пишу для AutoCAD на VB и VBA и необходимо добавить выпадающий список. Поэтому и комбо хочу прикрепить на VB и управлять AutoCAD -ом.
...
Рейтинг: 0 / 0
Контрол в чужое окно
    #33832723
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как ComboBox заполнять на API?
...
Рейтинг: 0 / 0
Контрол в чужое окно
    #33833121
ZeusTheTrueGod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автор топика, а каким образом вы собираетесь находить место для вашего комбобокса в аутокаде?как вы собираетесь перемщать ваш комбобокс?
Вы бы хоть скриншот показали, чё вы хотите получить(нарисуйте в paint). А то хер поймёшь, к чему относится последний вопрос, неужели всё-таки удалось разместить комбобокс нормально?
...
Рейтинг: 0 / 0
Контрол в чужое окно
    #33833122
Letter_D
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
Const LB_ADDSTRING = &H180
SendMessage List1.hWnd, LB_ADDSTRING,  0 , ByVal "test"
...
Рейтинг: 0 / 0
Контрол в чужое окно
    #33833124
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SmeL_mdКак ComboBox заполнять на API?
Заполнять данными я думаю не получится.
...
Рейтинг: 0 / 0
Контрол в чужое окно
    #33833186
Letter_D
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А для комбобокса, соответственно, так:
Код: plaintext
1.
CB_ADDSTRING = &H143
SendMessage Combo1.hWnd, CB_ADDSTRING,  0 , ByVal "test"
...
Рейтинг: 0 / 0
Контрол в чужое окно
    #33833226
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Контрол в чужое окно
    #33833238
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. я хочу добиться данного результата
...
Рейтинг: 0 / 0
Контрол в чужое окно
    #33833286
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто кидаешь комбо на форму и делаешь ему SetParent хоть на рабочий стол. И работаешь с ним как обычно, будто он остался на форме. События тоже никуда не денутся.
...
Рейтинг: 0 / 0
Контрол в чужое окно
    #33833314
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyПросто кидаешь комбо на форму и делаешь ему SetParent хоть на рабочий стол. И работаешь с ним как обычно, будто он остался на форме. События тоже никуда не денутся.Вот этого я и ждал, но я думал это не возможно. Может сделаете примерчик, примного благодарен
Letter_D
Код: plaintext
SendMessage Combo1.hWnd, CB_ADDSTRING,  0 , ByVal "test"
Не работает с созданным контролом либо его нужно еще обновить программно
...
Рейтинг: 0 / 0
Контрол в чужое окно
    #33833390
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyПросто кидаешь комбо на форму и делаешь ему SetParent хоть на рабочий стол. И работаешь с ним как обычно, будто он остался на форме. События тоже никуда не денутся.Все спасибо разобрался! все проще чем даже элиментарно
...
Рейтинг: 0 / 0
Контрол в чужое окно
    #33833427
ZeusTheTrueGod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
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.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
Imports System.Runtime.InteropServices

Public Class Form1
    Inherits System.Windows.Forms.Form
    Public ProcID As Integer
    <DllImport("KERNEL32.DLL", EntryPoint:="MoveFileW", _
   SetLastError:=True, CharSet:=CharSet.Unicode, _
   ExactSpelling:=True, _
   CallingConvention:=CallingConvention.StdCall)> _
    Public Shared Function MoveFile(ByVal src As String, ByVal dst As String) As Boolean
        
    End Function


    <DllImport("USER32.DLL", EntryPoint:="FindWindowW", _
   SetLastError:=True, CharSet:=CharSet.Unicode, _
   ExactSpelling:=True, _
   CallingConvention:=CallingConvention.StdCall)> _
    Public Shared Function FindWindow(ByVal clsName As String, ByVal titleName As String) As System.IntPtr
        
    End Function
    <DllImport("USER32.DLL", EntryPoint:="SetParent", _
   SetLastError:=True, CharSet:=CharSet.Unicode, _
   ExactSpelling:=True, _
   CallingConvention:=CallingConvention.StdCall)> _
    Public Shared Function SetParent(ByVal child As System.IntPtr, ByVal parent As System.IntPtr) As System.IntPtr

    End Function
#Region " Windows Form Designer generated code "

    Public Sub New()
        MyBase.New()

        'This call is required by the Windows Form Designer.
        InitializeComponent()

        'Add any initialization after the InitializeComponent() call

    End Sub

    'Form overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    'Required by the Windows Form Designer
    Private components As System.ComponentModel.IContainer

    'NOTE: The following procedure is required by the Windows Form Designer
    'It can be modified using the Windows Form Designer.  
    'Do not modify it using the code editor.
    Friend WithEvents Button1 As System.Windows.Forms.Button
    Friend WithEvents ComboBox1 As System.Windows.Forms.ComboBox
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.Button1 = New System.Windows.Forms.Button
        Me.ComboBox1 = New System.Windows.Forms.ComboBox
        Me.SuspendLayout()
        '
        'Button1
        '
        Me.Button1.Location = New System.Drawing.Point( 128 ,  0 )
        Me.Button1.Name = "Button1"
        Me.Button1.Size = New System.Drawing.Size( 56 ,  16 )
        Me.Button1.TabIndex =  0 
        Me.Button1.Text = "Button1"
        '
        'ComboBox1
        '
        Me.ComboBox1.Items.AddRange(New Object() {"Item1", "Item2", "Item3"})
        Me.ComboBox1.Location = New System.Drawing.Point(0, 176)
        Me.ComboBox1.Name = "ComboBox1"
        Me.ComboBox1.Size = New System.Drawing.Size(120, 21)
        Me.ComboBox1.TabIndex = 1
        Me.ComboBox1.Text = "ComboBox1"
        '
        'Form1
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size( 5 ,  13 )
        Me.ClientSize = New System.Drawing.Size( 192 ,  197 )
        Me.Controls.Add(Me.ComboBox1)
        Me.Controls.Add(Me.Button1)
        Me.Name = "Form1"
        Me.Text = "Form1"
        Me.ResumeLayout(False)

    End Sub

#End Region

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        'me.
        ' Run Calculator.
        ProcID = Shell("calc.exe", AppWinStyle.NormalFocus)
        Dim calcPtr As System.IntPtr = FindWindow("SciCalc", Nothing)
        'Now we have calcPtr 
        SetParent(Me.ComboBox1.Handle, calcPtr)

        'Me.Handle()
    End Sub

    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
        MsgBox("Cool!")
    End Sub
End Class
...
Рейтинг: 0 / 0
Контрол в чужое окно
    #33833474
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZeusTheTrueGod выпий йаду! Мало того, что это .net, так еще и не потрудился вырезать generated code
...
Рейтинг: 0 / 0
Контрол в чужое окно
    #33833530
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мда. Я даже не поленился посчитать: из 110 приведенных строчек кода полезными являются только 3 (три).
...
Рейтинг: 0 / 0
Контрол в чужое окно
    #33834580
Фотография Aklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я помню, под AutoCAD есть набор плагинов, в т.ч. можно запагинить вставку любых элементов, открытия файлов и т.д. Но я огорчу: необходим LISP. А это такая ерунда...
...
Рейтинг: 0 / 0
Контрол в чужое окно
    #33835046
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AklinНасколько я помню, под AutoCAD есть набор плагинов, в т.ч. можно запагинить вставку любых элементов, открытия файлов и т.д. Но я огорчу: необходим LISP. А это такая ерунда...LISP достаточно мощный инструмент и без него никак не обойтись при написании приложений под ACAD, а про вставку конторлов Вы помоему ошибаетесь
...
Рейтинг: 0 / 0
Контрол в чужое окно
    #33838097
Вадим К.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А использовать VBA Autocad не пробовали?
Достаточно мощный инструмент.
Можно соэдать панель инструментов.
А можно и в MenuBar добавить элемент.
Успехов!
...
Рейтинг: 0 / 0
Контрол в чужое окно
    #33838932
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вадим К.А использовать VBA Autocad не пробовали?
Достаточно мощный инструмент.
Можно соэдать панель инструментов.
А можно и в MenuBar добавить элемент.
Успехов!Проблемка решена VBA используется без него проект работать не будет
...
Рейтинг: 0 / 0
Контрол в чужое окно
    #33849167
arseny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SmeL_md Вадим К.А использовать VBA Autocad не пробовали?
Достаточно мощный инструмент.
Можно соэдать панель инструментов.
А можно и в MenuBar добавить элемент.
Успехов!Проблемка решена VBA используется без него проект работать не будет
"Казнить нельзя помиловать"
...
Рейтинг: 0 / 0
Контрол в чужое окно
    #33897583
Rustygold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SmeL_md AntonariyПросто кидаешь комбо на форму и делаешь ему SetParent хоть на рабочий стол. И работаешь с ним как обычно, будто он остался на форме. События тоже никуда не денутся.Все спасибо разобрался! все проще чем даже элиментарно

SmeL_md, не подскажешь, как? Что-то не выходит :(
...
Рейтинг: 0 / 0
Контрол в чужое окно
    #33899629
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rustygold SmeL_md AntonariyПросто кидаешь комбо на форму и делаешь ему SetParent ...Все спасибо разобрался! ...SmeL_md, не подскажешь, как? Что-то не выходит :(
Код: plaintext
    SetParent Form1.Combo1.hwnd, nWnd
где nWnd интересующее нас окно.
...
Рейтинг: 0 / 0
Контрол в чужое окно
    #33902194
Rustygold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
    Dim Pid As Long
    LockWindowUpdate GetDesktopWindow
    Pid = Shell("c:\windows\notepad.exe", vbNormalFocus)
    If Pid =  0  Then MsgBox "Error starting the app": Exit Sub
    mWnd = InstanceToWnd(Pid)
    SetParent Form1.Combo1.hwnd, mWnd
    Putfocus mWnd
    LockWindowUpdate False

Combo прыгнуло в блокнот и даже заработало, но при переводе фокуса на меню или в чистое поле блокнота Combo проподает начисто.

Потом сделал так:

Код: plaintext
1.
2.
3.
    LockWindowUpdate GetDesktopWindow
    SetParent Form1.Combo1.hwnd, GetDesktopWindow
    LockWindowUpdate False

Combo на рабочем столе появилось, но "мертвое": курсор в него поставить еще можно, а вот вписать что-либо, или там раскрыть нет.

Подскажите, что не так?
...
Рейтинг: 0 / 0
Контрол в чужое окно
    #33903197
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
Form1.AutoRedraw = True
...
Рейтинг: 0 / 0
Контрол в чужое окно
    #33903404
Rustygold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SmeL_md
Код: plaintext
Form1.AutoRedraw = True


Не помогло :(

А нет ли у тебя примерчика ?
...
Рейтинг: 0 / 0
Контрол в чужое окно
    #33908686
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть примерчик, но это ActiveX DLL, которая сильно привязана к AutoCAD.
вот выдержка из кода
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Public Function EnumChildProc(ByVal hwnd As Long, _
                              ByVal lParam As Long) As Long
   Dim sTitle As String
   Dim sClass As String
   Dim sIDType As String
   sTitle = GetWindowIdentification(hwnd, sIDType, sClass)
   If UCase(TrimNull(sClass)) = "TOOLBARWINDOW32" Then
    Dim Pid As Long
    LockWindowUpdate GetDesktopWindow
    PutCombo hwnd
    'SetParent Form1.Frame1.hwnd, hwnd
    Putfocus mWnd
    LockWindowUpdate False
   End If
   EnumChildProc =  1 
End Function
Private Sub PutCombo(nWnd As Long)
    Dim Pid As Long
    LockWindowUpdate GetDesktopWindow
    SetParent Form1.Combo1.hwnd, nWnd
    LockWindowUpdate False
End Sub
Первая функция просто находит хэндл интересующего мне окна, вторая перемешает контрол на это окно
...
Рейтинг: 0 / 0
28 сообщений из 28, показаны все 2 страниц
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Контрол в чужое окно
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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