vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 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

VB & Windows API
Region erstellen, einen Teil davon nur anzeigen und mit einem Brush versehen 
Autor: Jack
Datum: 03.07.11 12:06

Hallo Forum!

Ich hoffe ich kann meine Frage richtig erklären.
Ich habe eine Polygone Region, welche ziemlich groß ist - sagen wir z.B. 5000 x 5000 (Pixel, oder was auch immer).

Da meine Form aber nur 500 x 500 groß ist, möchte ich nun einen Teil dieser Region ausschneiden und in der Form anzeigen lassen. Dies habe ich mittlerweile auch geschafft. Weiß allerdings nicht, ob es hier nicht eine einfacher Methode gibt - habe meine "normale" Region mit einer anderen Region mit der Größe "500 x 500" kombiniert mit "RNG_AND" - das Ergebnis hat dann gepasst.

Gibt es hier für evtl. eine einfachere Lösung?

Und nun zu meinem eigentlichen Problem - wenn ich nun meine ausgeschnittene Region in der Form anzeige, dann ... wie erklär ich das ... dann wird die Füllung nicht mit ausgeschnitten und somit nicht an der Stelle, wo sie eigentlich sein sollte.



http://www.xtreme-simpsons.de/jack/beispiel.jpg
Ich hoffe aus dem Bild kann man ersehen, wo mein Problem liegt.
Kann man bei dem Brush evtl...sowas wie nen Offset setzen oder sowas?

Wäre schön, wenn jemand mein Problem versteht und mir helfen könnte.

Danke

Unkraut vergeht nicht

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Region erstellen, einen Teil davon nur anzeigen und mit einem Brush versehen 
Autor: ModeratorMartoeng (Moderator)
Datum: 03.07.11 12:16

Nein, klar ist es mir zumindest leider nicht.
Welches der beiden Bilder zeigt denn jetzt das an, was richtig sein soll?
Und wo ist der Code mit dem Du das ganze vollführst?


vbarchiv.dll (Freeware), Tutorials uvm. auf http://www.martoeng.com.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Region erstellen, einen Teil davon nur anzeigen und mit einem Brush versehen 
Autor: Zardoz
Datum: 03.07.11 14:37

Hallo Jack,
eventuell hilft das:
http://msdn.microsoft.com/en-us/library/dd162747.aspx

Gruss,

Zardoz

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Region erstellen, einen Teil davon nur anzeigen und mit einem Brush versehen 
Autor: Jack
Datum: 03.07.11 14:43

Das hab ich leider befürchtet, dass ich mein Problem nicht richtig beschreiben kann.

http://www.xtreme-simpsons.de/jack/beispiel2.jpg

Auf diesem Bild sieht man oben meine gesamte Region - soll eine Berglandschaft darstellen.
Der rotumrandete Teil, soll ausgeschnitten und in meiner Form dargestellt werden.
Das Ergebnis wäre richtig, wenn das dick rotumrandete Bild rauskäme (wie gesagt, der ausgeschnittene Teil der Region passt). Leider kommt als Ergebnis meines Codes aber das duck blauumrandete raus.
Die "Textur" stimmt nicht, die wird nicht mit ausgeschnitten.


Code habe ich folgenden Verwendet. Ich hoffe, es ist nachvollziehbar was ich hier mache. Übersicht ist nicht gerade meine Stärke. Ich hab die Declarationen der Funktionen weggelassen, da ich sonst hier die Obergrenze des Textes überschritten hätte.

Private screenshow_region As Long
Private screensize_region As Long
Private hintergrund_region As Long
Private hBrush As Long
 
Private camera_x As Single
Private camera_y As Single
 
 
Private Sub Form_Load()
Dim hBitmap As Long
Dim Retval As Long
 
Me.AutoRedraw = True
camera_x = 100
camera_y = 250
'Hintergrundmuster erstellen
hBitmap = LoadImage(App.hInstance, "C:\hintergrund.bmp", 0, 300, 300, &H10)
hBrush = CreatePatternBrush(hBitmap)
 
 
hintergrund_region = CreateRectRgn(0, 0, 0, 0)
screensize_region = CreateRectRgn(0, 0, 250, 250)
screenshow_region = CreateRectRgn(0, 0, 0, 0)
 
                        Dim figure(23) As POINTAPI
                        figure(0).x = 0
                        figure(0).y = 456
                        figure(1).x = 67
                        figure(1).y = 411
                        figure(2).x = 129
                        figure(2).y = 414
                        figure(3).x = 138
                        figure(3).y = 372
                        figure(4).x = 198
                        figure(4).y = 364
                        figure(5).x = 264
                        figure(5).y = 351
                        figure(6).x = 321
                        figure(6).y = 326
                        figure(7).x = 348
                        figure(7).y = 294
                        figure(8).x = 415
                        figure(8).y = 294
                        figure(9).x = 468
                        figure(9).y = 321
                        figure(10).x = 511
                        figure(10).y = 350
                        figure(11).x = 557
                        figure(11).y = 351
                        figure(12).x = 616
                        figure(12).y = 351
                        figure(13).x = 671
                        figure(13).y = 308
                        figure(14).x = 694
                        figure(14).y = 250
                        figure(15).x = 727
                        figure(15).y = 246
                        figure(16).x = 742
                        figure(16).y = 202
                        figure(17).x = 774
                        figure(17).y = 202
                        figure(18).x = 816
                        figure(18).y = 143
                        figure(19).x = 854
                        figure(19).y = 141
                        figure(20).x = 885
                        figure(20).y = 105
                        figure(21).x = 912
                        figure(21).y = 82
                        figure(22).x = 1511
                        figure(22).y = 520
                        figure(23).x = 3
                        figure(23).y = 519
 
                        hintergrund_region = CreatePolygonRgn(figure(0), 24, 1)
 
show_hintergrund
 
End Sub
 
Private Sub show_hintergrund()
Me.Cls
screensize_region = CreateRectRgn(0, 0, 250, 250)
screenshow_region = CreateRectRgn(0, 0, 0, 0)
hOldBrush = SelectObject(Me.hdc, hBrush)
Call OffsetRgn(screensize_region, camera_x, camera_y)
 
CombineRgn screenshow_region, hintergrund_region, screensize_region, 1
 
Call OffsetRgn(screenshow_region, -camera_x, -camera_y)
 
Call PaintRgn(Me.hdc, screenshow_region)
 
End Sub

Unkraut vergeht nicht

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Region erstellen, einen Teil davon nur anzeigen und mit einem Brush versehen 
Autor: Jack
Datum: 03.07.11 14:45

Hallo Zardoz, sorry, deine Antwort und meine Antwort von 14:43 Uhr haben sich überschnitten

Die Funktion OffsetRgn ist mir bekannt und verwende ich auch.
Mir gehts es rein um die "Textur", dass die nicht passt.

Unkraut vergeht nicht

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Region erstellen, einen Teil davon nur anzeigen und mit einem Brush versehen 
Autor: Zardoz
Datum: 03.07.11 15:34

Hallo Jack,
die Startposition des Brushs wird mit SetBrushOrgEx gesetzt:
http://msdn.microsoft.com/en-us/library/dd162967(v=VS.85).aspx

Übrigens, jeder Brush und jede Region muss wieder mit DeleteObjekt
gelöscht werden, sonst wird der Speicher zugemüllt.

Gruss,

Zardoz

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Region erstellen, einen Teil davon nur anzeigen und mit einem Brush versehen 
Autor: Jack
Datum: 03.07.11 15:47

paaaaaaaaaasst wunderbar

"Gefällt mir"

Vielen Dank, genau das war, wonach ich gesucht habe. Jetzt sieht mein ausgeschnittener Teil auch so aus, wie er aussehen muss.

Auch Danke für den Hinweis zum Entladen der Objekte. Dies wird natürlich gemacht. Es handelt sich bei dem Quellcode nur um einen Test, ob sich mein Vorhanden realisieren lässt. Weil nur jetzt macht das weitere vorgehen einen Sinn. Daher hab ich noch nicht alles gepostet.

Unkraut vergeht nicht

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Region erstellen, einen Teil davon nur anzeigen und mit einem Brush versehen 
Autor: ModeratorMartoeng (Moderator)
Datum: 03.07.11 16:10

Du solltest allerdings überlegen, ob Du nicht eher auf DirectX umsteigst für solche Aktionen. Das ist speziell dafür gemacht.


vbarchiv.dll (Freeware), Tutorials uvm. auf http://www.martoeng.com.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Region erstellen, einen Teil davon nur anzeigen und mit einem Brush versehen 
Autor: Jack
Datum: 03.07.11 16:43

Nun, leider bin ich bei DX noch ein ziemlicher Noob. Und für meine weiteren Pläne sind nun mal Regionen wie geschaffen, da ich meinen Hintergrund im besten "Worms" Stil durch Explosionen etc. verändern lassen möchte. Ob bzw. wie das unter DX möglich ist, ist mir völlig unbekannt.

Unkraut vergeht nicht

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Region erstellen, einen Teil davon nur anzeigen und mit einem Brush versehen 
Autor: ModeratorMartoeng (Moderator)
Datum: 03.07.11 17:01

Ein Worms-Klon ist vllt. ein guter Einstieg in DirectX.
Es empfiehlt sich da ein gutes Buch zu kaufen und den Plan mit Regions zu vergessen. Spätestens bei Explosionen wird Deine "Engine" zu langsam werden.


vbarchiv.dll (Freeware), Tutorials uvm. auf http://www.martoeng.com.
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