| |
Fortgeschrittene ProgrammierungRechtecke 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. | |
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... | |
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 | |
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 | |
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 | |
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. | |
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. | |
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 ! | |
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. | |
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. | |
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 | |
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 | |
| 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 |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats sevAniGif (VB/VBA)
Anzeigen von animierten GIF-Dateien
Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. Weitere 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
|
|