Přesun a změna velikosti formuláře bez okraje   otázka

VB.NET

Mám vytvořený Form, bez okraje (FormBorderStyle = None), který má vlastní Paint a je průhledný.

Pomocí WndProc jsem schopen zachytit událost WM_NCHITTEST a na základě pozice kurzoru nad okrajem nastavit režim změny velikosti Form (je to jednoduché nastavím jen výsledek Message.Result na odpovídající hodnotu od 10 do 17).

Jenže je problém, tam kde je Form transparentní, není generována událost WM_NCHITTEST, tzn. nelze nastavit šířku okraje pro možnost změny velikosti ale není možné Form nastavit do režimu přesunu, tzn. Message.Result = 2.

Je to možné nějak obejít, aby WM_NCHITTEST v WndProc byla generována i nad celou oblastí Formu i tam kde je průhledný?

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

Posun formuláře je možný je-li průhledný takto

Deklarace

Private p As Point

Na jednotlivé prvky na formluáři (TextBox, Label, PictureBox, ...) vložte kód do události MouseMove jednotlivých prvků zobrazených na formuláři.

Private Sub Label1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Label1.MouseDown
  p = New Point(e.X, e.Y + (Me.Size.Height - Me.ClientSize.Height))
End Sub

Private Sub Label1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Label1.MouseMove
  If e.Button = MouseButtons.Left Then
    Me.Location = New Point(Cursor.Position.X - p.X, Cursor.Position.Y - p.Y)
  End If
End Sub
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