vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
transparentes Form und Maus 
Autor: Bazi
Datum: 16.04.17 19:23

hallo, ich habe ein transparentes Form auf dem ich zeichen möchte. Diese Form ist ohne Rahmen und ich möchte es über anderen Anwendungen platzieren, wie eine transparente Folie über Pausplänen.

Mein Problem ist derzeit die Maus. Im transparenten Form habe ich ja durch die Transparenz keine Maus-Events, die ich aber zum zeichnen benötige.

Ich habe es nun versucht mir das Handle der Anwendung über der ich zeichne zu holen und mit via Subclassing die WndProc dieses zu holen und zu verarbeiten (clsSubClass von vb-power.de). Sobald ich aber mein Programm dann beende laufen die Messages ins leere und die Anwendung über der ich zeichne empfängt keine Informationen mehr --> schmiert sozusagen ab.

Als 2.Versuch habe ich mit einem Mouse-Hook gearbeitet (MouseKeyboardActivityMonitor.dll, weiss nicht mehr woher), das hat aber auch zu verschiedenen seltsamen Erscheinungen geführt. Stellenweise ist in anderen Programmen die Maus nicht mehr gegangen.

Gibt es noch eine andere Möglichkeit im transparenten Form im Bereich des ClientRectangles an die Mouse-Events zu kommen?

Danke für die Hilfe

Gruß Christian

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: transparentes Form und Maus 
Autor: Manfred X
Datum: 17.04.17 10:23

Hallo!

Probiere es mit einem nahezu durchlässigen Formular.
Public Class frmOpacity
 
    Private Sub frmOpacity_Load(sender As System.Object, _
        e As System.EventArgs) Handles MyBase.Load
 
        Me.Opacity = 0.01
        Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None
        Me.Size = New Size(100, 100)
        Me.Location = New Point(0, 0)
    End Sub
 
 
    Private Sub frmOpacity_MouseClick(sender As Object, _
        e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseClick
 
        MsgBox("Das Formular ist von der Maus gebissen worden")
    End Sub
End Class
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: transparentes Form und Maus 
Autor: effeff
Datum: 17.04.17 10:57

Hallo!

Achtung: Du hast einen gravierenden Fehler in dem von Dir geposteten Code!

Manfred X schrieb:
Zitat:

MsgBox("Das Formular ist von der Maus gebissen worden")


Es muss richtig heißen:

MsgBox("Das Formular ist vom HASEN gebissen worden")...

Schöne Restostern...

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: transparentes Form und Maus 
Autor: Manfred X
Datum: 17.04.17 11:25

Hallo!

Osterhasen sind analog!

In der digitalen Welt gibt es nur [u]Oster-Mäuse
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: transparentes Form und Maus 
Autor: Bazi
Datum: 17.04.17 12:05

Funktioniert super. Danke

Danke für die Hilfe

Gruß Christian

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: transparentes Form und Maus 
Autor: Bazi
Datum: 17.04.17 21:01

OK, somit bekomme ich die Maus. Allerdings wenn ich darauf zeichen sehe ich nix.
Habe mir zum testen einen Schieberegler für die Opacity gemacht.

Werde mir dann noch ein zusätzliches transparentes Form machen auf dem ich die gezeichneten Formen darstelle.

Danke für die Hilfe

Gruß Christian

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: transparentes Form und Maus 
Autor: effeff
Datum: 17.04.17 21:59

Nein, nein... Osterhasen SIND digital: https://www.kleine-jockers.de/1-er-fruchtgummi-osterhase-10-67017_97496-D1.html

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: transparentes Form und Maus 
Autor: Manfred X
Datum: 18.04.17 00:04

Hallo!

Nimm eine Form mit einer Picturebox und kopiere
den Bildschirmhintergrund in die Box.
Im Paint-Event der Picturebox kann gezeichnet werden.
Public Class frmCopyScreen
 
    Dim WithEvents pb As New PictureBox With {.Parent = Me}
 
    Dim bmp As Bitmap
 
    Private Sub frmCopyScreen_Click(sender As Object, _
        e As System.EventArgs) Handles pb.Click
        copyscreen()
    End Sub
 
    Private Sub frmCopyScreen_Load(sender As System.Object, _
        e As System.EventArgs) Handles MyBase.Load
 
        Me.MaximizeBox = False
        pb.Location = New Point(0, 0)
        pb.Size = Me.ClientRectangle.Size
        copyscreen()
    End Sub
 
    Private Sub frmCopyScreen_Move(sender As Object, _
        e As System.EventArgs) Handles Me.Move
        copyscreen()
    End Sub
 
    Private Sub frmCopyScreen_ResizeEnd(sender As Object, _
        e As System.EventArgs) Handles Me.ResizeEnd
        pb.Size = Me.ClientRectangle.Size
        copyscreen()
    End Sub
 
    Private Sub copyscreen()
 
        If bmp IsNot Nothing Then
            bmp.Dispose() : bmp = Nothing
        End If
        bmp = New Bitmap(pb.Width, pb.Height)
        Using G As Graphics = Graphics.FromImage(bmp)
            Me.Visible = False
            Threading.Thread.Sleep(100)
            G.CopyFromScreen _
            (PointToScreen(Me.ClientRectangle.Location), _
             New Point(0, 0), pb.Size)
            Me.Visible = True
            pb.Image = bmp
        End Using
    End Sub
End Class
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: transparentes Form und Maus 
Autor: Bazi
Datum: 18.04.17 11:10

ja, das ginge auch.
Zumindest im jetzigen Fall. Ich werde mal beide Wege austesten.
Danke Dir!

Danke für die Hilfe

Gruß Christian

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: transparentes Form und Maus 
Autor: Bazi
Datum: 19.04.17 22:05

in meinem Hintergrundformular zeige ich ein Bild an. Diese ist zoom und scrollbar.
Bei der Variante mit der Picturebox muss ich nun bei jeder Änderung der Ansicht neu in die PB laden.
Auf dem Tablet angewandt dauert mir das zu lange.

Bei der anderen Variante mit den 3 Forms übereinander habe ich Schwierigkeiten mit der Anordnung.

Ich habe derzeit:
1.)
FormHintergrund, in dieser wird angezeigt, der Bildausschnitt ist mit Maus und Scrollbars veränderbar.

2.)
FormMaus, die dient für die Position des Cursors, hat im Zeichenmodus eine Opacity von 0,01 und hat eine Property Transparent, um auf Transparent umzuschalten wenn die Maus bis auf FormHintergrund durchkommen soll.

3.)
Formzeichenfläche, die ist permanent transparent und dient zum darauf zeichnen.

4.)
FormMenü, das wird eingeblendet wenn im FormHintergrund ein Button zum zeichnen gedrückt wird und dient zum Festlegen von Stiftfarbe etc. Dieses soll im Zeichenmodus immer vorneauf liegen (ähnlich TopMost, aber nur innerhalb meines Programmes.

Ablauf:
FormHintergrund, ruft beim Anzeigen des Bildes die FormMaus.Show(FormHintergrund) sowie FormZeichenfläche(FormMaus) auf.
FormMaus wird beim Aufruf auf Transparent gesetzt, damit der Anwender (ich) noch den Bildausschnitt beeinflussen kann. FormMenü wird eingeblendet und positioniert.

Wenn im FormMenü der Button zum zeichen einer Linie gedrückt wird schalte ich FormMaus die Transparenz aus und auf Opacity 0,01.

In meiner Theorie wäre nun die FormMaus immer zwischen FormHintergrund und FormZeichenfläche.
Ist aber in der Praxis nicht.

Wie kann ich die gewünschte Stapelreihenfolge erzwingen?

Danke für die Hilfe

Gruß Christian

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel