| |
VB.NET - Ein- und Umsteigertransparentes 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 | |
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 | |
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 | |
Re: transparentes Form und Maus | | | Autor: Bazi | Datum: 17.04.17 12:05 |
| Funktioniert super. Danke
Danke für die Hilfe
Gruß Christian | |
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 | |
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 | |
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 | |
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 | |
| 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 |
|
|
Neu! sevDTA 3.0 Pro
SEPA mit Kontonummernprüfung
Erstellen von SEPA-Dateien mit integriertem BIC-Verzeichnis und Konto- nummern-Prüfverfahren, so dass ungültige Bankdaten bereits im Vorfeld ermittelt werden können. Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|
|
|
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
|
|