top окна

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
alexmckey
Новичок
Новичок
 
Сообщения: 42
Зарегистрирован: 25.04.2005 (Пн) 17:35

top окна

Сообщение alexmckey » 27.08.2006 (Вс) 21:08

Здравствуйте все!

проблемка в следующем:
допустим имеется форма размером 500x500 pxl с BorderStyle=0
если кликнув по центру и двигая её с помощью

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, _
x As Single, y As Single)
Call ReleaseCapture
Call SendMessage(hwnd, &HA1, 2, 0&)
End Sub

перемещать курсор в top экрана и
отпустить мышь , то форма опустится вниз

как сделать так ,чтобы она оставалась на месте
(как например у winamp)
mckey

Efiop
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 69
Зарегистрирован: 06.06.2006 (Вт) 12:14
Откуда: РК

Сообщение Efiop » 28.08.2006 (Пн) 5:53

alexmckey, ты можешь подробней объяснить? Как у какого Винампа, какой версии. У мня на Винампе такого нет, как ты говоришь, он не остается на месте. И что те именно нужно, подробнее.
А может ты имеешь ввиду то, что Винам только за верхний заголовок таскается. Тогда у тебя есть y As Single, используй положение мыши в условии.

alexmckey
Новичок
Новичок
 
Сообщения: 42
Зарегистрирован: 25.04.2005 (Пн) 17:35

Сообщение alexmckey » 28.08.2006 (Пн) 6:58

Efiop
winamp 5.05
если зацепить playlist или главное окно за нижний край и
задвинуть за верхний край экрана ,то эти окна остаются и
не опускаются вниз
мне нужно тоже самое с моим окном
mckey

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 28.08.2006 (Пн) 7:21

Efiop писал(а):используй положение мыши в условии.
Т.е.
Код: Выделить всё
If Mouse.Top = СильноБольшой then НеНадоБольшеОпускать

Для определения размеров экрана используй screen
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

alexmckey
Новичок
Новичок
 
Сообщения: 42
Зарегистрирован: 25.04.2005 (Пн) 17:35

Сообщение alexmckey » 28.08.2006 (Пн) 7:40

vvs_adm

а как реализовать "НеНадоБольшеОпускать"
mckey

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 28.08.2006 (Пн) 8:14

А как ты опускаешь? Так вот этого делать и не надо.
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 28.08.2006 (Пн) 8:19

vvs_adm, alexmckey уже показал свой Form_MouseDown.
Понятно, как он опускает?
Изображение

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 28.08.2006 (Пн) 8:21

Конечно понятно. Просто интересно, понятно ли ему? А без VB поэкспериментировать не могу :( Потому как если просто выйти из процедуры, то она и влево\вправо не будет двигаться при касании нижней границы...

P.S.: стормозил :( При таскании формы за заголовок от мыши то сообщений никаких нету :( И у формы нету Form_Move(). А зря. SubClasser нужен будет.
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

alexmckey
Новичок
Новичок
 
Сообщения: 42
Зарегистрирован: 25.04.2005 (Пн) 17:35

Re: top окна

Сообщение alexmckey » 17.10.2011 (Пн) 4:04

Здравствуйте все! Проблемка в следующем: Допустим, имеется окно размером `500x500` пикселов и `BorderStyle=0`. Если кликнув по центру и двигая её с помощью:

Код: Выделить всё
  Private Declare Function ReleaseCapture Lib "user32.dll" () As Long
    Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" ( _
          ByVal hwnd As Long, _
          ByVal wMsg As Long, _
          ByVal wParam As Long, _
          ByRef lParam As Any) As Long
    Private Const HTCAPTION As Long = 2
    Private Const WM_NCLBUTTONDOWN As Long = &HA1
'---------------------------------------------------------------------------------

    Private Sub Form_MouseDown(Button As Integer, Shift As Integer, _
    x As Single, y As Single)
        Call ReleaseCapture
        Call SendMessage(hwnd, WM_NCLBUTTONDOWN,HTCAPTION, 0&)
    End Sub



Перемещать курсор в верх экрана и отпустить мышь, то форма опустится вниз. Как сделать так, чтобы она оставалась на месте, как, например, у winamp?
mckey

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: top окна

Сообщение Хакер » 18.10.2011 (Вт) 21:19

Не использоваться этот глупый код, а написать нормальный, обеспечивающий пермещение окна.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

alexmckey
Новичок
Новичок
 
Сообщения: 42
Зарегистрирован: 25.04.2005 (Пн) 17:35

Re: top окна

Сообщение alexmckey » 22.10.2011 (Сб) 3:04

Уважаемый ХАКЕР,ситуация следующая:
при событии mousedown одного окна над ним и под курсором
появляется второе окно,которое необходимо перемещать
с помощью уже не глупого, а нормального кода , но без
mousedown по второму окну
как быть ?
mckey

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: top окна

Сообщение Mikle » 25.10.2011 (Вт) 16:14

По несколько сумбурному описанию не очень понятна суть проблемы. Но вообще, зачем ReleaseCapture, SendMessage?
Окна можно так таскать:
Код: Выделить всё
Option Explicit

Dim MoveMode As Boolean, meX As Single, meY As Single

'Таскаем форму мышкой за любое место
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  MoveMode = True
  meX = X: meY = Y
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  If MoveMode Then
    Move Left + (X - meX) * Screen.TwipsPerPixelX, Top + (Y - meY) * Screen.TwipsPerPixelY
  End If
End Sub

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

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: top окна

Сообщение ger_kar » 25.10.2011 (Вт) 18:28

Mikle писал(а):Окна можно так таскать:
Move Left + (X - meX) * Screen.TwipsPerPixelX, Top + (Y - meY) * Screen.TwipsPerPixelY

А *Screen.TwipsPerPixelX и * Screen.TwipsPerPixelY Зачем? Так окно будет убегать за пределы экрана и скрываться из виду, можно просто так:

Код: Выделить всё
Option Explicit

Dim MoveMode As Boolean, meX As Single, meY As Single

'Таскаем форму мышкой за любое место
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  MoveMode = True
  meX = X: meY = Y
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  If MoveMode Then
    Move Left + (X - meX), Top + (Y - meY)
  End If
End Sub

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  MoveMode = False
  Me.Visible = True
End Sub

У себя проверил, так точно работает
Бороться и искать, найти и перепрятать

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: top окна

Сообщение Mikle » 25.10.2011 (Вт) 18:38

У меня ScaleMode формы = vbPixels, забыл уточнить.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: top окна

Сообщение ger_kar » 25.10.2011 (Вт) 18:53

Ну тогда то оно да, а я кстати сам про это забыл, видимо потому, что никогда не пользовался Пискелями :)
Бороться и искать, найти и перепрятать


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

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

Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 25

    TopList