Poloha kurzoru vzhledem k obrazovce   zodpovězená otázka

VB.NET

Zdravím,

chtěl bych se zeptat jak se dá zjistit poloha kurzoru vzhledem k obrazovce PC. Vím, že se to dělá nějak podle API, páč znám člověka co dělá VB6 a ten mi to řekl, jenže já se s těmi API ne a ne poprat...

A rád bych se taky zeptal, zda se dá (například pomocí API) posunout horní hranice monitoru, například tak, jak to umí WinAmp.

Děkuji za rady ;-)

Přeji hezký den

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

V udalosti MouseMove je parameter e.

e.X a e.Y vracajú polohu kurzora (e.X je Left, e.Y je Top)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To ovšem není úplně nejlepší řešení, protože pozice se vzhatuje k formuláři a ne k obrazovce. Pokud pohnu myší mimo formulář, událost se ani nevyvolá.

Pozici myši vzhledem k obrazovce najdete v Cursor.Position.X a Cursor.Position.Y.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Omlouvám se, ale ted nejsem doma a nemám na tomto PC visual basic, Vaše odpověď tedy znamená:

Dim PoziceX As Integer = Cursor.Position.X
Dim PoziceY As Integer = Cursor.Position.Y

je tento zápis správný?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Hádám, že lepší by bylo

Dim Pozice As Point = Cursor.Position

pak třeba

Label1.Text = Pozice.ToString

ale jde i

Label1.Text = Cursor.Position.ToString

Číst souřadnice X, Y jednotlivě jistě také jde, třeba

Label1.Text = Cursor.Position.X & ", " & Cursor.Position.Y

nebo jinak, podle toho, co děláte.

Otázkou je, jak vyvolat událost, když je myš mimo formulář. Možná opakovacím cyklem v Form1_MouseMove, ten funguje, i když formulář kurzorem opustíte, ale aby se cyklus spustil, musíte do něho nejprve kurzorem najet (amaterské dohady).

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Ke Cursor.Position

Zkusil jsem formulář s 1x Label, 2x Button

Label1.Text ukazuje polohu kurzoru

Button1 posune kurzor za Label1 - demonstruje tak i řízení polohy kurzoru přes Cursor.Position.

Button2 je pro ukončení

Přejede-li myš pozici X=600, smyčka čtení pozice kurzoru i mimo formulář se ukončí (ve Form1_Shown).

Public Class Form1
  Private Sub _
    Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
     Handles Me.Load
    Me.Left = 50
    Me.Top = 50
    Dim Pozice As Point
    Pozice.X = Me.Left + 100
    Pozice.Y = Me.Top + 100
    Cursor.Position = Pozice
  End Sub

  Private Sub _
    Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) _
    Handles Me.Shown
    Dim Pozice As Point
    Pozice.X += Me.Width + 100
    Pozice.Y += Me.Height + 100
    Cursor.Position = Pozice
    Do While Cursor.Position.X < 600
      Label1.Text = Cursor.Position.ToString
      Application.DoEvents()
    Loop
  End Sub

  Private Sub _
    Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles Button1.Click
    ' kurzor ukáže na konec Label1
    Cursor.Position = _
    New Point(Me.Left + 5 + Label1.Left + Label1.Width, Me.Top + 30 + _
    Label1.Top + Label1.Height)
  End Sub

  Private Sub _
    Button2_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles Button2.Click
    End
  End Sub
End Class

Odborníky prosím o posouzení kódu, zejména Application.DoEvents() - vyvolává občas výjimku.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Zdravím,

Ano, již jsem vyzkoušel a funguje, ale pořád jsem nedostal odpověď na druhou otázku, která zní: nemáte ponětí, jestli a jak se dá posunout horní hranice monitoru, podobně jak to umí WinAmp??

Děkuji a přeji hezký den

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Winamp nepoužívám a nevím, co myslíte horní hranicí monitoru. Chcete-li omezit pohyb kurzoru např. na min. Y=40, zkuste do opakovacího cyklu příkladu vložit:

If Cursor.Position.Y < 40 Then Cursor.Position = New Point(Cursor.Position.X, 40)
nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Zdravím,

každý, kdo WinAmp používá, a je natolik bystrý, že si všiml, že se dá dokovat, v, že se při dokování WinAmpu posune horní hranice monitoru. Horní hranice maximalizovaných aplikací je tedy na nějakých 28 pixelech, přičemž při normálním zobrazení je horní hranice zobrazovací části monitoru na standardní nule.

Nejsem si však jistý, jestli lze plochu pomocí VB odsadit...

Přeji hezký den

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback