Español
Fuente/ Codesnippets

Bestimmen Combinergn Fensterformen

 
Wiedermal dank Sebastian König kann con diesem Snipped el Form de Fenstern cualquier verändert voluntad:
+----------------------------------------------------------+
| combrgn.prf                                              |
| Autor: Sebastian König                                   |
| email: feedback@sekoenig.de                              |
| Homepage: http://www.sekoenig.de                         |
| Spielereien con CombineRgn()                             |
+----------------------------------------------------------+
+===================================================+
# Dieser Ver código fuente baut en Code de PRFellow 99    #
# de Thomas Hölzer en. An dieser Punto todavía      #
# veces vielen Dank y una grosses Lob a el        #
# Autor!                                            #
#                                                   #
# Más a PRFellow son`s bajo:                    #
# http://prfellow.home.pages.de                   #
+===================================================+
--Benötigte Características
DEF SetWindowRgn(3) !USER32,SetWindowRgn
DEF CreateEllipticRgn(4) !GDI32,CreateEllipticRgn
DEF CreateRectRgn(4) !GDI32,CreateRectRgn
DEF CreatePolyRgn(3) !GDI32,CreatePolygonRgn
DEF CombineRgn(4) !GDI32,CombineRgn
DEF DeleteObject(1) !GDI32,DeleteObject
--Deklarationen
declarar DEST&,SOURCE1&,SOURCE2&                para CombineRgn()
---Neues Ventana redactar
windowstyle 16
window 0,0-400,400
windowtitle ...
Jetzt va`s los...
---Ventana con eckigem Loch
SetWindowPos %hwnd=0,0-400,400                   Ventana adaptar
windowtitle Eckiges Loch
cls 0                                            Damit el Ergebnis mejor
sichtbar se
Color del texto @RGB(31,31,31),-1
DrawText 1,1,Mausklick = Weiter
let DEST&    = CreateRectRgn(0,0,0,0)            El neue Region con 0 initialisiern
let SOURCE1& = CreateRectRgn(0,0,400,400)        El 1. el beiden a kombinierenden
Regionen
let SOURCE2& = CreateRectRgn(100,100,300,300)    ...y el 2.
CombineRgn(DEST&,SOURCE1&,SOURCE2&,3)            El beiden Regionen voluntad kombiniert
y el Ergebnis se en
DEST& gespeichert
SetWindowRgn(%hwnd,DEST&,1)                      Nun ändern wir sólo todavía el Region
des Fensters...
waitinput   warten...
---Ventana con rundem Loch
SetWindowPos %hwnd=%winLeft,%winTop-400,400
windowtitle Rundes Loch
cls 0
Color del texto @RGB(31,31,31),-1
DrawText 1,1,Mausklick = Weiter
let DEST&    = CreateRectRgn(0,0,0,0)
let SOURCE1& = CreateRectRgn(0,0,400,400)             |
let SOURCE2& = CreateEllipticRgn(100,100,300,300)     |
>  siehe oben...
CombineRgn(DEST&,SOURCE1&,SOURCE2&,3)                 |
|
SetWindowRgn(%hwnd,DEST&,1)                          /
waitinput   y otra vez warten...
---Ventana, el en 2 Hälften geteilt es
SetWindowPos %hwnd=%winLeft,%winTop-400,400
windowtitle Geteiltes Ventana
cls 0
Color del texto @RGB(31,31,31),-1
DrawText 1,1,Mausklick = Weiter
let DEST&    = CreateRectRgn(0,0,0,0)
let SOURCE1& = CreateRectRgn(0,0,170,400)             |
let SOURCE2& = CreateRectRgn(230,0,400,400)           |
>  siehe oben...
CombineRgn(DEST&,SOURCE1&,SOURCE2&,3)                 |
|
SetWindowRgn(%hwnd,DEST&,1)                          /
waitinput   el übliche...
---Auch geteilt, sólo anders....
SetWindowPos %hwnd=%winLeft,%winTop-400,400
windowtitle Geteiltes Ventana, el 2.
cls 0
Color del texto @RGB(31,31,31),-1
DrawText 1,1,Mausklick = Weiter
let DEST&    = CreateRectRgn(0,0,0,0)
let SOURCE1& = CreateRectRgn(0,0,200,200)             |
let SOURCE2& = CreateEllipticRgn(200,200,400,400)     |
>  siehe oben...
CombineRgn(DEST&,SOURCE1&,SOURCE2&,3)                 |
|
SetWindowRgn(%hwnd,DEST&,1)                          /
waitinput   y otra vez...
---Schlüsselloch-Ventana
SetWindowPos %hwnd=%winLeft,%winTop-200,300
windowtitle ...     Sieht uno eh´ no bastante...
cls 0
Color del texto @RGB(31,31,31),-1
DrawText 33,1,Mausklick = Weiter
let DEST&    = CreateRectRgn(0,0,0,0)
let SOURCE1& = CreateEllipticRgn(0,0,200,200)         |
let SOURCE2& = CreateRectRgn(50,100,150,400)          |
>  siehe oben...
CombineRgn(DEST&,SOURCE1&,SOURCE2&,2)                 |
|
SetWindowRgn(%hwnd,DEST&,1)                          /
waitinput   qué auch sonst?
---4-geteiltes-Ventana
SetWindowPos %hwnd=%winLeft,%winTop-400,400
windowtitle 4-geteiltes-Ventana
cls 0
Color del texto @RGB(31,31,31),-1
DrawText 1,1,Mausklick = Ende
let DEST&    = CreateRectRgn(0,0,0,0)
let SOURCE1& = CreateRectRgn(0,0,170,400)        |
let SOURCE2& = CreateRectRgn(230,0,400,400)       > siehe oben...
|
CombineRgn(DEST&,SOURCE1&,SOURCE2&,2)            /
ahora se lo anders:
let SOURCE1& = DEST&                            wir speichern DEST en SOURCE1,
let SOURCE2& = CreateRectRgn(0,170,400,230)     redactar todavía una Region...
CombineRgn(DEST&,SOURCE1&,SOURCE2&,4)           ...y kombinieren una 2. Tiempo
SetWindowRgn(%hwnd,DEST&,1)                     de ahora otra vez alles como oben...
waitinput   auch el restos igual...
---Und el war`s...
DeleteObject(DEST&)                             wir geben el erstellten Regionen
DeleteObject(SOURCE1&)                          otra vez frei
DeleteObject(SOURCE2&)                          (Dank a Christian Zietz)
end
 
20.04.2004  
 



Der Dank para esta Code va a Herrn Dieter Zornow
Stand 06/04, Quelle:  [...] 

Ventana Regionen
Autor: Dieter Zornow
No todos Def´s son benutzt
Code es frei
Def WindowFromDC(1) ! user32,WindowFromDC
Def GetDC(1) ! user32,GetDC
Def GetWindowDC(1) ! user32,GetWindowDC
Def ReleaseDC(2) ! user32,ReleaseDC
Def SaveDC(1) ! gdi32,SaveDC
Def RestoreDC(2) ! gdi32,RestoreDC
Def GetCurrentObject(2) ! gdi32,GetCurrentObject
Def GetWindowRgn(2) ! user32,GetWindowRgn hndl&,reg-hndl&
Def SetWindowRgn(3) ! user32,SetWindowRgn hndl&,reghndl&,redrawflag
Def DeleteObject(1) ! gdi32,DeleteObject hndl&
Def Seleccionar objeto(2) ! gdi32,Seleccionar objeto hdc,hndl&
Def InvertRgn(2) ! gdi32,InvertRgn hdc&,hdnl&
Def FillRgn(3) ! gdi32,FillRgn hdc, handl,brush
Def PaintRgn(2) ! gdi32,PaintRgn hdc,handl
Def FrameRgn(5) ! gdi32,FrameRgn
Def GetRgnBox(2) ! gdi32,GetRgnBox  hdnl,rect
Def CombineRgn(4) ! gdi32,CombineRgn
Def Moverect(3) ! gdi32,OffsetRgn
Def PtInRegion(3) ! gdi32,PtInRegion hndl el Region, x, y
Def PtVisible(3) ! gdi32,PtVisible
Def RectVisible(2) ! gdi32,RectVisible hdc,rect#
Def RectInRegion(2) ! gdi32,RectInRegion
Def SetRectRgn(5) ! gdi32,SetRectRgn
Def CreateRectRgn(4) ! gdi32,CreateRectRgn
Def CreateEllipticRgn(4) ! gdi32,CreateEllipticRgn
Def CreateRoundRectRgn(6) ! gdi32,CreateRoundRectRgn x%,y%,x1%,y2%,height%,width%
Def CreatePolygonRgn(3) ! gdi32,CreatePolygonRgn
Def CreateSolidBrush(1) ! GDI32,CreateSolidBrush
Def CreateHatchBrush(2) ! GDI32,CreateHatchBrush
Def CreatePen(3) ! gdi32,Def CreatePen
Def CreatePenIndirect(3) ! gdi32,CreatePenIndirect

proc Rahmenrec

    Parámetro %hdc, handle el region, 1 oder 2 para brushauswahl,Rahmenbreite,Rahmenhöhe,brushstyle,color
    parámetros hdc&,rgn&,brush&,x%,y%,style&,col&
    Declarar sb&
    caso Brush& = 1:sb& = CreateHatchBrush(style&,col&)
    caso Brush& = 2:sb& = CreateSolidBrush(col&)
    FrameRgn(hdc&,rgn&,sb&,x%,y%)
    DeleteObject(sb&)

ENDPROC

Proc InvertRgn XOR, beim zweiten Aufruf otra vez normal

    parameter %hdc, handle el Region
    parámetros hdc&,hndl&
    InvertRgn(hdc&,hndl&)
    InvertRgn(%hdc2,hndl&) Sicherungskopie

ENDPROC

Proc CreateRechteck

    Parámetro xecke, yecke, länge, höhe
    parámetros x%,y%,xl%,yh%
    Declarar Hndl&
    xl% = x%+xl%
    yh% = y%+yh%
    hndl& = CreateRectRgn(x%,y%,xl%,yh%)
    volver hndl&

ENDPROC

Proc CreateKreis

    Parámetro xecke, yecke, Durchmesser, Durchmesser - > en Kreis,  / en Elipse Werte je después de Größe
    parámetros x%,y%,xl%,yh%
    Declarar Hndl&
    xl% = x%+xl%
    yh% = y%+yh%
    hndl& = CreateEllipticRgn(x%,y%,xl%,yh%)
    volver hndl&

ENDPROC

Proc CreateRundEck

    Parámetro xecke, yecke, länge, höhe abrunden, weite abrunden
    parámetros x%,y%,xl%,yh%,h%,w%
    Declarar Hndl&
    xl% = x%+xl%
    yh% = y%+yh%
    hndl& = CreateRoundRectRgn(x%,y%,xl%,yh%,h%,w%)
    volver hndl&

ENDPROC

Proc CreateVieleck Anzahl Parámetro muss siempre una vielfaches de 2 se.

    Variable Anzahl de Parametern, je después de Eckenzahl, jede Ecke benötigt 2 Werte, x y Y
    Declarar ecken%,hndl&,point#,offset%,point1#
    ecken% = %PCount
    offset% = 0
    Dim point#,ecken% * 4

    whileloop ecken% de Profano 7 darunter en una normale mientras que - Bucle umwandeln y a ecken% aufzählen

        long point#,offset% = @%(&bucle)
        offset% = offset% + 4

    endwhile

    hndl& = CreatePolygonRgn(point#,(ecken% / 2),2)
    Disponer point#
    volver hndl&

ENDPROC

proc Sfillregn

    Parámetro %hdc, handle el Region, Color
    parámetros hdc&,hndl&,col&
    Declarar sb&
    sb& = CreateSolidBrush(col&)
    FillRgn(hdc&,hndl&,sb&)
    FillRgn(%hdc2,hndl&,sb&)
    DeleteObject(sb&)

ENDPROC

proc Hfillregn

    Parámetro %hdc, handle el Region, brush style, Color
    parámetros hdc&,hndl&,style&,col&
    Declarar sb&
    sb& = CreateHatchBrush(style&,col&)
    FillRgn(hdc&,hndl&,sb&)
    FillRgn(%hdc2,hndl&,sb&)
    DeleteObject(sb&)

ENDPROC

proc compregn

    Parámetro Handle el Zielregion, Handle el 1. a integrierenden Region, Handle el 2. a integrierenden Region, Integrierungsmodus
    parámetros HdDes&,Hdsour1&,Hdsour2&,mode&
    CombineRgn(HdDes&,Hdsour1&,Hdsour2&,mode&)

ENDPROC

Ejemplo
cls
Declarar rk&,kr&,re&,ve&,kr2&,rk2&,rk3&,el&
CreateRechteck 10,10,50,20 1 Rechteck
rk& = @&(0)
sfillregn %hdc,rk&,255
CreateKreis 10,35,50,50  Kreis
kr& = @&(0)
sfillregn %hdc,kr&,16740608
CreateKreis 100,35,25,50  Elipse
el& = @&(0)
sfillregn %hdc,el&,16740608
CreateRundEck 10,90,50,30,20,30
re& = @&(0)
sfillregn %hdc,re&,65280
CreateKreis 10,130,50,50 combin 1
kr2& = @&(0)
Hfillregn %hdc,kr2&,5,65535
CreateRechteck 58,145,50,20 Combin 2
rk2& = @&(0)
Hfillregn %hdc,rk2&,5,65535
CreateRechteck 10,185,50,20 umrahmtes Rechteck
rk3& = @&(0)
Rahmenrec %hdc,rk3&,2,2,2,0,255
compregn kr2&,kr2&,rk2&,2 combin1 y combin2 voluntad a uno Region Handle = kr2& RGN_OR
DeleteObject(rk2&) existiert ya no mehr
CreateVieleck 10,400,50,300,100,400 Dreieck
ve& = @&(0)
Sfillregn %hdc,ve&,255
Localizar 30,30
caso PtInRegion(ve&,30,380) = 1:Imprimir Diese Koordinate liegt en el Dreieck Abfrage si Koordinate en el Dreieck liegt
waitinput
InvertRgn(%hdc,rk&) El Regionen voluntad beim ersten veces invertiert
InvertRgn(%hdc,kr&)
InvertRgn(%hdc,re&)
InvertRgn(%hdc,kr2&)
InvertRgn(%hdc,rk3&)
InvertRgn(%hdc,ve&)
InvertRgn(%hdc,el&)
waitinput
InvertRgn(%hdc,rk&) El Regionen voluntad beim zweiten veces otra vez normal adecuado
InvertRgn(%hdc,kr&)
InvertRgn(%hdc,re&)
InvertRgn(%hdc,kr2&)
InvertRgn(%hdc,rk3&)
InvertRgn(%hdc,ve&)
InvertRgn(%hdc,el&)
waitinput
SetWindowRgn(%Hwnd,ve&,1) Ventana se sólo todavía en diesem Zona adecuado, 1 = neuzeichnen, 0 = nein
Parámetro Ventana handle, Region handle, neuzeichen
waitinput
DeleteObject(rk&) alles otra vez liberación, es notwendig
DeleteObject(kr&)
DeleteObject(re&)
DeleteObject(kr2&)
DeleteObject(rk2&)
DeleteObject(rk3&)
DeleteObject(ve&)
DeleteObject(el&)
end
-----------------------------------------------------------------------
Für Vieleck
ALTERNATE = 1 Alternative zwischen Gefüllt y ungefüllt
WINDING = 2 Das dreieck normal gefüllt
fnCombineMode
Specifies a mode indicating how the two regions voluntad be combined. This parameter can be one of the following values:
Value	Description
RGN_AND	Creates the intersection of the two combined regions.
RGN_COPY	Creates a copy of the region identified by hrgnSrc1.
RGN_DIFF	Combines the parts of hrgnSrc1 that are not part of hrgnSrc2.
RGN_OR	        Creates the union of two combined regions.
RGN_XOR	Creates the union of two combined regions except for any overlapping areas.
{ CombineRgn() Styles }
RGN_AND = 1;
RGN_OR = 2;
RGN_XOR = 3;
RGN_DIFF = 4;
RGN_COPY = 5;
RGN_MIN = ~RGN_AND;
RGN_MAX = ~RGN_COPY;
Hatch-brush-werte
HS_HORIZONTAL = 0;       { ----- }
HS_VERTICAL   = 1;       { ||||| }

HS_FDIAGONAL  = 2;       {///// }

    HS_BDIAGONAL  = 3;       { \\ }
    HS_CROSS      = 4;       { +++++ }
    HS_DIAGCROSS  = 5;       { xxxxx }
 
02.06.2004  
 



Zum Quelltext


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

4.068 Views

Untitledvor 0 min.
p.specht14.07.2018
Paul Glatz27.09.2014
Manfred Barei27.12.2013
Julian Schmidt24.10.2012
Más...

Themeninformationen

Dieses Thema ha 1 subscriber:

unbekannt (2x)


Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie