Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: [VB.NET] Läpinäkyvä topmost-formi

JoonasK [15.04.2010 16:08:27]

#

Miten voin tehdä formin joka on läpinäkyvä (reunaton) ja näkyy AINA kaikkien ohjelmien päällä? (Ei tarvitse edes olla formi kunhan saa jotenki grafiikkaa näkyviin)

Ihan perusformissa toi topmost ei näy kaikkien ohjelmien päällä (esim. fullscreen-ohjelmat/pelit jättävät sen taakseen).

Grez [15.04.2010 16:33:33]

#

Oletetaan että olisi mahdollista tehdä ikkunoita, jotka näkyisi aina kaikkien ikkunoiden päällä. Entä jos tekisikin kaksi niitä ja laittaisi ne päällekkäin. Räjähtäisikö tietokone vai mitä tapahtuisi?

Tosin minulla on ratkaisu miten oman ikkunan saa täysin varmasti kaikkien muiden päälle: Printtaa sen paperille ja laittaa vaikka paperiliimalla kiinni näyttöön.

neau33 [15.04.2010 18:53:47]

#

Moikka JoonasK!

oheisen esimerkin viritelmällä pääset melko pitkälle...

'Väännetty SharpDevelop 3.2:lla
Imports System.Drawing
Imports System.Runtime.InteropServices

Public Partial Class MainForm

   <DllImport("user32.dll", SetLastError:=True)> _
   Private Shared Function SetWindowPos(ByVal hWnd As IntPtr, _
   ByVal hWndInsertAfter As IntPtr, ByVal X As Integer, _
   ByVal Y As Integer, ByVal cx As Integer, _
   ByVal cy As Integer, ByVal uFlags As UInt32) As Boolean
   End Function


   'Private Shared ReadOnly HWND_NOTOPMOST As IntPtr = New IntPtr(-2)
   'Private Shared ReadOnly HWND_TOP As IntPtr = New IntPtr(0)
   Private Shared ReadOnly HWND_TOPMOST As IntPtr = New IntPtr(-1)

   'Private Const SWP_NOSIZE As UInt32 = &H0001
   'Private Const SWP_NOMOVE As UInt32 = &H0002
   'Private Const SWP_NOZORDER As UInt32 = &H0004
   'Private Const SWP_NOREDRAW As UInt32 = &H0008
   'Private Const SWP_NOACTIVATE As UInt32 = &H0010
   'Private Const SWP_FRAMECHANGED As UInt32 = &H0020
   'Private Const SWP_SHOWWINDOW As UInt32 = &H0040
   'Private Const SWP_HIDEWINDOW As UInt32 = &H0080
   'Private Const SWP_NOCOPYBITS As UInt32 = &H0100
   'Private Const SWP_NOOWNERZORDER As UInt32 = &H00200
   'Private Const SWP_NOSENDCHANGING As UInt32 = &H0400
   'Private Const TOPMOST_FLAGS As UInt32 = SWP_NOMOVE Or SWP_NOSIZE

   Public Sub New()

      Me.Opacity = 0
      Me.StartPosition = _
      FormStartposition.CenterScreen
      Me.ShowInTaskbar = False
      Me.FormBorderStyle = 0
      Me.InitializeComponent()

   End Sub

   Sub MainFormLoad(sender As Object, e As EventArgs)

      Me.PictureBox1.Left = 0
      Me.PictureBox1.Top = 0
      Me.PictureBox1.Width = Me.Width
      Me.PictureBox1.Height = Me.Height
      Me.PictureBox1.BackColor = Color.Transparent
      Me.CheckImage
      Me.Timer1.Interval = 100
      Me.Timer1.Enabled = True
      Me.Timer1.Start
      Me.TransparencyKey = Me.pictureBox1.BackColor

   End Sub

   Sub CheckImage()

      If Me.PictureBox1.Image Is Nothing Then
         Me.Opacity = 0
      Else
         Me.Opacity = 100
      End If

   End Sub

   Sub Timer1Tick(sender As Object, e As EventArgs)

      Me.Timer1.Stop
      SetWindowPos(Me.Handle, HWND_TOPMOST, 0, 0, 0, 0, 3)
      Me.CheckImage
      Me.Timer1.Start

   End Sub

End Class

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta