Auf WebBrowser zeichnen
- VB.NET
- .NET (FX) 4.5–4.8
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von Gather.
-
-
-
-
WinAPI-Aufruf?
Dazu einfach den HDC eines Fensters in einer Variable Speichern, mit Graphics.FromHDC() ein Graphics-Objekt erzeugen. Mit dem Graphics-Objekt kannst du dann zeichnen.In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell -
-
Hi,
@RushDen das funktioniert nicht, weil ich die ControlClick Events ja im Programm haben will
@Radinator danke werde ich ausprobieren, welche winapi aufrufe kann ich verwenden?
@PSJ wenn ich auf die PB zeichne, male ich ja hinter dem WebBrowser und nicht auf ihm?
Sry dass ich erst jetzt antworte
//EDIT:ich hab das so probiert:
VB.NET-Quellcode
- Public Class PlanBrowser
- Inherits WebBrowser
- Dim g As Graphics = Nothing
- Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
- MyBase.OnPaint(e)
- 'Benutzerdefinierten Zeichnungscode hier einfügen
- End Sub
- WithEvents t As New Timer With {.Enabled = True, .Interval = 1}
- Sub ti() Handles t.Tick
- If g Is Nothing Then g =[color=#DAA520] [b]Graphics.FromHdc(Me.Handle)[/b][/color]
- g.FillRectangle(Brushes.Black, New Rectangle(0, 0, 1000, 1000))
- End Sub
- End Class
aber da kommt OutOfMemoryException bei dem oben markierten
also bei Graphics.FromHdc(Me.Handle) xD
LG
TwometerAn Error 404 occurred while loading signature...Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Twometer“ ()
-
Twometer schrieb:
welche winapi aufrufe kann ich verwenden?
Und zu deiner Exception: Du muss dein Graphics-Objekt ja auch noch disposen. Und nimm bitte einen anderen Tackt her, mit 1 Millisekunde, des ist aus 2 Gründen Schwachsinn:
1.) Ein Timer ist nie sooo genau
2.) Überforderst du den Rechner, das führt im Endeffekt nur zu einer Verlangsamung der App
Lg RadinatorIn general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell -
-
Hi,
ich habe jetzt die Exception mit einem niedrigeren Interval wegbekommen:
Aber jetzt passiert gar nichts mehr, nichts wird gezeichnet. (Me
ist in diesem Fall der Browser, weil ich das Control überschrieben hab)
Wenn ich statt Me die Hauptform nehme, zeichnet er auf den Hintergrund und nicht oben auf die Form
Was kann ich da machen?
LG
TwometerAn Error 404 occurred while loading signature... -
-
Hi,
Ich möchte auf einer Seite, die gleich bleibt während das Programm läuft, auf der ein Plan angezeigt wird, Controls einblenden. Außerdem möchte ich die Events (OnClick) von dem Control abfangen können.
LG
Twometer
//EDIT: Es soll kein BUtton sein ,am besten etwas Transparentes, was nur ein Bild anzeigt.An Error 404 occurred while loading signature... -
-
-
Dann sieh dir mal folgendes an, einer User wollte gestern etwas Ähnliches:
VB.NET-Quellcode
- Private Sub ApplyTransparentOverlay(c As Color, wb As Webbrowser)
- Dim bit As Bitmap = TakeScreenShot(wb)
- Dim g As Graphics = Graphics.FromImage(bit)
- 'Hier zeichnest du auf dem GANZEN CONTROL
- g.FillRectangle(New SolidBrush(c), New Rectangle(0, 0, bit.Width, bit.Height))
- 'Simpler Work-Around
- Dim p As New Panel
- p.Size = Size
- wb.Controls.Add(p)
- p.Dock = DockStyle.Fill
- g = p.CreateGraphics()
- g.DrawImage(bit, 0, 0)
- End Sub
- Private Function TakeScreenShot(ByVal Control As Control) As Bitmap
- Dim tmpImg As New Bitmap(Control.Width, Control.Height)
- Using g As Graphics = Graphics.FromImage(tmpImg)
- g.CopyFromScreen(Control.PointToScreen(New Point(0, 0)), New Point(0, 0), New Size(Control.Width, Control.Height))
- End Using
- Return tmpImg
- End Function
- 'Aufruf:
- ApplyTransparentOverlay(Color.fromargb(50, SystemColors.Control), Webbrowser1)
- 'Entfernen:
- Webbrowser1.Controls.Clear
-
-
Naja sobald du die Größe veränderst musst du logischerweise die Methode neu aufrufen.
Aber hier ein schnelles Beispiel für deinen Pfeil.
VB.NET-Quellcode
- 'Hier zeichnest du auf dem GANZEN CONTROL
- g.FillRectangle(New SolidBrush(c), New Rectangle(0, 0, bit.Width, bit.Height))
- Dim ArrowSize As New Size(10, 30)
- Dim points As Point() = {New Point(bit.Width - (ArrowSize.Width + 5), CInt((bit.Height / 2) - CInt(ArrowSize.Height / 2))), New Point(bit.Width - 5, CInt(bit.Height / 2)), New Point(bit.Width - (ArrowSize.Width + 5), CInt((bit.Height / 2) + CInt(ArrowSize.Height / 2)))}
- g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
- Dim pen As New Pen(Brushes.White, 3)
- Dim shadowpen As New Pen(Color.FromArgb(50, 0, 0, 0), 4)
- g.DrawLine(shadowpen, New Point(points(0).X, points(0).Y + 2), New Point(points(1).X, points(1).Y + 2))
- g.DrawLine(shadowpen, New Point(points(1).X, points(1).Y + 2), New Point(points(2).X, points(2).Y + 2))
- g.DrawLine(pen, points(0), points(1))
- g.DrawLine(pen, points(1), points(2))
Ist hald nicht sonderlich schön, musst du verfeinern -
-
Kein Problem!
Eines noch, es lässt natürlich darüber diskutieren wie schön diese Methode ist aber es handelt sich einfach um einen simplen Work-Around, da der Webbrowser ja kein OwnerDrawing verträgt.
Dennoch, du willst natürlich auch Evente abfangen, diesbezüglich musst du natürlich in der Methode die Handler manuell hinzufügen, AUSSER du definierst das Panel außerhalb der Methode mitWithEvents
:
Nun kannst du einfach Methoden für die Evente erstellen, und dort den MouseClick (etc.) auf das von dir gezeichnete abfangen und auswerten:
Wenn du dies nicht willst, füge einfach die bestimmten Handler mitAddhandler
manuell hinzu.
Mehr z.B. hier : KeyDOWN Event für dynamisch erzeugte Controls
-
Ähnliche Themen
-
WebBrowser zum Standard Webbrowser machen
Dayshadow119 - - Sonstige Problemstellungen -
PictureBox als Browser benutzen
underground77 - - Sonstige Problemstellungen