vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 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 anderes Koordinatensystem 
Autor: HarryLobster
Datum: 15.09.18 09:21

Ich möchte gerne mit:

Rectangle Me.hdc, 0, 0, 100, 100

ein Rechteck zeichnen, welches aber nicht bei 0, 0 oben links beginnt sondern relativ zu einem vorher festgelegten Bezugspunkt, z.B. 10, 10.

Ich möchte bei bestimmten grafischen Operationen nicht immer einen Wert addieren müssen sondern für alle Objekte nur einmal einen Bezugspunkt setzen.

So ließe sich z.B. eine Reihe von Rectangle-Objekte nur mit einer Verschiebung neu zeichnen, ohne für alle .Top, .Left, .Right und .Bottom-Werte neu zu berechnen...

Ich setze alle meine Hoffnung auf Kuno60
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Bildschirmausgabe auf anderes Koordinatensystem 
Autor: VB3-Guru
Datum: 15.09.18 10:39

Hallo Harry,

du hast 2 Möglichkeiten:
1. Du verwendest den Scale-Befehl, um dien Koordinatensystem zu definieren
http://www.activevb.de/cgi-bin/tippupload/show/70/Diagramme_skalieren_mit_dem_Scale_Befehl
2. Du machst deine Skalierung selbst vgl.
http://www.activevb.de/cgi-bin/tippupload/show/71/Diagramme_mit_eigener_Skalierung

Beste Grüße
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Bildschirmausgabe auf anderes Koordinatensystem 
Autor: HarryLobster
Datum: 15.09.18 10:59

Vielen Dank für Antwort, aber ich bin mir nicht sicher, ob es das ist, was ich suche bzw. kann ich in den Beispielen keine Antwort auf meine Frage entdecken.

Ich bin bei meinen eigenen Recherchen jetzt auf folgende API-Funktionen gestoßen:

Private Declare Function SetViewportOrgEx Lib "gdi32" (ByVal hdc As Long, ByVal nX As Long, ByVal nY As Long, lpSize As Any) As Long

Von der Beschreibung her, ist sie vielversprechend, aber es klappt einfach nicht.

Ich hatte gehofft, mit:
SetViewportOrgEx hdc, 10, 10, NULL den Ursprungspunkt zu verschieben, aber wenn ich danach mit
Rectangle hdc, 0, 0, 100, 100 zeichne, ist der Ursprung weiterhin in (0, 0)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Bildschirmausgabe auf anderes Koordinatensystem 
Autor: Kuno60
Datum: 15.09.18 13:52

Scale wirkt sich nur auf die internen Zeichenfunktionen aus (Line, Circle usw.).

Mit SetViewportOrgEx kannst du tatsächlich das Koordinatensystem verschieben.
Diese Funktion verschiebt die gesamte Zeichnung, allerdings erst nachträglich und wirkt sich auch auf interne Zeichenfunktionen aus.

Also zuerst ein Rechteck zeichen:
Rectangle hdc, 50, 50, 100, 100
und dann:
SetViewportOrgEx hdc, 10, 10, NULL
wobei hier positive Werte, nach links-oben verschieben.

Welche Möglichkeiten es sonst noch gibt, ist mir nicht bekannt. Ich programmiere schon ewig nicht mehr mit VB6, habe es aber noch auf Windows 7 installiert. Bei VB-Net ist das Zeichnen wesentlich einfacher und bietet mehr Komfort (GDI+).
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Bildschirmausgabe auf anderes Koordinatensystem 
Autor: VB3-Guru
Datum: 15.09.18 17:16

Also, wenn du per GDI32 zeichnest, bleibt dir nichts anderes übrig, als deine eigene Skalierung zu machen. d.h. du rechnest deine wletlichen Koordinaten in pixel um, z.B.

xPixel = xOffset + xfact * x
yPixel = yOffset - yfact * y
wobei x der weltliche Wert von x ist (z.B. x geht von 0 bis 100)
xOffset, yOffset ist ein Wertepaar mit dem du den Koordinatenursprung festlegst und
xfact, bzw. yfact ist der Faktor, der dir weltliche Werte in Pixel umrechnet.

Um dein Problem der Verschiebung zu lösen änderst du einfach den Wert von xOffset, bzw yOffset. Anschließend musst du allerdings Neuzeichnen.

Du kannst dein Koordinatensystem zwar auch per SetWorldscale einstellen, aber davon würde ich dir abraten, wenn du obiges noch nicht verstanden hast.

Das Gleiche gilt für SetViewport..., ich hab sogar ein Beispiel dafür, aber auch hier würde ich abraten.

lg
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Bildschirmausgabe auf anderes Koordinatensystem 
Autor: HarryLobster
Datum: 17.09.18 08:09

SetViewportOrgEx ist genau die Lösung, die ich benötigt habe.
Alles etwas tricky, aber schon cool, was man so alles per API machen kann.
Danke, Kuno60
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Bildschirmausgabe auf anderes Koordinatensystem 
Autor: HarryLobster
Datum: 17.09.18 08:10

Irgendwie scheint es hier ein Missverständnis zu geben, trotzdem danke für Deinen Einsatz.
SetViewportOrgEx ist der Schlüssel zu meinem Problem.
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