типа аська...

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

типа аська...

Сообщение drronnie » 30.03.2003 (Вс) 2:37

Ну от аськи тут далеко, просто вообще другой сабж в голову не пришёл... Короче нужно окно привязать к краю экрана, причём сделать так, чтобы на наше окно ничего другое не налезало...
типа как аську, когда при жимаешь к краю экрана, все развернувшиеся окна на неё не залазиют...

И на счёт аськи...
Кто зает, где взять сорсы аськного клиента?
Компиляция - перевод словесного поноса в машинный код.

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

Сообщение Amed » 30.03.2003 (Вс) 21:13

'Сначала делаешь окно поверх всех, а затем отслеживаешь его положение:

Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cX As Long, ByVal cY As Long, ByVal wFlags As Long) As Long

Const WM_NCLBUTTONDOWN = &HA1
'Окно "поверх всех"...
Const HWND_TOPMOST = -1
'Окно не "поверх всех"...
Const HWND_NOTOPMOST = -2
Const HTCAPTION = 2

Private Sub Form_Load()
Dim flags As Integer
Dim cX As Integer
Dim cY As Integer

cX = Screen.TwipsPerPixelX
cY = Screen.TwipsPerPixelY

With frmMain

SetWindowPos .hWnd, HWND_TOPMOST, 100, 100, .Width / cX, .Height / cY, flags
End With
Dir = True
End Sub

'Интервал таймера - около 100 мс...
Private Sub tmrCheckPos_Timer()
If frmMain.Left <= 500 Then frmMain.Left = 0
If frmMain.Top <= 500 Then frmMain.Top = 0
If frmMain.Left >= Screen.Width - frmMain.ScaleWidth - 500 Then frmMain.Left = Screen.Width - frmMain.Width
If frmMain.Top <= 500 Then frmMain.Top = 0
End Sub

'Надеюсь, всё понятно? Если что, ещё объясню...

У меня где-то были исходники аськи на vb, т.е. протокола общения по аське в другом интерфейсе... Если надо, я вышлю на мыло :)

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Сообщение drronnie » 31.03.2003 (Пн) 0:35

Спасибо....
Понятно в принципе всё.... но не совсем...
Во первых к чему строка dir=true ?

И ещё... я в принципе не это просил....
Просто сказал непонятно, мне нужно чтобы форма была не просто поверх всех окон, а как бы....
Ну короче допустим у нас рабочая область 1027х(768 - высота панели задач). Если нажать на кнопку "развернуть" размеры окна станут равны этой области... мне нужно, чтобы когда моё приложение допутим прилипает к правой стороне экрана - размеры рабочей области по горизонтали уменьшились на ширину моей формы....
Так ворде бы понятнее...

На счёт аськи - пришли пожалуйста...
Компиляция - перевод словесного поноса в машинный код.

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Сообщение drronnie » 02.04.2003 (Ср) 0:18

ну народ.... ну надо....
Компиляция - перевод словесного поноса в машинный код.

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

Сообщение Amed » 02.04.2003 (Ср) 5:50

Строка
Dir=True
случайно осталась :oops:
Я её случайно не удалил...

А как сделать так, я не знаю :( И даже предположить не могу...

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

Сообщение Amed » 02.04.2003 (Ср) 6:15

Хотя нет, кажется, знаю:

'Сначала ищем "верхнее" окно с помощью функции GetActiveWindow,
'Затем ищем его положение и размеры:
GetWindowRect
'И изменяем их на нужные с помощью
SetWindowPos
'Нам понадобится тип RECT...
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type


Далее попробуй сам написать...

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 02.04.2003 (Ср) 7:10

вот нашел в недрах своего архива пример.
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Сообщение drronnie » 02.04.2003 (Ср) 7:25

Т.е ты предлагаешь где-нибудь (ну в таймере например) отслеживать хэндлы всех окон, получать координаты и размеры, и те которые нас не устраивают (а это те, которые сверху нашего окна) просто напросто менять их размер?

Не знаю... чего-то такой метод не очень мне по душе.... тем-более, что окна всё-таки будут разворачиваться, а только потом убираться... а вот в случае с ICQ (да таких вещей много... взять ту же боковую панель у API-Guide....) разворачивающееся окно даже не думает выйти за границу отведённой области...
Компиляция - перевод словесного поноса в машинный код.

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 02.04.2003 (Ср) 7:33

drronnie писал(а):Т.е ты предлагаешь где-нибудь (ну в таймере например) отслеживать хэндлы всех окон, получать координаты и размеры, и те которые нас не устраивают (а это те, которые сверху нашего окна) просто напросто менять их размер?

Не знаю... чего-то такой метод не очень мне по душе.... тем-более, что окна всё-таки будут разворачиваться, а только потом убираться... а вот в случае с ICQ (да таких вещей много... взять ту же боковую панель у API-Guide....) разворачивающееся окно даже не думает выйти за границу отведённой области...

скачай пример и все увидишь... точно тебе говорю
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

drronnie
Постоялец
Постоялец
 
Сообщения: 793
Зарегистрирован: 04.03.2002 (Пн) 22:29
Откуда: Украина, Алчевск

Сообщение drronnie » 04.04.2003 (Пт) 0:46

Спасибо...
А с кодом ещё надо разобраться.....
Компиляция - перевод словесного поноса в машинный код.


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

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

Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 54

    TopList