vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 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

Fortgeschrittene Programmierung
Bildschirmausgabe auf Bereich begrenzen 
Autor: HarryLobster
Datum: 14.09.18 11:15

Ich habe mal wieder eine besonderes Anliegen, ich hoffe, ich kann es rüber bringen...

wenn ich auf einem Objekt (Form, Picturebox, etc.) mittels API, z.B.

Rectangle Form.hdc, -10, 10, 20, 20

zeichne, dann wird das Rechteck ja wegen der negativen Koordinaten abgeschnitten.
Das Abschneiden orientiert sich aber immer an den Koordinaten 0, 0 des jeweiligen Objekts.

Ist es irgendwie möglich, dass ich diesen Effekt auch mitten auf dem Formular erzielen kann, also ein Rechteck relativ zu einem imaginären Rahmen abgeschnitten darzustellen ?

Ich möchte prinzipiell damit erreichen, dass ich für Grafiken, die durch andere verdeckt werden, nicht immer alle Grafiken neu zeichnen muss, um den "Übereinander-Effekt" zu erzielen.

Man stelle sich vielleicht eine fixe Leiste bei einem Grid vor, unter der mit der Bildlaufleiste Grafiken unten durch geschoben werden.

Ich habe bisher nur die beiden Ansätze gefunden, dass man so eine Leiste in einer eigenen PictureBox abbildet oder eben immer die Leiste nach einer Bewegung neu zeichnet. Beides befriedigt mich aber nicht wirklich. Das eigentliche Problem ist noch etwas komplexer und es geht auch um Performance.

Ich wäre wirklich dankbar für einen Tipp.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Bildschirmausgabe auf Bereich begrenzen 
Autor: Kuno60
Datum: 14.09.18 20:28

Hallo,

ja das ist möglich durch Clipping. Damit legst du die Region fest, in die gezeichnet wird.

Hiermit werden die linken 10 Pixel des Rechtecks nicht gezeichnet:
Private Declare Function CreateRectRgn Lib "gdi32" (ByVal x1 As Long, ByVal y1 _
  As Long, ByVal x2 As Long, ByVal y2 As Long) As Long
Private Declare Function SelectClipRgn Lib "gdi32" (ByVal hDC As Long, ByVal _
hRgn As Long) As Long
Private Declare Function Rectangle Lib "gdi32" (ByVal hDC As Long, ByVal x1 As _
Long, ByVal y1 As Long, ByVal x2 As Long, ByVal y2 As Long) As Long
 
Dim dc As Long, rn As Long
 
dc = Picture1.HDC
rn = CreateRectRgn(60, 50, 150, 150)
Call SelectClipRgn(dc, rn)
Call Rectangle(dc, 50, 50, 150, 150)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Bildschirmausgabe auf Bereich begrenzen 
Autor: HarryLobster
Datum: 14.09.18 21:07

Ich bin beeindruckt und sehr dankbar ! Ich habe da so lange nach gesucht...
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