Гость
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Переместить кнопку между frame1,form,frame2 / 17 сообщений из 17, страница 1 из 1
24.04.2018, 15:49
    #39635489
Focha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переместить кнопку между frame1,form,frame2
Ребят, привет!
есть форма на ней 2 frame в одном из них кнопку, как перемещать я понял, но объект перемещается в рамках 1 frame, где изначально объект был установлен, а как переместить объект за границу данного frame, сначала форма, потом другой или тот же frame?
...
Рейтинг: 0 / 0
24.04.2018, 15:57
    #39635494
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переместить кнопку между frame1,form,frame2
Через WinAPI функция SetParent
...
Рейтинг: 0 / 0
24.04.2018, 18:38
    #39635625
Focha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переместить кнопку между frame1,form,frame2
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
24.04.2018, 18:40
    #39635629
Focha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переместить кнопку между frame1,form,frame2
подправил код для примера
Код: 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
24.04.2018, 18:56
    #39635635
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переместить кнопку между frame1,form,frame2
Хм. действительно, в офисформах нет свойства hWnd ни у формы, ни у контролов. Не знаю, как их добыть.

А зачем такие сложности? Почему нельзя таскать кнопку по форме поверх фреймов?
...
Рейтинг: 0 / 0
24.04.2018, 19:38
    #39635646
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переместить кнопку между frame1,form,frame2
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
24.04.2018, 19:59
    #39635652
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переместить кнопку между frame1,form,frame2
Забыл. В VBA есть еще скрытые методы. И для контейнеров типа Frame можно получить hwnd без танцев с бубном:
Код: vbnet
1.
Debug.Print Frame1.[_GethWnd]


но это свойство недоступно для кнопок, т.к. они вроде бы даже не являются окнами(они вроде вообще рисуются командой MS Forms Runtime и им hwnd попросту не назначается). В общем как достать hwnd кнопки я не знаю. Даже при помощи API.
Поэтому не совсем представляю, как здесь setParent может помочь, ведь там помимо hwnd нового родителя нужен еще и hwnd дитятки.
...
Рейтинг: 0 / 0
25.04.2018, 01:13
    #39635724
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переместить кнопку между frame1,form,frame2
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
25.04.2018, 09:59
    #39635838
Focha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переместить кнопку между frame1,form,frame2
Казанский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
25.04.2018, 10:02
    #39635841
Focha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Переместить кнопку между frame1,form,frame2
Shocker.ProХм. действительно, в офисформах нет свойства hWnd ни у формы, ни у контролов. Не знаю, как их добыть.

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

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


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

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

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

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


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