powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Переместить кнопку между frame1,form,frame2
17 сообщений из 17, страница 1 из 1
Переместить кнопку между frame1,form,frame2
    #39635489
Фотография Focha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребят, привет!
есть форма на ней 2 frame в одном из них кнопку, как перемещать я понял, но объект перемещается в рамках 1 frame, где изначально объект был установлен, а как переместить объект за границу данного frame, сначала форма, потом другой или тот же frame?
...
Рейтинг: 0 / 0
Переместить кнопку между frame1,form,frame2
    #39635494
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через WinAPI функция SetParent
...
Рейтинг: 0 / 0
Переместить кнопку между frame1,form,frame2
    #39635625
Фотография Focha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProЧерез WinAPI функция SetParent
не пойму как


Код: vbnet
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.
Private Sub but_move_MouseDown(ByVal button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    x_top = X
    y_left = Y
End Sub

Private Sub but_move_MouseMove(ByVal button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If y_left = 0 Then Exit Sub
    If Frame_article_color.Top + Y <= 0 Or Frame_article_color.Left + X <= 0 Then


'тут я хочу кнопку "отцепить" от frame2 и теперь она должна быть на форме
        SetParent Frame2, Application.hWnd
'    SetParent Frame2, UserForms.hWnd
 
'        SetParent Frame2.hWnd, UserForms.hWnd
'        SetParent Frame2.Hwnd, Frame2.Controls(button)

    End If
    
    Frame_article_color.Top = Frame_article_color.Top + Y
    Frame_article_color.Left = Frame_article_color.Left + X
End Sub

Private Sub but_move_MouseUp(ByVal button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    y_left = 0

End Sub
...
Рейтинг: 0 / 0
Переместить кнопку между frame1,form,frame2
    #39635629
Фотография Focha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
подправил код для примера
Код: vbnet
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.
Private Sub but_move_MouseDown(ByVal button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    x_top = X
    y_left = Y
End Sub

Private Sub but_move_MouseMove(ByVal button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If y_left = 0 Then Exit Sub
    If but_move.Top + Y <= 0 Or but_move.Left + X <= 0 Then


'тут я хочу кнопку "отцепить" от frame2 и теперь она должна быть на форме
        SetParent Frame2, Application.hWnd
'    SetParent Frame2, UserForms.hWnd
 
'        SetParent Frame2.hWnd, UserForms.hWnd
'        SetParent Frame2.Hwnd, Frame2.Controls(button)

    End If
    
    but_move.Top = but_move.Top + Y
    but_move.Left = but_move.Left + X
End Sub

Private Sub but_move_MouseUp(ByVal button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    y_left = 0

End Sub
...
Рейтинг: 0 / 0
Переместить кнопку между frame1,form,frame2
    #39635635
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм. действительно, в офисформах нет свойства hWnd ни у формы, ни у контролов. Не знаю, как их добыть.

А зачем такие сложности? Почему нельзя таскать кнопку по форме поверх фреймов?
...
Рейтинг: 0 / 0
Переместить кнопку между frame1,form,frame2
    #39635646
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

их добывать через API надо. Типа того(внутри формы)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
#If VBA7 Then
    Private Declare PtrSafe Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
#Else
    Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
#End If

Private Sub UserForm_Initialize()
    Dim ihWnd
    'ищем окно формы среди всех открытых окон
    If Val(Application.Version) < 9 Then
        ihWnd = FindWindow("ThunderXFrame", Me.Caption) 'для Excel 97
    Else
        ihWnd = FindWindow("ThunderDFrame", Me.Caption) 'для Excel 2000 и выше
    End If
    'здесь уже можно дальше что-то делать с найденным hwnd
End Sub


в принципе можно ihWnd объявить на уровне модуля формы и определять его при инициализации формы, а потом в других процедурах просто использовать.
...
Рейтинг: 0 / 0
Переместить кнопку между frame1,form,frame2
    #39635652
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл. В VBA есть еще скрытые методы. И для контейнеров типа Frame можно получить hwnd без танцев с бубном:
Код: vbnet
1.
Debug.Print Frame1.[_GethWnd]


но это свойство недоступно для кнопок, т.к. они вроде бы даже не являются окнами(они вроде вообще рисуются командой MS Forms Runtime и им hwnd попросту не назначается). В общем как достать hwnd кнопки я не знаю. Даже при помощи API.
Поэтому не совсем представляю, как здесь setParent может помочь, ведь там помимо hwnd нового родителя нужен еще и hwnd дитятки.
...
Рейтинг: 0 / 0
Переместить кнопку между frame1,form,frame2
    #39635724
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Focha, ИМХО предполагается, что надо просто создать три одинаковые кнопки, две из них сделать невидимыми, и далее по нажатию делать видимой очередную кнопку
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Private Sub CommandButton1_Click()
  CommandButton1.Visible = False
  CommandButton2.Visible = True
  CommandButton2.SetFocus
End Sub

Private Sub CommandButton2_Click()
  CommandButton2.Visible = False
  CommandButton3.Visible = True
  CommandButton3.SetFocus
End Sub

Private Sub CommandButton3_Click()
  CommandButton3.Visible = False
  CommandButton1.Visible = True
  CommandButton1.SetFocus
End Sub
...
Рейтинг: 0 / 0
Переместить кнопку между frame1,form,frame2
    #39635838
Фотография Focha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КазанскийFocha, ИМХО предполагается, что надо просто создать три одинаковые кнопки, две из них сделать невидимыми, и далее по нажатию делать видимой очередную кнопку
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Private Sub CommandButton1_Click()
  CommandButton1.Visible = False
  CommandButton2.Visible = True
  CommandButton2.SetFocus
End Sub

Private Sub CommandButton2_Click()
  CommandButton2.Visible = False
  CommandButton3.Visible = True
  CommandButton3.SetFocus
End Sub

Private Sub CommandButton3_Click()
  CommandButton3.Visible = False
  CommandButton1.Visible = True
  CommandButton1.SetFocus
End Sub



Полный бред
...
Рейтинг: 0 / 0
Переместить кнопку между frame1,form,frame2
    #39635841
Фотография Focha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProХм. действительно, в офисформах нет свойства hWnd ни у формы, ни у контролов. Не знаю, как их добыть.

А зачем такие сложности? Почему нельзя таскать кнопку по форме поверх фреймов?

А зачем такие сложности?
Хочу добавить минимальную интерактивность
Почему нельзя таскать кнопку по форме поверх фреймов?
Можно, но проще перебрать все объекты в frame, чем сохранять какие объекты пользователь перетащил
...
Рейтинг: 0 / 0
Переместить кнопку между frame1,form,frame2
    #39635866
Фотография Focha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_PristЗабыл. В VBA есть еще скрытые методы. И для контейнеров типа Frame можно получить hwnd без танцев с бубном:
Код: vbnet
1.
Debug.Print Frame1.[_GethWnd]


но это свойство недоступно для кнопок, т.к. они вроде бы даже не являются окнами(они вроде вообще рисуются командой MS Forms Runtime и им hwnd попросту не назначается). В общем как достать hwnd кнопки я не знаю. Даже при помощи API.
Поэтому не совсем представляю, как здесь setParent может помочь, ведь там помимо hwnd нового родителя нужен еще и hwnd дитятки.

могу кнопку заменить на frame
...
Рейтинг: 0 / 0
Переместить кнопку между frame1,form,frame2
    #39635886
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FochaМожно, но проще перебрать все объекты в frame, чем сохранять какие объекты пользователь перетащилага, мы видим, как проще, совсем никакого геморроя

Проще в тэге для контрола отметить, какой из них был перетащен и не парится с этими контейнерами
...
Рейтинг: 0 / 0
Переместить кнопку между frame1,form,frame2
    #39635890
Фотография Focha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProFochaМожно, но проще перебрать все объекты в frame, чем сохранять какие объекты пользователь перетащилага, мы видим, как проще, совсем никакого геморроя

Проще в тэге для контрола отметить, какой из них был перетащен и не парится с этими контейнерами
я то думал, что это так же легко сделать как в JS или C#.
...
Рейтинг: 0 / 0
Переместить кнопку между frame1,form,frame2
    #39635915
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProПочему нельзя таскать кнопку по форме поверх фреймов?Не получается :(
FochaПолный бредУгу, единственный работающий вариант на текущий момент :)
...
Рейтинг: 0 / 0
Переместить кнопку между frame1,form,frame2
    #39635940
Фотография Focha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КазанскийShocker.ProПочему нельзя таскать кнопку по форме поверх фреймов?Не получается :(
FochaПолный бредУгу, единственный работающий вариант на текущий момент :)
Эм.... а теперь таких frame будет 5 штук, решение такое не подходит.
...
Рейтинг: 0 / 0
Переместить кнопку между frame1,form,frame2
    #39635947
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fochaлегко сделать как в JS или C#.JS или C#, как и VBA - это языки и сами по себе они чего не могут (легко или сложно) - в этой задаче все зависит от выбранного фреймворка для вывода на экран, а Office Forms (или как они там называются) - штука достаточно слабая в плане гибкости.
...
Рейтинг: 0 / 0
Переместить кнопку между frame1,form,frame2
    #39635972
Фотография Focha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProFochaлегко сделать как в JS или C#.JS или C#, как и VBA - это языки и сами по себе они чего не могут (легко или сложно) - в этой задаче все зависит от выбранного фреймворка для вывода на экран, а Office Forms (или как они там называются) - штука достаточно слабая в плане гибкости.
поруюсь еще в инете, если ничего не придумаю, буду делать подругому.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Переместить кнопку между frame1,form,frame2
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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