powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Установка координат обьекта - SendMessageA
12 сообщений из 12, страница 1 из 1
Установка координат обьекта - SendMessageA
    #34275472
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello ...............
Создан обьект, свойства Left,Rigth недоступны
set A = New ClassA
A.Left - отсутствуют

Чем правильно уставновить координаты, полагаю через SendMessageA
Но не знаю полного синтаксиса и типа
Подкиньте код или ссылку .....
Спасибо !
...
Рейтинг: 0 / 0
Установка координат обьекта - SendMessageA
    #34275810
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если ваш созданный объект имеет hwnd , то можете его явно спозиционировать с помощью функции SetWindowPos

Код: plaintext
Private Declare Sub SetWindowPos Lib "User32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)
...
Рейтинг: 0 / 0
Установка координат обьекта - SendMessageA
    #34276382
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Момент - но эта функция для работы с окнами ?????
Или это не имеет значения в моем случае тип обьекта - ProgressBar
...
Рейтинг: 0 / 0
Установка координат обьекта - SendMessageA
    #34276433
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProgressBar это тоже окно.
...
Рейтинг: 0 / 0
Установка координат обьекта - SendMessageA
    #34276732
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что не так делаю ??????????????
Указатель на обьект возвращет 0
B.hwnd = 0 - а что необходимо еще сделать ?

Private Type BarRect
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Private Const SWP_NOSIZE = &H1
Private Const SWP_NOZORDER = &H4
Private Const SWP_NOACTIVATE = &H10

Private Const SW_NORMAL = 1
Private Const SW_MINIMIZE = 2
Private Const SW_MAXIMIZE = 3
Private Const SW_SHOW = 9

Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As BarRect) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Sub Command1_Click()
Dim H As Long, R As BarRect, B As ProgressBar
H = GetActiveWindow
Call GetWindowRect(H, R)
Set B = New ProgressBar
MsgBox B.hwnd - здесь hwnd = 0
Call SetParent(B.hwnd, H)
Call SetWindowPos(B, 0, 5, 5, 50, 50, SWP_NOSIZE Or SWP_NOZORDER Or SWP_NOACTIVATE)
Call ShowWindow(B, SW_SHOW)
MsgBox Format(Hex(H), "00000000") & " " & R.Left & " " & R.Top & " " & R.Right & " " & R.Bottom
Set B = Nothing
End Sub
...
Рейтинг: 0 / 0
Установка координат обьекта - SendMessageA
    #34276759
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если хочешь работать через WinAPI, то забудь про ProgressBar, если хочешь работать через ProgressBar, то нет смысла в WinAPI :)

Например, если есть окно или форма в терминах VB, и указатель на это окно записан в w, то можно вот так вот сделать на окне прогрессбар и прижать к нижнему краю...
Код: plaintext
1.
2.
3.
4.
5.
6.
        Dim b As ProgressBar
        w.Controls.Add(New ProgressBar)
        b = w.Controls(w.Controls.Count -  1 )
        b.Left = w.ClientRectangle.Width /  4 
        b.Top = w.ClientRectangle.Height - b.Height *  1 . 2 
        b.Width = w.ClientRectangle.Width /  2 
...
Рейтинг: 0 / 0
Установка координат обьекта - SendMessageA
    #34276898
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конструкция Controls.Add(New ProgressBar) у меня не работает ?????

А такой синтаксис требует лицензии на обьект

Option Explicit
Private WithEvents btnObj As CommandButton
Private WithEvents cmdBar As ProgressBar
Private Sub btnObj_Click()
MsgBox "This is a dynamically added button."
End Sub
Private Sub Command1_Click()
Set btnObj = Controls.Add("VB.CommandButton", "btnObj")
btnObj.Visible = True
btnObj.Width = 2000
btnObj.Caption = "Hello"
btnObj.Top = 1000
btnObj.Left = 1000
MsgBox "Created " & Controls(1).Name
MsgBox "Create ProgressBar"
Licenses.Add "MSComctlLib.ProgCtrl.2", "????????????" - надо полагать здесь
Set cmdBar = Controls.Add("MSComctlLib.ProgCtrl.2", "cmdBar")
cmdBar.Visible = True
End Sub
...
Рейтинг: 0 / 0
Установка координат обьекта - SendMessageA
    #34276994
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X,
если читать сообщения об ошибках, то, "что характерно" ((с) Леонид Ильич), всё получается. Первое сообщение говорит: лицензию добавлять не надо, уже есть. Второе сообщение говорит: уберите в опциях проекта галочку "Remove information about unused ActiveX Controls".
...
Рейтинг: 0 / 0
Установка координат обьекта - SendMessageA
    #34277524
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Факт - согласен ............
Смотрю в книгу видим .............EXCEL

Спасибо - дочитал ......
...
Рейтинг: 0 / 0
Установка координат обьекта - SendMessageA
    #34277558
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Остаеться внедрить созданный обьект в "OutLook".СommandBar
Сейчас попробую.............

Спасибо господа - буду учиться читать внимательно
...
Рейтинг: 0 / 0
Установка координат обьекта - SendMessageA
    #34279980
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну не все ..... так хорошо .....

Здесь получаеться несовместимость передаваемых типов
Добавление элемента к обьекту CommandBar предполагает набор
других типов ?
Controls.Add( Type, Id, Parameter, Before, Temporary )
CommndBars - это некий дочерный обьект,
.Add - его локальный метод (вряд-ли он унаследован от родителя)

А как выйти на родителя - у него наверняка будет классические параметры Add ??
Верно - нет ?

Private cmBars As CommandBar
Private WithEvents obPBar As ProgressBar

Private Sub btExes_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean)
Set obPBar = cmBars.Controls.Add("MSComctlLib.ProgCtrl.2", "obPBar") - ошибка типов
obPBar.Left = 1
obPBar.Top = 1
obPBar.Height = 23
obPBar.Width = 120
obPBar.Visible = True
obPBar.Value = 50
End Sub
...
Рейтинг: 0 / 0
Установка координат обьекта - SendMessageA
    #34280406
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа никто не подскажет .... ?
Менять подход (обьект) ............?
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Установка координат обьекта - SendMessageA
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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