Форма возле кнопки :)!

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

Форма возле кнопки :)!

Сообщение GPP » 25.08.2007 (Сб) 17:17

Здравствуйте! Подскажите пожалуйста, а лучше дайте простой пример. Как мне сделать так, чтобы при нажатии на кнопку рядом с ней появлялась форма типа всплывающего меню. Как в QIP(выбор смайлов). Заранее ОГРОМНОЕ СПАСИБО!
GPP(c) Gorlo Pavel Programming

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

Сообщение tyomitch » 25.08.2007 (Сб) 17:22

Мда.
Сизиф был обречён вечно закатывать на гору камень.
GPP, видимо, обречён вечно писать свой удивительный чат.
Изображение

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Сообщение dr.MIG » 25.08.2007 (Сб) 17:41

:)
Если по теме, то установить для формы, которая появляется свойства Top и Left соответственно желаемой позиции.
Salus populi suprema lex

GPP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 351
Зарегистрирован: 02.11.2005 (Ср) 8:02
Откуда: г.Невельск о.Сахалин

Сообщение GPP » 25.08.2007 (Сб) 17:57

tyomitch, МДА!!! НУ ты даешь пацан... У тебя что неприязнь какая ко мне или что? Ну писал я чат когда-то и написал... Сейчас пишу мессенджер... И что??? Лучше помог бы...! Вообще я заметил, что местные модераторы и всякие там ГУРУ любят "похахотать"... Я понимаю ВЫ там умные все... просто супер... Вы наверное и не подозреваете что некоторые ваши высказывания могут и обидеть...
GPP(c) Gorlo Pavel Programming

t116
Бывалый
Бывалый
 
Сообщения: 209
Зарегистрирован: 12.01.2007 (Пт) 12:11

Сообщение t116 » 25.08.2007 (Сб) 19:10

Используй API-функцию GetWindowRect чтобы узнать координаты нажимаемой кнопки, а далее делай так, как написал dr.MIG или используй функцию SetWindowPos.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Пример

Сообщение Денис » 25.08.2007 (Сб) 23:23

А можно и без WinAPI!
Выкладываю пример:
Вложения
prj.rar
Пример
(2.16 Кб) Скачиваний: 93
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Watts[]n!
Постоялец
Постоялец
 
Сообщения: 573
Зарегистрирован: 11.02.2007 (Вс) 0:19

Сообщение Watts[]n! » 25.08.2007 (Сб) 23:23

Подробнее:

Код: Выделить всё
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Type POINTAPI
x As Long
y As Long
End Type

Private Sub Form_Load()
    Dim cPos As POINTAPI
    GetCursorPos cPos

    Me.Top = cPos.y * 15
    Me.Left = cPos.x * 15
End Sub


Лично я так делал, все нормально работает.

t116
Бывалый
Бывалый
 
Сообщения: 209
Зарегистрирован: 12.01.2007 (Пт) 12:11

Re: Пример

Сообщение t116 » 25.08.2007 (Сб) 23:31

Денис писал(а):А можно и без WinAPI!


Без API напрямую можно обойтись в том случае, если окно программы имеет стиль Borders=None.

to Watts[]n!

Твой пример указывает в качестве начальных координат формы координаты курсора мыши, а человек хочет под кнопкой чтобы. :)

Watts[]n!
Постоялец
Постоялец
 
Сообщения: 573
Зарегистрирован: 11.02.2007 (Вс) 0:19

Сообщение Watts[]n! » 25.08.2007 (Сб) 23:33

Что-то глючит меня :?
Перепутал все.

t116
Бывалый
Бывалый
 
Сообщения: 209
Зарегистрирован: 12.01.2007 (Пт) 12:11

Сообщение t116 » 25.08.2007 (Сб) 23:44

Вот пример.
Вложения
example.rar
Пример с применением API функций.
(2.02 Кб) Скачиваний: 76
Последний раз редактировалось t116 26.08.2007 (Вс) 2:19, всего редактировалось 1 раз.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Пример

Сообщение Денис » 26.08.2007 (Вс) 0:08

t116 писал(а):Без API напрямую можно обойтись в том случае, если окно программы имеет стиль Borders=None.


Обоснуй.
(неужели, если я поставлю Border<>0 - окно не будеть появляться по методу Show? LOL
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

t116
Бывалый
Бывалый
 
Сообщения: 209
Зарегистрирован: 12.01.2007 (Пт) 12:11

Re: Пример

Сообщение t116 » 26.08.2007 (Вс) 0:17

Денис писал(а):
t116 писал(а):Без API напрямую можно обойтись в том случае, если окно программы имеет стиль Borders=None.


Обоснуй.
(неужели, если я поставлю Border<>0 - окно не будеть появляться по методу Show? LOL


Будет появляться, но положение относительно кнопки будет уже другое. Будет не "под кнопкой", а "на ней", как в твоем примере.

t116
Бывалый
Бывалый
 
Сообщения: 209
Зарегистрирован: 12.01.2007 (Пт) 12:11

Сообщение t116 » 26.08.2007 (Вс) 12:20

Watts[]n! писал(а):Что-то глючит меня :?
Перепутал все.


Не, Watts[]n!, это меня глючит, я перепутал! :) Автор написал чтобы было как в QIP, а я его перепутал с мирандой. В квипе форма появляется под курсором мыши, а в миранде - под кнопкой. Так что твой пример больше подходит.

Watts[]n!
Постоялец
Постоялец
 
Сообщения: 573
Зарегистрирован: 11.02.2007 (Вс) 0:19

Сообщение Watts[]n! » 26.08.2007 (Вс) 16:13

Ужос :) Как же всех глючит!

udpn
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 24.07.2007 (Вт) 11:43

Сообщение udpn » 30.08.2007 (Чт) 8:25

Если пользоваться формой, то теряется выделение с главного окна. Лучше используй PictureBox, но тогда надо позаботиться, чтобы меню не выползало за края родителя.
Или можно сделать так, как в MDI формах - одновременно выделено окно и его ребенок. Однако я не знаю как это реализовать, может кто подскажет
Не ищите смысла там, где его не ложили (c) проф. В.В. Горяйнов

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 30.08.2007 (Чт) 12:33

udpn а ты кип открой и посмотри - при открытии смайликов уходит фокус с окна чата :!: :evil:

GPP не дрейфь - я тоже "вечно" пишу свой собственный тетрис. :wink:
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Сообщение burik » 30.08.2007 (Чт) 15:05

Денис писал(а):udpn а ты кип открой и посмотри - при открытии смайликов уходит фокус с окна чата :!: :evil:

GPP не дрейфь - я тоже "вечно" пишу свой собственный тетрис. :wink:

Денис, у меня в IQP при открытии окошка смайлов окно сообщений фокус не теряет..

Для этого (как мне подсказали пару дней назад) надо установить стиль
Код: Выделить всё

Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Const GWL_STYLE        As Long = (-16)
Const WS_CHILD         As Long = &H40000000

затем
Код: Выделить всё

retval = SetWindowLong(Form2.hWnd, GWL_STYLE, WS_CHILD)
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман


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

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

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

    TopList