MS-Office-Forum
Google
   

Zurück   MS-Office-Forum > Microsoft Access & Datenbanken > Microsoft Access
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads Der Renner, 11 Entwicklertools für Access, Tipps & Trick und offene Datenbanken zum einzigartigen Preis.
Themen-Optionen Ansicht
Alt 13.09.2017, 14:09   #1
u.gross
MOF User
MOF User
Standard Acc2010 - Fenster API aus drei Regionen

Hallo zusammen,

ich habe mir aus zwei Regionen ein Formular gebastelt, das aus der RegionA und RegionB definiert wird.

Code:

Private Sub Form_Load()
Const RGN_OR = 2
 
    '  Für beide Grundformen müssen wir zu Beginn jeweils eine eigene Region mit einer API-Funktion erzeugen.
    RegionA = CreateEllipticRgn(200, 670, 400, 870)
    RegionB = CreateRoundRectRgn(80, 40, 1500, 800, 10, 10)
    
    ' Diese beiden einzelnen Regionen können nun zu einer Region addiert werden
    GesamtReg = RegionA
    CombineRgn GesamtReg, GesamtReg, RegionB, RGN_OR
    
    ' Zum Schluß müssen wir die erzeugte Gesamtregion noch dem Formular zuweisen
    SetWindowRgn Me.hWnd, GesamtReg, True
End Sub
Nun würde ich gerne noch eine Region C ergänzen
Code:

    RegionC = CreateRoundRectRgn(800, 40, 1600, 100, 0, 0)
die Region soll aber nicht hinzu sondern von RegionA + RegionB abgezogen werden. Egal wie ich es drehe und wende ich komme einfach nicht auf die richtige Lösung. Mal sehe ich gar nichts oder nur den nicht überlagerten Bereich von RegionC aber keines Falls die Kombination aus [(A und B) - C]

Infos:
Code:

Option Compare Database
Option Explicit

Public Declare Function SetWindowRgn Lib "user32" ( _
    ByVal hWnd As Long, _
    ByVal hRgn As Long, _
    ByVal bRedraw As Boolean) As Long

Public Declare Function DeleteObject Lib "gdi32" ( _
    ByVal hObject As Long) As Long


Public Declare Function CreateEllipticRgn Lib "gdi32.dll" ( _
    ByVal X1 As Long, _
    ByVal Y1 As Long, _
    ByVal X2 As Long, _
    ByVal Y2 As Long) As Long
                                           
Public Declare Function CreateRoundRectRgn Lib "gdi32.dll" ( _
    ByVal X1 As Long, _
    ByVal Y1 As Long, _
    ByVal X2 As Long, _
    ByVal Y2 As Long, _
    ByVal X3 As Long, _
    ByVal Y3 As Long) As Long
'Parameter:
'-------------------------------
'X1  Erwartet die horizontale obere Koordinate des Rechtecks.
'Y1  Erwartet die vertikale obere Koordinate des Rechtecks.
'X2  Erwartet die horizontale untere Koordinate des Rechtecks.
'Y2  Erwartet die vertikale untere Koordinate des Rechtecks.
'X3  Erwartet die Breite der Abrundungen allerEcken.
'Y3  Erwartet die Höhe der Abrundungen allerEcken.
 
Public Declare Function CombineRgn Lib "gdi32.dll" ( _
    ByVal hDestRgn As Long, _
    ByVal hSrcRgn1 As Long, _
    ByVal hSrcRgn2 As Long, _
    ByVal nCombineMode As Long) As Long
    
'nCombineMode Konstanten:
'-------------------------------
'Const RGN_AND = 1
'' Die kombinierte Region soll eine überlappende Region der beiden Quellregionen sein
'Const RGN_OR = 2
'' Die kombinierte Region soll der Gesamtbereich der beiden Regionen inklusive überlappendem Bereich sein
'Const RGN_XOR = 3
'' Die kombinierte Region soll der Gesamtbereich der beiden Regionen exklusive überlappendem Bereich sein
'Const RGN_DIFF = 4
'' Die kombinierte Region soll der Gesamtbereich der hSrcRgn1 sein, inklusive des Bereiches der Region die von hSrcRgn2 überlappt wird
'Const RGN_COPY = 5
'' Die kombinierte Region soll der Gesamtbereich der hSrcRgn2 sein, inklusive des Bereiches der Region die von hSrcRgn1 überlappt wird
   
    Public RegionA As Long
    Public RegionB As Long
    Public RegionC As Long
    
    Public GesamtReg As Long
    Public Teil1Reg As Long
    Public Teil2Reg As Long
    
    Public X1 As Long
    Public Y1 As Long
    Public X2 As Long
    Public Y2 As Long
    
    Public Kreis_X1 As Long
    Public Kreis_Y1 As Long
    Public Kreis_X2 As Long
    Public Kreis_Y2 As Long
Wäre toll wenn ihr mir weiterhelfen könntest. Beiße mir gerade regelrecht die Zähne aus
u.gross ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 13.09.2017, 14:31   #2
daolix
MOF User
MOF User
Standard

hallo
jetzt echt kein plan, aba lt. msdn sollte es dann mit dem Parameter RGN_DIFF gehen, so in

CombineRgn GesamtReg, GesamtReg, RegionC, RGN_DIFF

__________________

(K)ein Plan von nix
daolix ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 13.09.2017, 14:37   #3
u.gross
Threadstarter Threadstarter
MOF User
MOF User
Standard

Ja das dachte ich mir auch ... aber damit tut sich gar nichts. Es bleibt weiterhin die Kombination aus RegionA und RegionB sichtbar

Code:

    Const RGN_DIFF = 4
    RegionC = CreateRoundRectRgn(800, 40, 1600, 100, 0, 0)
    CombineRgn GesamtReg, GesamtReg, RegionC, RGN_DIFF
    SetWindowRgn Me.hWnd, GesamtReg, True
u.gross ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 13.09.2017, 14:42   #4
daolix
MOF User
MOF User
Standard

Hmm okay
ein schneller Test mit deinem Code und der RegionC schneidet bei mir zumindest oben rechts was weg.

__________________

(K)ein Plan von nix
daolix ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 13.09.2017, 14:59   #5
u.gross
Threadstarter Threadstarter
MOF User
MOF User
Standard

Wenn ich nur Region B mit Region C schneide, dann funktioniert das auch bei mir. Aber die Kombination aus allen drei will er einfach ned umsetzen.
u.gross ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 13.09.2017, 19:22   #6
Marsu65
MOF Guru
MOF Guru
Standard

Hallo!

Zitat:

...will er einfach ned umsetzen.

Wie setzt du es denn um?
Code:

Const RGN_OR = 2
Const RGN_DIFF = 4
 
    RegionA = CreateEllipticRgn(200, 670, 400, 870)
    RegionB = CreateRoundRectRgn(80, 40, 1500, 700, 10, 10)
    RegionC = CreateRoundRectRgn(800, 40, 1600, 100, 0, 0)
    GesamtReg = RegionA
    CombineRgn GesamtReg, GesamtReg, RegionB, RGN_OR
    CombineRgn GesamtReg, GesamtReg, RegionC, RGN_DIFF
funktioniert bei mir mit einem Formular in Registeransicht
bzw. solange das Form in Fensteransicht groß genug ist.

Zum Thema imho lesenswert: http://access.mvps.org/access/api/api0053.htm

Geändert von Marsu65 (13.09.2017 um 19:25 Uhr).
Marsu65 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 14.09.2017, 08:41   #7
u.gross
Threadstarter Threadstarter
MOF User
MOF User
Standard

Ich kapier es noch nicht so ganz aber wenn ich deinen Code im Formular beim Laden ausführe , dann wird auch die Region C rausgeschnitten. Bei einem Button mit der gleichen Funktion bleibt weiterhin nur Region A und B berücksichtigt
u.gross ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 15.09.2017, 08:42   #8
u.gross
Threadstarter Threadstarter
MOF User
MOF User
Standard

Ich habe jetzt alles in eine neue Datenbank importiert und nun geht es auch per Tastendruck. Thema ist damit erledigt.... vielen Dank!
u.gross ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:44 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Copyright ©2000-2010 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günther Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.
Beachten Sie bitte auch unsere Nutzungsbedingungen.