Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Как определить left формы в пикселях? Добавлено: 16.02.06 19:23  

Автор вопроса:  FIX | ICQ: 348680795 
В теме тот самый вопрос.

Ответить

  Ответы Всего ответов: 13  

Номер ответа: 1
Автор ответа:
 [root]



Вопросов: 45
Ответов: 1212
 Web-сайт: bit.pirit.info
 Профиль | | #1
Добавлено: 16.02.06 19:55
А для чего если не секрет?

Вот те лефт в твипах:
Private Sub Command1_Click()
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-сайт: bit.pirit.info
 Профиль | | #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-сайт: bit.pirit.info
 Профиль | | #7
Добавлено: 16.02.06 20:30

Можно так попробовать, только по верхней границе формы, а не бордюра.

Форма 1:
Option Explicit
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:
Option Explicit

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-сайт: sur.hotbox.ru/
 Профиль | | #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

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам