Два вопроса по форме

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Gigahard
Бывалый
Бывалый
 
Сообщения: 253
Зарегистрирован: 24.07.2002 (Ср) 11:15
Откуда: Russia

Два вопроса по форме

Сообщение Gigahard » 16.04.2003 (Ср) 22:15

1 Как сделать форму поверх всех окон?
2 Как перетаскивать форму по экрану не через полоску синюю?

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 16.04.2003 (Ср) 23:04

1. Использовать АПИ ф-ю:

Dim Flags As Long

SetWindowPos Me.HWnd, -1, 0, 0, Me.Width / Screen.TwipsPerPixelX, Me.Height / Screen.TwipsPerPixelY, Flags

2. Использовать событие Form_MouseMove и перетаскивать форму куда надо, например:

Option Explicit

Dim OldX As Single
Dim OldY As Single
Dim Mx As Single, Dx As Single
Dim My As Single, Dy As Single
Dim Moving As Boolean

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Mx = X
My = Y
OldX = Me.Left
OldY = Me.Top
Moving = True
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Moving = True Then
MoveForm X, Y
End If
End Sub

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Moving = False
End Sub

Sub MoveForm(X As Single, Y As Single)
Dx = Mx - X
Dy = My - Y
Me.Left = OldX - Dx
Me.Top = OldY - Dy
OldX = Me.Left
OldY = Me.Top
End Sub

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 17.04.2003 (Чт) 4:10

Перетаскивать за форму грамотнее так:
Код: Выделить всё
'(код формы):
Const WM_NCLBUTTONDOWN = &HA1
Const HTCAPTION = 2
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As Long, ByVal wMsg As Long, _
  ByVal wParam As Long, lParam As Any) As Long
Private Declare Function ReleaseCapture Lib "user32" () As Long

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Call ReleaseCapture
    Call SendMessage(Me.hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&)
End Sub

Ronin_1978
Новичок
Новичок
 
Сообщения: 46
Зарегистрирован: 05.04.2003 (Сб) 14:42
Откуда: Москва

Сообщение Ronin_1978 » 17.04.2003 (Чт) 10:15

Перетаскивать форму можно ещё вот так:
Код: Выделить всё
Private xx As Integer
Private yy As Integer

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbRightButton Then PopupMenu Menu
If Button = vbLeftButton Then
xx = X
yy = Y
End If
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
Form1.Left = Form1.Left - (xx - X)
Form1.Top = Form1.Top - (yy - Y)
End If
End Sub


Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 17.04.2003 (Чт) 23:08

Верно! Но работать будет чуть быстрее,
если вместо
Form1.Top и Form1.Left
использовать
Form1.Move


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Хакер и гости: 88

    TopList