Форма в углу экрана?

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

Форма в углу экрана?

Сообщение GPP » 21.10.2007 (Вс) 8:10

Здравствуйте! Как программно сделать так чтобы при старте формы она появлялась в правом верхнем углу экрана?
GPP(c) Gorlo Pavel Programming

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 21.10.2007 (Вс) 11:11

Move
Lasciate ogni speranza, voi ch'entrate.

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Re: Форма в углу экрана?

Сообщение netdemon » 21.10.2007 (Вс) 13:44

GPP писал(а):Здравствуйте! Как программно сделать так чтобы при старте формы она появлялась в правом верхнем углу экрана?


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

Sub Form_Load()

Me.Move Screen.Width - Me.Width, 0    ' Верхний правый угол
Me.Move 0, 0                                     ' Верхний левый угол
Me.Move 0, Screen.Height-Me.Height    'Нижний левый
Me.Move Screen.Width - Me.Width, Screen.Height-Me.Height ' НИжний правый
End Sub

Лишь разум потерянный бесповоротно мною. Наполнить может сердце мне тоской.
Нельзя обнять необъятное и впихнуть невпихуемое.

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

Сообщение burik » 21.10.2007 (Вс) 22:35

ИМХО, неплохо учесть высоту Task Bar'а, а то окно за ним скрывается.
Код: Выделить всё
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long

Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type

Private Sub Form_Load()
Dim taskRECT As RECT, Result As Long

    Result = FindWindow("Shell_TrayWnd", "")
    Result = GetWindowRect(Result, taskRECT)

    Me.Move Screen.Width - Me.Width, 0    ' Верхний правый угол
    Me.Move 0, 0                                     ' Верхний левый угол
    Me.Move 0, Screen.Height - Me.Height - (Screen.Height / 800) * (taskRECT.Bottom - taskRECT.Top) 'Нижний левый
    Me.Move Screen.Width - Me.Width, Screen.Height - Me.Height - (Screen.Height / 800) * (taskRECT.Bottom - taskRECT.Top) ' НИжний правый

End Sub
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Сообщение netdemon » 21.10.2007 (Вс) 22:43

burik

Согласен. :D Так намного лучше :D

Только одно но.

Вот это фигня:
Код: Выделить всё

Me.Move 0, Screen.Height - Me.Height -(Me.Height\800)* (taskRECT.Bottom - taskRECT.Top)  ' Нижний правый
    Me.Move Screen.Width - Me.Width, Screen.Height - Me.Height - (Me.Height\800)*(taskRECT.Bottom - taskRECT.Top)  ' Нижний левый

Это косяк. При смене разрешения получится фигня. Попробуй, сам увидишь.



Надо так:

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


  Me.Move 0, Screen.Height - Me.Height - (taskRECT.Bottom - taskRECT.Top) * Screen.TwipsPerPixelY ' Нижний правый
    Me.Move Screen.Width - Me.Width, Screen.Height - Me.Height - (taskRECT.Bottom - taskRECT.Top) * Screen.TwipsPerPixelY ' Нижний левый

Лишь разум потерянный бесповоротно мною. Наполнить может сердце мне тоской.
Нельзя обнять необъятное и впихнуть невпихуемое.

Arcady_XQST
Обычный пользователь
Обычный пользователь
 
Сообщения: 85
Зарегистрирован: 17.09.2007 (Пн) 1:27
Откуда: Russia, Bryansk

Сообщение Arcady_XQST » 21.10.2007 (Вс) 23:28

Хе-хе! А если таскбар вверху/слева/справа? :D
// тили-тили, трали-вали
if (jsLoaded) {
// это дело мне по силе, откажусь теперь едва ли
} else {
// это мы не проходили, это нам не задавали
}

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

Сообщение Хакер » 21.10.2007 (Вс) 23:40

SPI_WORKAREA.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Сообщение t116 » 22.10.2007 (Пн) 0:19

Если подробнее, то

Код: Выделить всё
Dim R As RECT
Call SystemParametersInfo(SPI_GETWORKAREA, 0, R, 0)
Me.Move (R.Right * Screen.TwipsPerPixelX) - Me.Width, R.Top * Screen.TwipsPerPixelY

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

Сообщение burik » 22.10.2007 (Пн) 15:44

Я только идею высказал.. Имея RECT taskbar'a можно определить где он находится. Автору остается только додумать и реализовать.
P. S. netdemon, сморозил слегка.. :oops:
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

netdemon
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 179
Зарегистрирован: 04.09.2007 (Вт) 15:51

Сообщение netdemon » 23.10.2007 (Вт) 13:25

burik писал(а):Я только идею высказал.. Имея RECT taskbar'a можно определить где он находится. Автору остается только додумать и реализовать.
P. S. netdemon, сморозил слегка.. :oops:


И где же я сморозил? Там где заменил твоЁ
Код: Выделить всё


(Me.Height\800)


на

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

* Screen.TwipsPerPixelY


Так что сморозил ты. Имея RECT Таск Бара ему придётся ещё и проверять где он. А имея RECT рабочей области Десктопа. Ему надо будет ТОлько подставить эти значения в мой код вместо Screen.Width , Screen.Height. И вместо Координат начальных координат (нулей).

Так что Хакер и t116 Предложили самый правильный вариант.

А эта фигня у меня не работает
Код: Выделить всё

(Me.Height\800)

Потомучто у меня разрешение экрана 1280х960
Лишь разум потерянный бесповоротно мною. Наполнить может сердце мне тоской.
Нельзя обнять необъятное и впихнуть невпихуемое.

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

Сообщение burik » 23.10.2007 (Вт) 14:01

netdemon, извини, но ты не понял.. Я имел ввиду что я сморозил слегка.. :)
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман


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

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

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

    TopList  
cron