Страница: 1 |
Страница: 1 |
Вопрос: Как определить left формы в пикселях?
Добавлено: 16.02.06 19:23
Автор вопроса: FIX | ICQ: 348680795
В теме тот самый вопрос.
Ответы
Всего ответов: 13
Номер ответа: 1
Автор ответа:
[root]
Вопросов: 45
Ответов: 1212
Web-сайт:
Профиль | | #1
Добавлено: 16.02.06 19:55
А для чего если не секрет?
Вот те лефт в твипах:
Label1.Caption = Form1.Left
End Sub
А вот ради примера разрешение экрана в пикселях:
Private Sub Command1_Click()
'Объявить переменные
Dim VisotaScr As Long 'для высоты
Dim ShirinaScr As Long 'для ширины
VisotaScr = Screen.Height / Screen.TwipsPerPixelX 'узнаем ширину экрана и преобразовываем ее в пиксели
ShirinaScr = Screen.Width / Screen.TwipsPerPixelY 'узнаем высоту экрана и преобразовываем ее в пиксели
Text1 = VisotaScr & " x " & ShirinaScr 'выводим результат в Text1
End Sub
Номер ответа: 2
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #2
Добавлено: 16.02.06 19:58
Me.Left
or
Public Sub GetWindowsRECT(hwnd As Long, ProcID As Integer, Height As Integer, Top As Integer, Left As Integer, Witch As Integer)
'Возвращает информацию о окне: кординаты, высоту, ширину
Dim rctTemp As RECT
GetWindowThreadProcessId hwnd, lngProcID
GetWindowRect hwnd, rctTemp
'Load the labels with the info retrieved.
ProcID = lngProcID
Top = rctTemp.Top
Left = rctTemp.Left
Height = rctTemp.Bottom - Top
Witch = rctTemp.Right - Left
End Sub
API сам...
Номер ответа: 3
Автор ответа:
FIX
ICQ: 348680795
Вопросов: 39
Ответов: 62
Профиль | | #3
Добавлено: 16.02.06 20:05
я использую функцию GetCursorPos, если кто не знает - она возвращает координаты курсора мышки. Так вот: у меня две формы. В первой - при наведении мышки над верхней границей формы должна появлятся вторая, расположенная выше. Эт я сделал. Но она также должна и исчезать(причём тогда когда мышка не на верхней границе первой формы и не на второй форме). Думую без этой функции не обойтись.
Номер ответа: 4
Автор ответа:
[root]
Вопросов: 45
Ответов: 1212
Web-сайт:
Профиль | | #4
Добавлено: 16.02.06 20:15
Дык ты и проверяй когда мышь выехала за границу формы => прячь
Размер же второй формы фиксированный?
вышла прячь
Номер ответа: 5
Автор ответа:
FIX
ICQ: 348680795
Вопросов: 39
Ответов: 62
Профиль | | #5
Добавлено: 16.02.06 20:26
[root] я так и делаю с помощью GetCursorPos. GetCursorPos -вовращает в пикселях, а чтоб проверить границы Form1.left в твипах . Надо как-то либо все в твипах, либо все в писелях.
Номер ответа: 6
Автор ответа:
FIX
ICQ: 348680795
Вопросов: 39
Ответов: 62
Профиль | | #6
Добавлено: 16.02.06 20:29
т. е. я хочу сказать, что когда мышка ни на 1-ой ни на 2-ой формах, то 2-ая исчезает.
Номер ответа: 7
Автор ответа:
[root]
Вопросов: 45
Ответов: 1212
Web-сайт:
Профиль | | #7
Добавлено: 16.02.06 20:30
Можно так попробовать, только по верхней границе формы, а не бордюра.
Форма 1:
Private Sub Form_Load()
Form1.WindowState = 2
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If X = 0 And Y = 0 Then
Form2.Visible = True
Else
Form2.Visible = False
End If
End Sub
Форма 2:
Private Sub Form_Load()
Form2.Left = 0
Form2.Top = 0
End Sub
ерунда какая то
Номер ответа: 8
Автор ответа:
FIX
ICQ: 348680795
Вопросов: 39
Ответов: 62
Профиль | | #8
Добавлено: 16.02.06 20:32
[HACKER] а без API ни как не обойтись?
Номер ответа: 9
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #9
Добавлено: 16.02.06 23:02
что за не определённость? Тебе Mouse-out c формы словить? - на!
Private Sub Timer1_Timer()
Dim mousePt As POINTAPI
GetCursorPos mousePt
'Mouse out!
If WindowFromPoint(mousePt.x, mousePt.Y) <> Me.hWnd Then
MsgBox "ку-ку, это маус-аут!"
End If
End Sub
таймером (можно API таймером) проще всего, вообще конечно масса способов...
По поводу API... Ты что сам декларации найти неможешь? В вб комплектом
есть API Text Viewer есть, в пуске где вб ищи... в него текстовичёк
WIN32API.TXT и ищеш нужную апи, клацаешь, внизу её декларация,
копируешь в вб вставляешь... Нет мне не влом, у меня просто в модуле
API Private куча целая там найти что-то - долго...
Номер ответа: 10
Автор ответа:
Sur
ICQ: 1249088
Вопросов: 10
Ответов: 304
Web-сайт:
Профиль | | #10
Добавлено: 17.02.06 12:14
>Как определить left формы в пикселях
Label2.Caption = ScaleX(Form1.Left, Form1.ScaleMode, vbPixels)
Номер ответа: 11
Автор ответа:
FIX
ICQ: 348680795
Вопросов: 39
Ответов: 62
Профиль | | #11
Добавлено: 17.02.06 13:22
Спасибо ! Именно то, что мне надо!
Номер ответа: 12
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #12
Добавлено: 20.02.06 10:28
Хе... А не проще по событиям MouseEnter и MouseLeave?
Номер ответа: 13
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #13
Добавлено: 20.02.06 10:40
Зы, пардон, никакого MouseEnter.
Для наглядности пример из классики API-Guide
'In a form (Form1)
Private Sub Form_Click()
Dim ET As TRACKMOUSEEVENTTYPE
'initialize structure
ET.cbSize = Len(ET)
ET.hwndTrack = Me.hWnd
ET.dwFlags = TME_LEAVE
'start the tracking
TrackMouseEvent ET
'show a message to the user
Me.Print "Move the mouse cursor outside the form" + vbCrLf + "to generate a WM_MOUSELEAVE event"
End Sub
Private Sub Form_Load()
'KPD-Team 2001
'URL: KPDTeam@Allapi.net
'E-Mail: KPDTeam@Allapi.net
'show a warning message
MsgBox "WARNING: This sample uses subclassing." + vbCrLf + "To end this program, always use the X button of the form." + vbCrLf + "Do not use VB's Stop button and do not use the 'End' keyword in your VB code." + vbCrLf + vbCrLf + "For more information about subclassing, check out" + vbCrLf + "our subclassing tutorial at http://www.allapi.net/", vbExclamation
'set the graphics mode to persistent
Me.AutoRedraw = True
Me.Print "Click the form to begin"
'start subclassing this form
HookForm Me
End Sub
Private Sub Form_Unload(Cancel As Integer)
'stop subclassing this form
UnHookForm Me
End Sub
'In a module
Public Const TME_CANCEL = &H80000000
Public Const TME_HOVER = &H1&
Public Const TME_LEAVE = &H2&
Public Const TME_NONCLIENT = &H10&
Public Const TME_QUERY = &H40000000
Public Const WM_MOUSELEAVE = &H2A3&
Public Type TRACKMOUSEEVENTTYPE
cbSize As Long
dwFlags As Long
hwndTrack As Long
dwHoverTime As Long
End Type
Public Declare Function TrackMouseEvent Lib "user32" (lpEventTrack As TRACKMOUSEEVENTTYPE) As Long
Public Declare Function SetCursorPos Lib "user32.dll" (ByVal x As Long, ByVal y As Long) As Long
'Subclassing is explained in our subclassing tutorial at http://www.allapi.net/
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Const GWL_WNDPROC = (-4)
Public PrevProc As Long
Public Sub HookForm(F As Form)
PrevProc = SetWindowLong(F.hWnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Public Sub UnHookForm(F As Form)
SetWindowLong F.hWnd, GWL_WNDPROC, PrevProc
End Sub
Public Function WindowProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If uMsg = WM_MOUSELEAVE Then
'if we receive a WM_MOUSELEAVE message, show it
Form1.Print "The mouse left the form!"
End If
WindowProc = CallWindowProc(PrevProc, hWnd, uMsg, wParam, lParam)
End Function