myš a directX   zodpovězená otázka

VB.NET, DirectX

Dobrý den,trochu sem si hrál a potřeboval bych zjistit zda je myš na tom nebo onom místě a pokud ano,a je stisknuté tlačítko, provést příkaz.Problém nastane po kliknutí,celá aplikace DirectX se "kousne" a nejde vypnout,dělá mi to nejspíše příkaz ME.Close()

duležité je ale že se mi nepovedlo vytvořit podmínku která řekne "pokud je miš na obrázku...." dovedu jen určit souřadnice jednoho pixeli třeba rohu obrázku,potřeboval bych ale celý obrázek

pokud někdo poradí děkuji za odpověď

private sub form1_click(byval sender as object,byval e as system.eventargs)handles me.click
'ukončí program po kliknutí na danou pozici
if top=1OO and left=1OO then
me.close()
end if
end sub

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

Příklad s obrázkem 50x50px:

If(top>99 and top<151 and left > 99 and left < 151) Then
  End ' je lepší použít end, protože ten ukončí celou aplikaci, ne jen form
End if

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

A ještě jedna věc: DX má pro hlídání myši k klávesnice vlastní třídu, neumím s ní, ale pochybuji nad spolehlivostí zachytávání událostí myši na formuláři.

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

Tak jsem to zkusil a bohužel to nedělá vubec nic.

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

Tak to je mi líto, snad abych Vám tedy doporučil zaměřit se na tu DX třídu pro Input. Zkuste hledat na Internetu.

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

Pokud tu nikdo neporadí tak budu muset :o).

Ale pokud to ani zde nikdo neví,pak nevim jestli to někde na netu najdu,přecejen já anglicky neumim.

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

Tak se zkuste podívat do referencí, u DirectX by měla být také knihovna DirectInput. Já se zatím podívám na Internet pro nějaké ukázky, z kterých by se dalo vyčíst něco o DInput.

Možná se ozve i někdo další (?).

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

Vím, že Vám to asi nepomůže, ale našel jsem na MSDN tento tutoriál:

Je to pro C#, ale já nejsem schopen to transformovat na VB .NET.

Hodit se ale může, takže tady je odkaz:

http://msdn.microsoft.com/archive/defaul...Creating_the_DirectInput_Mouse_Device.asp

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

Bohužel mi to opravdu nepomohlo,ale děkuji za snahu.i to se cení.Ale měl bych nahlásit chybu,nevím zda to vidí všichni ale u předchozího příspěvku je link i za tečkama vidět,zasahuje mimo stránku.

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

To je spíš chyba layoutu, že ten link přesahuje, podle mě to tak horké není.

Ale je tu ještě jedna chyba: link se neparsoval celý, ale není to ani tak chyba, jako něco s čím se můsí počítat a s čím se asi nedá nic dělat, protože určitě není jednoduché zjistit programově, která část textu je link.

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

Nevím, jak moc poloha kurzoru myši souvisí s DirectX nebo ne, ale raději jsem kód zkusil v normální úloze i s DirectX.

V projektu bez DirectX

  Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As _
    System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
      If e.Button = Windows.Forms.MouseButtons.Left Then
        Dim mousePos As Point = Control.MousePosition ' zachycení polohy myši
        MsgBox("Kurzor myši je na souřadnici X = " & mousePos.X & "a Y = " & mousePos.Y)
      End If
  End Sub

A do příkladu p. Hercega Grafika v DirectX 9 - Díl 1. - První aplikace v DirectX

http://vbnet.cz/clanek--7-grafika_v_dire...

jsem přidal:

nahoru do Public Class Form1 definici Dim sourad As String = ""

a do Private Sub Timer1_Tick pod vykreslení čtverce řádekbackBuffer.DrawText(200, 520, sourad, False)

A do Private Sub Form1_MouseDown vložil výše uvedený kód upravený na:

  Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As  _  
    System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
      If e.Button = Windows.Forms.MouseButtons.Left Then
        Dim mousePos As Point = Control.MousePosition ' zachycení polohy myši
        sourad = "Kurzor myši je na souřadnici X = " & mousePos.X & " a Y = " & mousePos.Y
        If mousePos.X >= 200 And mousePos.X <= 500 And mousePos.Y >= 200 And mousePos.Y <= 500 Then
          End
        End If
      End If
  End Sub

Když klepnete do modrého pole, dostanete souřadnice polohy kurzoru, když do zeleného čtverce, program skončí

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

Znamená to, že koordináty byly v obou případech stejné?

Napadlo mě totiž předtím, že třeba Form nepozná klik menší než [X=n,Y=30], ale jestli koordináty stejné jsou, je to fajn protože si tím tazatel ušetří dost práce.

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

Pokud jsou vztažené k obrazovce, budou vždy stejné. Dáte-li formulář na 0,0 nelze na 0,0 klepnout, protože tam začíná rámeček - zleva asi 4 a shora 30 px (horní lišta s textem)...

Podívejte se na:

http://vbnet.cz/forum-tema--263-poloha_k...

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

To se dá vyřešit, pokud se Fromu nastaví FormBorderStyle na None.

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

Omlouvám se,nešel mi net,funguje to tak jak potřebuji.Moc děkuji

PS:neví tu prosím někdo jak se pomocí kodu vypne nebo restartuje pc atd:...

vypnout

restart

hybernace

odhlášení

...

jednou sem to již psal ale zaboha si nevzpomenu jak

Děkuji

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

http://www.vbnet.cz/forum-tema--308-vypn...

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

Děkuji to jsem ale také našel,jenže nevím co co znamená jde mi o to -f...atd

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

http://www.microsoft.com/technet/prodtec...

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