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
Rechtecke mit API und Line-Funktion verhalten sich unterschiedlich 
Autor: HarryLobster
Datum: 17.03.18 08:24

Ich habe festgestellt, dass das Zeichnen vieler Rechtecke mit der Rectangle API viel schneller ist, als mit der Line-Funktion einer Picturebox. Leider ist die Darstellung nicht gleich und ich kriege einfach nicht heraus, woran es liegt. Beispielcode 1 zeichnet feine Linien, während Beispielcode 2 deutlich dickere Linien zeichnet, was unerwünscht ist. Beide Pictureboxen haben identische Eigenschaften. Was übersehe ich ? Und ja: ich will Rechtecke zeichnen, auch wenn dieses Muster auch mit Linien zu erreichen wäre, aber die Rechtecke sollen später auch unterschiedlich groß sein...

Code 1
Private Sub mDraw1()
 
    For nY = 0 To 99
 
        For nX = 0 To 99
 
            Me.Picture1.Line (nX * 10, nY * 10)-(nX * 10 + 10, nY * 10 + 10), _
              vbWhite, B
 
        Next
 
    Next
 
End Sub
Code 2
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
 
Private Sub mDraw2()
 
    For nY = 0 To 99
 
        For nX = 0 To 99
 
            Rectangle Me.Picture2.hDC, nX * 10, nY * 10, nX * 10 + 10, nY * 10 _
              + 10
 
        Next
 
    Next
 
End Sub


Beitrag wurde zuletzt am 17.03.18 um 08:46:32 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Rechtecke mit API und Line-Funktion verhalten sich unterschiedlich 
Autor: HarryLobster
Datum: 17.03.18 08:52

Habe so lange gesucht, den Beitrag geschrieben und 5 Minuten später selber darauf gekommen:

Rectangle Me.Picture2.hDC, nX * 10, nY * 10, nX * 10 + 10 + 1, nY * 10 + 10 + 1

Im 2. Beispiel musste ich nur die Größe des Rechtecks um einen Pixel erhöhen...
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Rechtecke mit API und Line-Funktion verhalten sich unterschiedlich 
Autor: markusxy
Datum: 18.03.18 09:34

Für Rectangle gibt es ja jede Menge Parameter

LG Markus
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Rechtecke mit API und Line-Funktion verhalten sich unterschiedlich 
Autor: Souffleurlos
Datum: 18.03.18 14:03

Hallo,

graphisches Maßsystem in VB ist Twips
graphisches Maßsystem in WinAPI ist Pixel.
Den Unterschied zeigt die Eigenschaft: Screen.TwipsPerPixelX bzw. Screen.TwipsPerPixelY
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Rechtecke mit API und Line-Funktion verhalten sich unterschiedlich 
Autor: HarryLobster
Datum: 18.03.18 21:56

Danke für die Aufmerksamkeit, aber nicht hilfreich. Wenn ich Twips und Pixel verwechselt hätte, wäre der Unterschied ja dramatisch gewesen. Ich hatte ja extra geschrieben, dass die Eigenschaften der Pictureboxen identisch waren, in diesem Falle beide auf ScaleMode Pixel
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Rechtecke mit API und Line-Funktion verhalten sich unterschiedlich 
Autor: HarryLobster
Datum: 18.03.18 22:04

Danke für die Aufmerksamkeit, aber nicht hilfreich.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Rechtecke mit API und Line-Funktion verhalten sich unterschiedlich 
Autor: markusxy
Datum: 18.03.18 22:28

Weil du es nicht verstehst oder aus welchem Grund.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Rechtecke mit API und Line-Funktion verhalten sich unterschiedlich 
Autor: HarryLobster
Datum: 19.03.18 11:29

Naja, zum einen war das Problem ja bereits gelöst (von mir selber) und zum anderen war es auch keine konkrete Antwort auf das Problem. Der Link ist aber gut, den kenne und nutze ich bereits. Aber wenn das Problem nur an einem Pixel liegt, dann helfen Grundlage auch nicht weiter. Trotzdem danke !
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Rechtecke mit API und Line-Funktion verhalten sich unterschiedlich 
Autor: markusxy
Datum: 21.03.18 10:40

Wie hast du das Problem nun gelöst?
Das wird doch alle interessieren, die den Thread verfolgen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Rechtecke mit API und Line-Funktion verhalten sich unterschiedlich 
Autor: HarryLobster
Datum: 23.03.18 10:53

Die RECT-Struktur, mit der die API intern arbeitet, verhält sich etwas anders als von mir gedacht. Wenn ich z.B. RECT.left = 0 und RECT.right = 1 als Beispiel anführen, könnte man denken, es wäre 2 Pixel breit (0 und 1). Es ist aber nur ein Pixel breit. Alles ist bei mir deshalb um einen Pixel verschoben gewesen und zwei nebeneinander liegende Rechtecke hatten nicht einen gemeinsamen Rand (1 Pixel breit) sondern jedes Rechteck hatte seinen eigenen Rahmen, daher waren die Ränder alle doppelt so dick. Das hat man bei der PictureBox-Line-Funktion nicht.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Rechtecke mit API und Line-Funktion verhalten sich unterschiedlich 
Autor: markusxy
Datum: 23.03.18 11:55

Zentral ist doch zu verstehen wie die Pen Funktion arbeitet vor allem die Unterschiede zwischen den Styles
PS_SOLID
PS_NULL
PS_INSIDEFRAME

Daher -> natürlich ist Grundlangenwissen das Wesentliche.
Da ich aber mit Access arbeite, kann ich dir nicht sagen wie die PicBox arbeitet.
LG Markus
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Rechtecke mit API und Line-Funktion verhalten sich unterschiedlich 
Autor: VB3-Guru
Datum: 20.07.18 12:45

Hallo Harry,

ich weiß, dass dein Problem gelöst ist. Wollte der Vollständigkeit halber mal kurz auf diesen Artikel zum Rectangle aufmerksam machen:
http://www.activevb.de/cgi-bin/apiwiki/Rectangle
Da steht die Sache mit dem einen Pixel weniger für Höhe und Breite drin.

Beste Grüße
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