Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Проще не бывает: новогодний подарок Добавлено: 29.12.06 16:32  

Автор вопроса:  Tur | ICQ: 201446364 
У Form2 есть родитель - Form1. Требуется переместить программно, т.е. например нажатием на кнопку Form2 из одной точки на Form1 в другую, т.е. изменить Form2.Top и Form2.Left на новые конкретные, известные заранее значения. Напр из точки Left = 0,Top = 1000 в точку Left = 0,Top = 3000. Если кто сможет - сообщите плз.

' код Form1
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

Private Sub Form_Initialize()
Dim ret
Form1.Show
Form2.Show
Form2.Left = 0
Form2.Top = 1000
Form2.Height = 500
Form2.Width = 2000
ret = SetParent(Form2.hwnd, Me.hwnd)
End Sub

Private Sub Command1_Click()
Form2.Left = Form2.Left + 3000
End Sub

Ответить

  Ответы Всего ответов: 8  

Номер ответа: 1
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #1 Добавлено: 29.12.06 18:08
ScaleMode = vbPixel

Ответить

Номер ответа: 2
Автор ответа:
 Djon



Вопросов: 61
Ответов: 471
 Web-сайт: www.vk-book.ru
 Профиль | | #2
Добавлено: 29.12.06 18:09
Я не понимаю в чём вопрос, всё работает, что еще нужно? 2-я форма перемещается, как ты и хотел что ещё нужно?

Ответить

Номер ответа: 3
Автор ответа:
 Серёга



ICQ: 262809473 

Вопросов: 17
Ответов: 561
 Web-сайт: houselab.narod.ru
 Профиль | | #3
Добавлено: 29.12.06 19:54
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private Type POINTAPI
        x As Long
        y As Long
End Type
Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type
Private Type WINDOWPLACEMENT
        Length As Long
        flags As Long
        showCmd As Long
        ptMinPosition As POINTAPI
        ptMaxPosition As POINTAPI
        rcNormalPosition As RECT
End Type
Private Declare Function SetWindowPlacement Lib "user32" (ByVal hwnd As Long, lpwndpl As WINDOWPLACEMENT) As Long

Private Sub Form_Initialize()
Dim ret As Long
Form1.Show
ret = SetParent(Form2.hwnd, Me.hwnd)
Form2.Show
MoveWindow Form2.hwnd, 0, 0, 100, 100
End Sub

Private Sub Command1_Click()
MoveWindow Form2.hwnd, 100, 100, 100, 100
End Sub

Private Sub Form_Unload(Cancel As Integer)
Unload Form2
End
End Sub

Private Sub MoveWindow(hwnd As Long, Top As Long, Left As Long, Width As Long, Height As Long)
Dim ret As Long
Dim wp As WINDOWPLACEMENT
Dim p As POINTAPI
Dim r As RECT
wp.Length = Len(wp)
wp.showCmd = 1
p.x = 0: p.y = 0
wp.ptMaxPosition = p
wp.ptMinPosition = p
r.Bottom = Top + Height
r.Left = Left
r.Right = Left + Width
r.Top = Top
wp.rcNormalPosition = r
ret = SetWindowPlacement(hwnd, wp)
End Sub

Ответить

Номер ответа: 4
Автор ответа:
 Tur



ICQ: 201446364 

Вопросов: 22
Ответов: 72
 Профиль | | #4 Добавлено: 30.12.06 20:28
Серёга, большое спасибо! Все работает! Лед тронулся!

HACKER, я не понял о чем ты: ScaleMode = vbPixel. Единицы измерения пространства вроде бы не существенны в данном случае.

Djon, ты прав, я ошибся, надо было так: из точки
Left = 0,Top = 1000 в точку Left = 3000,Top = 1000 со степом в 10. Серегин вариант решает эту проблему.

Ответить

Номер ответа: 5
Автор ответа:
 Tur



ICQ: 201446364 

Вопросов: 22
Ответов: 72
 Профиль | | #5 Добавлено: 30.12.06 23:26
Все таки неясно как двигать мышью вдоль X дочерний форм внутри родительского.
'Form2 - дочерний
Dim X1 as Single

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then X1 = X
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
  Call Form1.MoveWindow(Form2.hwnd, 100, X - X1, 100, 100)
End If
End Sub

Не понимаю почему это не работает. Может быть есть у кого какие-нибудь мысли?

Ответить

Номер ответа: 6
Автор ответа:
 Tur



ICQ: 201446364 

Вопросов: 22
Ответов: 72
 Профиль | | #6 Добавлено: 30.12.06 23:26
Все таки неясно как двигать мышью вдоль X дочерний форм внутри родительского.
'Form2 - дочерний
Dim X1 as Single

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then X1 = X
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
  Call Form1.MoveWindow(Form2.hwnd, 100, X - X1, 100, 100)
End If
End Sub

Не понимаю почему это не работает. Может быть есть у кого какие-нибудь мысли?

Ответить

Номер ответа: 7
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #7 Добавлено: 31.12.06 02:16
HACKER, я не понял о чем ты: ScaleMode = vbPixel. Единицы измерения пространства вроде бы не существенны в данном случае.

Я сам мало что понял, но т.к. код приведённой тобой в самом начале действительно рабочий, при этом ты говориш что форма не двигается, я думал что трабл именно в единицах измерения...

Ответить

Номер ответа: 8
Автор ответа:
 Tur



ICQ: 201446364 

Вопросов: 22
Ответов: 72
 Профиль | | #8 Добавлено: 31.12.06 11:15
HACKER, привет! Обрати внимание на мой предыдущий пост. Не удается мышью двигать дочерний форм. Я уже подумываю отказаться от этой идеи и сделать полупрозрачной пикче или лабел, т.е. объекты с которыми не возникает проблем с передвиженим их мышкой. Но пикче полупрозрачной сделать пока не удалось, а у лабела есть свойство BackStyle = 0 Transparent, т.е. 100% прозрачность, т.е. без цвета, т.е. дела мои дрянь, т.е. слишком много пустой возьни. Еще осталось попытаться пришить к прозрачности лэйбела цвет полупрозрачный

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам