| |
|
|
Marcus Mayer | Hola a todos!
Yo hätte da ne cuestión de tiempo: ¿Es posible, con los recursos de a bordo (Hable con GDIPlus o.ä.) PNG con canal alfa en el Client-Zona des XProfan-Fensters para dibujar, sin la ProSpeed.dll utilizarse? (Bajo Win7)
¿Su tiempo comenzó a programar con lo profano y lo fue hasta la versión 6 7.5 bastante fleißig esta. Sin embargo, luego hizo una pausa bastante larga y se durmió a través de algunos cambios. Puesto que soy programación probablemente bastante oxidada, Me gustaría algo de la historia como z.B las capas de Windows inteligentes no del todo. |
|
|
| |
|
|
|
| Hola Marcus,
Andreas ha Miethe "LayeredWindow con Alphakanal" [...] previsto -
Yo tengo mal lo siento verwürgt - pero llama la PNGs: KompilierenMarcaSeparaciónGemerkt/Separiert von http://xprofan.com/t/?7898 (Andreas Miethe)
###############################
Layered-Window mit PNG
und GDIPlus
###############################
If Val($winver) < 5
Messagebox("Die Windows-Version wird nicht unterstützt","Sorry",0)
End
Endif
###############################
Imports
###############################
Var GdiPlus& = ImportDll("GDIPlus.dll","")
###############################
###############################
Header-Dateien
$H windows.ph
$H Messages.ph
###############################
###############################
Strukturen
###############################
Struct GdiplusStartupInput = GdiplusVersion&,DebugEventCallback&,SuppressBackgroundThread&,SuppressExternalCodecs&
Struct Size = cx&,cy&
Struct Point = x&,y&
Struct Blendfunction = a#(4)
###############################
Var WW& = 280 Bildbreite
Var WH& = 280 Bildhöhe
###############################
cls
~SetClassLong(%hwnd,~GCL_STYLE,(~GetClassLong(%hwnd,~GCL_STYLE)- ~CS_HREDRAW - ~CS_VREDRAW))
SetStyle %Hwnd,1, GetStyle(%hwnd,1) | $80000 erweiterten Window-Stil setzen
Var GdiplusToken& = InitGDIPlus() GDIPlus initialisieren
Var IObject& = GdipLoadImage("BackPic.png") PNG mit Alphakanal laden
Var bm& = ~CreateBitmap(ww&,wh&,1,32,0) 32-Bit Bitmap anlegen
Var DC& = ~CreateCompatibleDC(0) DC-anlegen
~SelectObject(DC&,bm&) Bitmap ins DC
Var Graphics& = 0
GdipCreateFromHdc(%hDC,Addr(Graphics&)) Zeichnungs-Object anlegen
GdipSetSmoothingMode(Graphics&,2) weicher zeichnen
GdipDrawImageRectI(Graphics&,IObject&,0,0,ww&,wh&) Bild zeichnen
GdipDrawImageRectI(Graphics&,IObject&,50,50,ww&,wh&) Bild zeichnen
GdipDeleteGraphics(Graphics&) Zeichnugs-Object freigeben
GdipDisposeImage(IObject&) Bitmap feigeben
ExitGDIPlus(gdiplusToken&) GDIPlus beenden
waitinput
end
Parameter für UpdateLayeredWindow vorbereiten
Var Size# = New(Size)
Var Point# = New(Point)
Var Blendmode# = New(Blendfunction)
Clear Blendmode#,Point#,Size#
Size#.cx& = ww&
Size#.cy& = wh&
Byte Blendmode#,2 = 255
Byte Blendmode#,3 = 1
External("User32.dll","UpdateLayeredWindow",%hwnd, 0, 0, Size#,DC&,Point#,0,Blendmode#, 0)
UpdateLayeredWindow() übernimmt das Zeichnen/Neuzeichen des Fensters !
Die benötigten Daten zum Zeichnen holt sich die Funktion direkt vom DC !
Das geht extrem schnell, da Windows keinen weiteren Speicher reservieren muss.
Hautpschleife
#############
Var Ende& = 0
Whilenot Ende&
Waitinput
If %MousePressed = 1
Sendmessage(%hwnd,$0112,$0F012,0)
ElseIf %MousePressed = 2
OnEnd()
Endif
EndWhile
Ende-Procedur
###############################
Proc OnEnd
Dispose Size#,Point#,Blendmode#
~DeleteDC(DC&)
~DeleteObject(bm&)
Ende& = 1
EndProc
###############################
###############################
GDIPLUS
###############################
Proc InitGDIPlus
Declare gdiplusToken&
Var gdpsi# = New(GdiplusStartupInput)
gdpsi#.GdiplusVersion& = 1
gdpsi#.DebugEventCallback& = 0
gdpsi#.SuppressBackgroundThread& = 0
gdpsi#.SuppressExternalCodecs& = 0
GdiplusStartup(ADDR(gdiplusToken&),gdpsi#,0)
Dispose gdpsi#
Return gdiplusToken&
EndProc
Proc ExitGDIPlus
Parameters gdiplusToken&
GdiplusShutdown(gdiplusToken&)
FreeDLL GDIPlus&
Endproc
Proc S2WSString to WideString
Parameters S$
Declare w$
w$ = Space$((Len(s$)*2)+1)
~MultiByteToWideChar(~CP_ACP, 0, ADDR(s$), -1, ADDR(w$), Len(w$)+1)
Return w$
EndProc
Proc GDIPLoadImage
Parameters Image$
Declare result&,FileW$,Bitmap&
result& = 0
FileW$ = S2WS(Image$)
GdipCreateBitmapFromFile(ADDR(FileW$),ADDR(Bitmap&))
if Bitmap&
result& = Bitmap&
Endif
volver result&
ENDPROC
###############################
Por favor, de un "brauchbaren" Hacer el código, hätte También me gusta.
Línea KompilierenMarcaSeparación determinado Edición-DC.
(PNG-Bild descargue de su paquete de Andreas.) |
|
|
| |
|
|
|
| Etwas saubereres Beispiel:
Download
KompilierenMarkierenSeparieren'Gemerkt/Separiert von https://xprofan.com/t/?7898 (Andreas Miethe)
'
'###############################
' Layered-Window mit PNG
' und GDIPlus
'###############################
If Val($winver) < 5
Messagebox("Die Windows-Version wird nicht unterstützt","Sorry",0)
End
Endif
'###############################
'Imports
'###############################
Var GdiPlus& = ImportDll("GDIPlus.dll","")
'###############################
'###############################
'Header-Dateien
$H windows.ph
$H Messages.ph
'###############################
'###############################
'Strukturen
'###############################
Struct GdiplusStartupInput = GdiplusVersion&,DebugEventCallback&,SuppressBackgroundThread&,SuppressExternalCodecs&
Struct Size = cx&,cy&
Struct Point = x&,y&
Struct Blendfunction = a#(4)
'###############################
Var WW& = 280' Bildbreite
Var WH& = 280' Bildhöhe
'###############################
cls
Var GdiplusToken& = InitGDIPlus()' GDIPlus initialisieren
Var IObject& = GdipLoadImage("BackPic.png")' PNG mit Alphakanal laden
Var bm& = ~CreateBitmap(ww&,wh&,1,32,0)' 32-Bit Bitmap anlegen
Var DC& = ~CreateCompatibleDC(0)' DC-anlegen
~SelectObject(DC&,bm&)' Bitmap ins DC
Var Graphics& = 0
GdipCreateFromHdc(%hDC2,Addr(Graphics&))' Zeichnungs-Object anlegen
GdipSetSmoothingMode(Graphics&,2)' weicher zeichnen
whileLoop 50
GdipDrawImageRectI(Graphics&,IObject&,rnd(width(%hWnd)-ww&),rnd(height(%hWnd)-wh&),ww&,wh&)' Bild zeichnen
wend
repaint 1
GdipDeleteGraphics(Graphics&)' Zeichnugs-Object freigeben
GdipDisposeImage(IObject&)' Bitmap feigeben
ExitGDIPlus(gdiplusToken&)' GDIPlus beenden
waitinput
OnEnd()
end
'Ende-Procedur
'###############################
Proc OnEnd
~DeleteDC(DC&)
~DeleteObject(bm&)
EndProc
'###############################
'###############################
'GDIPLUS
'###############################
Proc InitGDIPlus
Declare gdiplusToken&
Var gdpsi# = New(GdiplusStartupInput)
gdpsi#.GdiplusVersion& = 1
gdpsi#.DebugEventCallback& = 0
gdpsi#.SuppressBackgroundThread& = 0
gdpsi#.SuppressExternalCodecs& = 0
GdiplusStartup(ADDR(gdiplusToken&),gdpsi#,0)
Dispose gdpsi#
Return gdiplusToken&
EndProc
Proc ExitGDIPlus
Parameters gdiplusToken&
GdiplusShutdown(gdiplusToken&)
FreeDLL GDIPlus&
Endproc
Proc S2WS'String to WideString
Parameters S$
Declare w$
w$ = Space$((Len(s$)*2)+1)
~MultiByteToWideChar(~CP_ACP, 0, ADDR(s$), -1, ADDR(w$), Len(w$)+1)
Return w$
EndProc
Proc GDIPLoadImage
Parameters Image$
Declare result&,FileW$,Bitmap&
result& = 0
FileW$ = S2WS(Image$)
GdipCreateBitmapFromFile(ADDR(FileW$),ADDR(Bitmap&))
if Bitmap&
result& = Bitmap&
Endif
return result&
ef='./../../references-fonction/xprofan/endproc/'>EndProc
'###############################
|
|
|
| |
|
|
|
Marcus Mayer | En primer lugar muchas gracias muchas para la respuesta rápida! No puede esperar, todo el experimento. |
|
|
| |
|
|
|
Marcus Mayer | Así que de nuevo muchas gracias para la gran respuesta. No lo entiendo, pero en los detalles, cómo funciona todo, podría yo, sino un Incluir-Expediente remendar, a una schönen De una sola línea para sacar PNGs. Exactamente lo que quería Si en todos los späteren Los proyectos se aplican, Que yo llamo el noble Code-Spender natürlich |
|
|
| |
|
|
|
|
Así que de nuevo muchas gracias para la gran respuesta. No lo entiendo, pero en los detalles, cómo funciona todo, podría yo, sino un Incluir-Expediente remendar, a una schönen De una sola línea para sacar PNGs. Exactamente lo que quería
No hay de qué!
Si en todos los späteren Los proyectos se aplican, Que yo llamo el noble Code-Spender natürlich
Poste, sino que salió en los incluye Incluir [...] - A su vez, todos tenemos algo como esto - hätte Yo z.B. También me gusta. |
|
|
| |
|
|
|
| Marcus Mayer, Beitrag=57235, Zeitpunkt=27.05.2010
¿Todavía sin problemas.^ ^ Antes de que la incluyen, pero oficialmente Disposición lugar, sería Me gusta estar aquí otra vez para avanzar Revisión post. También puede disfrutar de una luz Ejemplo-Code hinzufügen, si gewünscht. Pero no es así nötig ser
Ah, Entiendo lo que quieres decir - Sin embargo, esta discusión debe incluir la formación del VLT. mejor en Incluir-Hilo disponible posición - naja dafür De hecho, es la Incluir-Hilo. ^ ^ También es legítimo z.B. Incluye- o programas, o ... -hilos para enviar una idea basada en sólo un boceto, con el fin de desarrollar el primer lugar o para que comparta con otros usuarios en el desarrollo.
Referencia: Siempre se puede sus temas/ Beiträge/ Archivos/ Incluye/ Programas... etc. en cualquier momento para editar y löschen - esto, simplemente haga clic en la fecha de revisión.
Wir könnten si möchtest incluir también la desconexión de un nuevo tema para la incluye. |
|
|
| |
|
|
|
Marcus Mayer | Okay, luego hacer wirs así Estoy aquí en la comunidad no hace mucho tiempo y muy consciente de la práctica, por lo tanto, aún no.
Entonces será sin duda también el tiempo, como se hace aquí la etiqueta de roscas en, correcto? |
|
|
| |
|
|
|
| Exactamente, Yo que antes de los tiempos. ^ ^
Apéndice: Ahora tenía herausgeteilt Incluya su - Usted ha creado también la sincronización en la incluye. Acabas de quitar el hilo herausgeteilten. ^ ^ |
|
|
| |
|
|