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

Лучше откзаться от использовани VB в таких целях и писать на С++.
...
Рейтинг: 0 / 0
05.07.2006, 13:10
    #33832607
Melkiades
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контрол в чужое окно
ZeusTheTrueGod
Лучше откзаться от использовани VB в таких целях и писать на С++.
Какая разница? Писать все равно на WinAPI.
...
Рейтинг: 0 / 0
05.07.2006, 13:20
    #33832651
SmeL_md
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контрол в чужое окно
Все это пишу для AutoCAD на VB и VBA и необходимо добавить выпадающий список. Поэтому и комбо хочу прикрепить на VB и управлять AutoCAD -ом.
...
Рейтинг: 0 / 0
05.07.2006, 13:42
    #33832723
SmeL_md
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контрол в чужое окно
Как ComboBox заполнять на API?
...
Рейтинг: 0 / 0
05.07.2006, 15:18
    #33833121
ZeusTheTrueGod
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контрол в чужое окно
Автор топика, а каким образом вы собираетесь находить место для вашего комбобокса в аутокаде?как вы собираетесь перемщать ваш комбобокс?
Вы бы хоть скриншот показали, чё вы хотите получить(нарисуйте в paint). А то хер поймёшь, к чему относится последний вопрос, неужели всё-таки удалось разместить комбобокс нормально?
...
Рейтинг: 0 / 0
05.07.2006, 15:18
    #33833122
Letter_D
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контрол в чужое окно
Код: plaintext
1.
Const LB_ADDSTRING = &H180
SendMessage List1.hWnd, LB_ADDSTRING,  0 , ByVal "test"
...
Рейтинг: 0 / 0
05.07.2006, 15:19
    #33833124
Melkiades
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контрол в чужое окно
SmeL_mdКак ComboBox заполнять на API?
Заполнять данными я думаю не получится.
...
Рейтинг: 0 / 0
05.07.2006, 15:35
    #33833186
Letter_D
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контрол в чужое окно
А для комбобокса, соответственно, так:
Код: plaintext
1.
CB_ADDSTRING = &H143
SendMessage Combo1.hWnd, CB_ADDSTRING,  0 , ByVal "test"
...
Рейтинг: 0 / 0
05.07.2006, 15:44
    #33833226
SmeL_md
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контрол в чужое окно
...
Рейтинг: 0 / 0
05.07.2006, 15:45
    #33833238
SmeL_md
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контрол в чужое окно
Т.е. я хочу добиться данного результата
...
Рейтинг: 0 / 0
05.07.2006, 15:54
    #33833286
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контрол в чужое окно
Просто кидаешь комбо на форму и делаешь ему SetParent хоть на рабочий стол. И работаешь с ним как обычно, будто он остался на форме. События тоже никуда не денутся.
...
Рейтинг: 0 / 0
05.07.2006, 16:00
    #33833314
SmeL_md
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контрол в чужое окно
AntonariyПросто кидаешь комбо на форму и делаешь ему SetParent хоть на рабочий стол. И работаешь с ним как обычно, будто он остался на форме. События тоже никуда не денутся.Вот этого я и ждал, но я думал это не возможно. Может сделаете примерчик, примного благодарен
Letter_D
Код: plaintext
SendMessage Combo1.hWnd, CB_ADDSTRING,  0 , ByVal "test"
Не работает с созданным контролом либо его нужно еще обновить программно
...
Рейтинг: 0 / 0
05.07.2006, 16:16
    #33833390
SmeL_md
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контрол в чужое окно
AntonariyПросто кидаешь комбо на форму и делаешь ему SetParent хоть на рабочий стол. И работаешь с ним как обычно, будто он остался на форме. События тоже никуда не денутся.Все спасибо разобрался! все проще чем даже элиментарно
...
Рейтинг: 0 / 0
05.07.2006, 16:23
    #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
05.07.2006, 16:33
    #33833474
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контрол в чужое окно
ZeusTheTrueGod выпий йаду! Мало того, что это .net, так еще и не потрудился вырезать generated code
...
Рейтинг: 0 / 0
05.07.2006, 16:48
    #33833530
Melkiades
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контрол в чужое окно
Мда. Я даже не поленился посчитать: из 110 приведенных строчек кода полезными являются только 3 (три).
...
Рейтинг: 0 / 0
06.07.2006, 09:26
    #33834580
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контрол в чужое окно
Насколько я помню, под AutoCAD есть набор плагинов, в т.ч. можно запагинить вставку любых элементов, открытия файлов и т.д. Но я огорчу: необходим LISP. А это такая ерунда...
...
Рейтинг: 0 / 0
06.07.2006, 11:34
    #33835046
SmeL_md
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контрол в чужое окно
AklinНасколько я помню, под AutoCAD есть набор плагинов, в т.ч. можно запагинить вставку любых элементов, открытия файлов и т.д. Но я огорчу: необходим LISP. А это такая ерунда...LISP достаточно мощный инструмент и без него никак не обойтись при написании приложений под ACAD, а про вставку конторлов Вы помоему ошибаетесь
...
Рейтинг: 0 / 0
07.07.2006, 12:52
    #33838097
Вадим К.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контрол в чужое окно
А использовать VBA Autocad не пробовали?
Достаточно мощный инструмент.
Можно соэдать панель инструментов.
А можно и в MenuBar добавить элемент.
Успехов!
...
Рейтинг: 0 / 0
07.07.2006, 16:14
    #33838932
SmeL_md
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контрол в чужое окно
Вадим К.А использовать VBA Autocad не пробовали?
Достаточно мощный инструмент.
Можно соэдать панель инструментов.
А можно и в MenuBar добавить элемент.
Успехов!Проблемка решена VBA используется без него проект работать не будет
...
Рейтинг: 0 / 0
12.07.2006, 18:26
    #33849167
arseny
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контрол в чужое окно
SmeL_md Вадим К.А использовать VBA Autocad не пробовали?
Достаточно мощный инструмент.
Можно соэдать панель инструментов.
А можно и в MenuBar добавить элемент.
Успехов!Проблемка решена VBA используется без него проект работать не будет
"Казнить нельзя помиловать"
...
Рейтинг: 0 / 0
03.08.2006, 15:19
    #33897583
Rustygold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контрол в чужое окно
SmeL_md AntonariyПросто кидаешь комбо на форму и делаешь ему SetParent хоть на рабочий стол. И работаешь с ним как обычно, будто он остался на форме. События тоже никуда не денутся.Все спасибо разобрался! все проще чем даже элиментарно

SmeL_md, не подскажешь, как? Что-то не выходит :(
...
Рейтинг: 0 / 0
04.08.2006, 13:11
    #33899629
SmeL_md
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контрол в чужое окно
Rustygold SmeL_md AntonariyПросто кидаешь комбо на форму и делаешь ему SetParent ...Все спасибо разобрался! ...SmeL_md, не подскажешь, как? Что-то не выходит :(
Код: plaintext
    SetParent Form1.Combo1.hwnd, nWnd
где nWnd интересующее нас окно.
...
Рейтинг: 0 / 0
07.08.2006, 09:06
    #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
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Контрол в чужое окно / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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