"transparente" XbParts

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

"transparente" XbParts

Beitrag von AUGE_OHR »

hi,

kann man ein XbpMLE oder XbpSLE "transparent" machen ?
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: "transparente" XbParts

Beitrag von brandelh »

Hi,

man kann den Hintergrund eines Fensters und damit controls auf transparent setzen ...
Wahrscheinlich sind aber die "sichtbaren Teile" im Vordergrund. TOM hatte mal beschrieben, wie man bei Fenstern die Deckung senkt, das sollte auch bei XbParts gehen.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: "transparente" XbParts

Beitrag von AUGE_OHR »

brandelh hat geschrieben:man kann den Hintergrund eines Fensters und damit controls auf transparent setzen ...
Wahrscheinlich sind aber die "sichtbaren Teile" im Vordergrund.
habe ich versucht, aber MLE oder SLE haben immer "weiss" als Hintergrund.

Code: Alles auswählen

   ::XbpDialog:init( oParent, oOwner, aPos, aSize, aPP, lVisible )
   ::XbpDialog:taskList := .T.
   ::XbpDialog:title := "Neues Formular"

   ::XbpDialog:drawingArea:ColorBG := -255
   ::XbpDialog:drawingArea:clipChildren := .T.
   ::XbpDialog:drawingArea:clipParent   := .T.
   ::XbpDialog:drawingArea:clipSiblings := .F.
ergibt
NeroLeerKreis.JPG
NeroLeerKreis.JPG (56.77 KiB) 9244 mal betrachtet
btw. kann man ein "Ownerdraw" mit SLE oder MLE machen ?
brandelh hat geschrieben:TOM hatte mal beschrieben, wie man bei Fenstern die Deckung senkt, das sollte auch bei XbParts gehen.
leider geht es nur auf das Handle eines "Fenster" (XbpDialog) und nicht auf das Handle von XbParts.
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: "transparente" XbParts

Beitrag von brandelh »

AUGE_OHR hat geschrieben:
brandelh hat geschrieben:man kann den Hintergrund eines Fensters und damit controls auf transparent setzen ...
Wahrscheinlich sind aber die "sichtbaren Teile" im Vordergrund.
habe ich versucht, aber MLE oder SLE haben immer "weiss" als Hintergrund.
Das stimmt so nicht, ich kann die Hintergrundfarbe z.B. auf ROT oder grün setzen, warum nicht auf transparent ?

XBP_PP_BGCLR Hintergrundfarbe :setColorBG()

Standart ist: XBPSYSCLR_ENTRYFIELD aber es gibt ja auch XBPSYSCLR_TRANSPARENT

bei aktivem Visual Style ...
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: "transparente" XbParts

Beitrag von AUGE_OHR »

hi,

XBPSYSCLR_TRANSPARENT ist ja keine "Farbe" sondern
Ist die Systemfarbe "transparent" (XBPSYSCLR_TRANSPARENT) als Hintergrundfarbe definiert, verwendet GraBackground() Grafikinformationen aus dem Ausgabebereich des Parent-Objekts des Xbase Parts zum Zeichnen des Hintergrunds.
leider "klappt" das nicht bei "allen" XbParts.

Deshalb kam ich auf "Ownerdraw" um das GraBackground() "ab-zu-fangen" ...
gruss by OHR
Jimmy
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: "transparente" XbParts

Beitrag von Tom »

Mmh. Ich arbeite mit transparenten MLEs. Die Haftnotizen im Hauptmenü meiner App sind transparente, scrollbalkenfreie MLEs, die auf farbigen Bitmaps liegen. Ich schaue mir morgen mal den Code an und zeige ein Beispiel.
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: "transparente" XbParts

Beitrag von AUGE_OHR »

hi

ich bin auf die Idee gekommen das Demo mit der farbigen Combobox zu benutzen.
http://www.xbaseforum.de/viewtopic.php? ... &sk=t&sd=a

wenn ich nun XBPSYSCLR_TRANSPARENT -255 benutze bekomme ich wieder "schwarz" ... :-k
... so langsam "denke" ich das -255 "verkehrt" ist ... was wird denn unter VB oder C als Konstante benutzt ?
gruss by OHR
Jimmy
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: "transparente" XbParts

Beitrag von Tom »

In einigen Fällen wird offenbar die Farbdarstellung des Parent-Objekts falsch ermittelt, was ja geschehen muss, damit Transparenz funktioniert. Das gilt für die neuen Tabpages (SL1) und, vor allem, für Active-X-Objekte. Hier müsste m.E. implizit mit AutomationTranslateColor() gearbeitet werden, aber das ist wohl nicht der Fall. :?: Das könnte auch die Ursache dafür sein, dass z.B. Checkboxen auf schwarzem Hintergrund erscheinen, wenn man sie auf die neuen Tabpages legt und mit dem SkinFramework von Codejock arbeitet.
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: "transparente" XbParts

Beitrag von AUGE_OHR »

Tom hat geschrieben:In einigen Fällen wird offenbar die Farbdarstellung des Parent-Objekts falsch ermittelt, was ja geschehen muss, damit Transparenz funktioniert...
YUP ... klar ...
ich "denke" nun das XBPSYSCLR_TRANSPARENT -255 "nur" für "reine" XbParts gilt.

... ich suche aber eine Konstante mit "INVALID..." in Hex Form ...
GRA_CLR_INVALID -6 ist nur Xbase++ ... es gibt da doch was in VB / C ... wo habe ich das gesehen :?:

mit Günters Methode kann ich so ziemlich "jedem" Control die gewünschte "Farbe" beibringen und wenn ich die richtige Konstante für "transparency" hätte ...
gruss by OHR
Jimmy
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Re: "transparente" XbParts

Beitrag von Günter Beyes »

Hallo Jimmy,

mit der Wahl der richtigen Konstante ist es wohl nicht getan; intern ist Code vonnöten, der auf das Flag XBPSYSCLR_TRANSPARENT reagiert.

Das Listbox-Beispiel http://www.xbaseforum.de/viewtopic.php? ... &sk=t&sd=a
läßt sich leider nicht direkt auf XbpSLE und XbpMLE übertragen, weil die CTLCOLOR-Nachricht bei deren Parent ankommt, z.B. der Drawingarea, und nicht beim Edit-Control selbst.

Mit der Farbmanipulation wie im Listbox-Beispiel muss man hier beim Parent des SLE oder MLE ansetzen.

Nehmen wir die Drawingarea an, würde ich das so versuchen.

Code: Alles auswählen

#define TRANSPARENT  1 // wirkt sich nur auf Textdarstellung aus!
#define NULL_BRUSH   5 // Hintergrund des Controls

#define WM_CTLCOLOREDIT   0x133
#define WM_CTLCOLORSTATIC 0x138

CLASS XbpDialogEx FROM XbpDialog

EXPORTED:

   // überladene Methoden

   METHOD init

   METHOD create

   METHOD configure

   METHOD close
   
   METHOD destroy

   // Erweiterung

   METHOD DAWndProc
   
ENDCLASS

// -------------------------------------------------

METHOD XbpDialogEx:init( oParent, oOwner, aPos, aSize, aPP, lVisible )

   ::XbpDialog:init( oParent, oOwner, aPos, aSize, aPP, lVisible )
   
   RETURN self

// -------------------------------------------------
METHOD XbpDialogEx:create( oParent, oOwner, aPos, aSize, aPP, lVisible )

   local rc

   ::XbpDialog:create( oParent, oOwner, aPos, aSize, aPP, lVisible )
   
   rc := _Subclass( ::drawingArea:getHWND(), {|a,b,c,d|::DAWndProc(a,b,c,d)} )

   
RETURN self

// -------------------------------------------------
METHOD XbpDialogEx:configure( oParent, oOwner, aPos, aSize, aPP, lVisible )

   local rc

   rc := _Unsubclass( ::drawingArea:getHWND() )

   ::XbpDialog:configure( oParent, oOwner, aPos, aSize, aPP, lVisible )
   
   rc := _Subclass( ::drawingArea:getHWND(), {|a,b,c,d|::DAWndProc(a,b,c,d)} )

   
RETURN self

// -------------------------------------------------

METHOD XbpDialogEx:close()

   ::destroy()

   RETURN self
   
// ------------------------------------------------------

METHOD XbpDialogEx:destroy()

   local rc

   rc := _UnSubclass( ::drawingArea:getHWND() )

   ::XbpDialog:destroy()
   
 RETURN self

 // -------------------------------------------------
 
 METHOD XbpDialogEx:DAWndProc( hwnd, msg, wparam, lparam )

   local rc
   local aChildlist
   local oEdit
   local i := 0
   
   if msg == WM_CTLCOLOREDIT .or. msg ==  WM_CTLCOLORSTATIC
      // readonly Sle/Mle werden wie Static behandelt
      // lparam ist hwnd des Controls, wParam ist hDC

      // Xbp-Objekt aus handle ermitteln
      aChildlist  := ::drawingArea:childlist()
      i := ascan( aChildList, {|o|o:getHWND() == lparam .and. ;
                                  ( o:isDerivedFrom( XbpSle() ) .or. o:isDerivedFrom( XbpMle() ) ) } )

          if i > 0
             oEdit    := aChildlist[ i ]
             nColorBG := oEdit:setColorBG()
             if nColorBG == -47 // XBPSYSCLR_TRANSPARENT wird durch -47 XBPSYSCLR_ENTRYFIELD ersetzt...
                /* hier geht es um dreierlei Farben:
                  die Hintergrundfarbe des Textes (wird ignoriert da background mode TRANSPARENT)
                  die Vordergrundfarbe des Textes (wie :setColorFG())
                  die Grundfarbe des Controls (wird durch NULL_BRUSH ersetzt, d.h. Transparenz)
                */
                rc := DllCall( "gdi32.dll", DLL_STDCALL, "SetBkMode", wparam, TRANSPARENT ) 
                rc := DllCall( "gdi32.dll", DLL_STDCALL, "SetTextColor", wParam, AutomationTranslateColor( oEdit:setColorFG(), .F. ) )
                return DllCall( "gdi32.dll", DLL_STDCALL, "GetStockObject", NULL_BRUSH )
             endif
          endif
      
   endif

   // Defaultbehandlung aller anderen Messages. 
   RETURN _CallPrevWindowProc( hwnd, msg, wparam, lparam )
Transparenz setzt natürlich voraus, dass im Dialog die Variable :clipChildren nicht gesetzt sein darf.
Und weil der sichtbare Text durch Einfügen, Löschen, Markieren, Scrollen geändert werden kann, ist wohl gelegentliches oder eher häufiges invalidateRect() angesagt.

Nachtrag: Code geändert.
Ein im Sle oder Mle gesetztes XBPSYSCLR_TRANSPARENT wird von Xbase++ heimlich still und leise durch -47 (XBPSYSCLR_ENTRYFIELD) ersetzt...


Gruß,
Günter
Zuletzt geändert von Günter Beyes am Sa, 31. Jul 2010 23:49, insgesamt 4-mal geändert.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: "transparente" XbParts

Beitrag von AUGE_OHR »

Günter Beyes hat geschrieben:mit der Wahl der richtigen Konstante ist es wohl nicht getan; intern ist Code vonnöten, der auf das Flag XBPSYSCLR_TRANSPARENT reagiert.
Wow
das muss ich mir in Ruhe "rein-ziehen" wie du an das Problem ran gehst.
Danke für das Demo und die Mühe die du dir gemacht hast :thumbright:
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: "transparente" XbParts

Beitrag von AUGE_OHR »

hi,

Das XbpMLE ist jetzt transparent !!! Hurra !!!
... aber
TransMLE.JPG
TransMLE.JPG (16.96 KiB) 8970 mal betrachtet

Code: Alles auswählen

#include "Appevent.ch"
#include "DLL.ch"
#include "GRA.ch"

#define TRANSPARENT  1 // wirkt sich nur auf Textdarstellung aus!
#define NULL_BRUSH   5 // Hintergrund des Controls

#define WM_CTLCOLOREDIT   0x133
#define WM_CTLCOLORSTATIC 0x138

// für das benötigte subclass.obj
#pragma library("user32.lib")

PROCEDURE APPSYS
RETURN


PROCEDURE MAIN
LOCAL lExit   := .F.
LOCAL nEvent, oXbp, mp1, mp2
LOCAL aSize   := {600,600}
LOCAL aPos    := CenterPos( aSize, AppDeskTop():currentsize() )
LOCAL oAppNero
LOCAL oDraw
LOCAL oFile
LOCAL oInfo
LOCAL oBitmap
LOCAL nBGClr

   oBitmap := XbpBitmap():New():Create()
   oBitmap:load(,4000)
   nBGClr                 := oBitmap:getDefaultBgColor()
   oBitmap:transparentClr := nBGClr

   oAppNero  := XbpDialogEx():New(AppDeskTop(),,aPos,aSize)
   oAppNero:title := "Xbase++ NeroCOM"
   oAppNero:titleBar := .F.
   oAppNero:Icon  := 1
   oAppNero:drawingarea:bitmap := BMP2BMP(oBitmap,aSize)
   oAppNero:close := {|| lExit  := .T. }
   oAppNero:Create()

   oDraw := oAppNero:drawingArea

   oFile      := XbpSLE():new(oDraw, , { 10,272}, {296, 24} )
   oFile:bufferLength := 80
   oFile:tabStop := .T.
   oFile:visible := .T.
   oFile:create()

   oInfo      := XbpMLE():new(oDraw, , { 12, 32}, {576,220} )
   oInfo:horizScroll  := .F.
   oInfo:vertScroll   := .T.
   oInfo:tabStop      := .T.
   oInfo:create()

   oFile:setdata("hallo du da")
   oInfo:setdata("hello world"+chr(13)+chr(10)+"this is a transparent MLE")

   nEvent := xbe_None
   DO WHILE !lExit
      nEvent := AppEvent ( @mp1, @mp2, @oXbp )
      DO CASE
         CASE nEvent == xbe_None
            EXIT
         CASE nEvent == xbeP_Quit
            EXIT
         CASE nEvent == xbeP_Keyboard .and. mp1 == xbeK_ALT_F4
            EXIT
      OTHERWISE
         oXbp:HandleEvent ( nEvent, mp1, mp2 )
      ENDCASE
   ENDDO

RETURN

STATIC FUNCTION CenterPos( aSize, aRefSize )
RETURN { INT( ( aRefSize[ 1 ] - aSize[ 1 ] ) / 2 ),;
         INT( ( aRefSize[ 2 ] - aSize[ 2 ] ) / 2 ) }

FUNCTION BMP2BMP( oBMP, aXbpSize )
LOCAL oHuge
LOCAL oTiny
LOCAL oPS
LOCAL oRet
LOCAL nBits
LOCAL nPlanes

   IF aXbpSize[ 2 ] > 0
      oHuge := oBMP
      nBits := oBMP:bits
      nPlanes := oBMP:planes
      //Create a small bitmap to fit in our XbpStatic
      oTiny := XBPBITMAP() :New() :Create()
      oTiny:Make( aXbpSize[ 1 ], aXbpSize[ 2 ], nPlanes, nBits )
      oPS := XBPPRESSPACE() :new()
      oTiny:presSpace( oPS )
      //Copie and resize the huge bitmap to the small bitmap
      oHuge:Draw( oPS, { 0, 0, aXbpSize[ 1 ], aXbpSize[ 2 ] },,, GRA_BLT_BBO_IGNORE  )
      oRet := oTiny
   ELSE
      oRet := oBMP
   ENDIF

RETURN oRet


CLASS XbpDialogEx FROM XbpDialog

EXPORTED:

   // überladene Methoden
   METHOD init
   METHOD create
   METHOD configure
   METHOD close
   METHOD destroy

   // Erweiterung
   METHOD DAWndProc

ENDCLASS

// -------------------------------------------------

METHOD XbpDialogEx:init( oParent, oOwner, aPos, aSize, aPP, lVisible )
   ::XbpDialog:init( oParent, oOwner, aPos, aSize, aPP, lVisible )

   RETURN self

// -------------------------------------------------
METHOD XbpDialogEx:create( oParent, oOwner, aPos, aSize, aPP, lVisible )
   local rc

   ::XbpDialog:create( oParent, oOwner, aPos, aSize, aPP, lVisible )
   rc := _Subclass( ::drawingArea:getHWND(), {|a,b,c,d|::DAWndProc(a,b,c,d)} )

RETURN self

// -------------------------------------------------
METHOD XbpDialogEx:configure( oParent, oOwner, aPos, aSize, aPP, lVisible )
   local rc

   rc := _Unsubclass( ::drawingArea:getHWND() )
   ::XbpDialog:configure( oParent, oOwner, aPos, aSize, aPP, lVisible )
   rc := _Subclass( ::drawingArea:getHWND(), {|a,b,c,d|::DAWndProc(a,b,c,d)} )

RETURN self

// -------------------------------------------------

METHOD XbpDialogEx:close()

   ::destroy()

   RETURN self

// ------------------------------------------------------

METHOD XbpDialogEx:destroy()
   local rc

   rc := _UnSubclass( ::drawingArea:getHWND() )
   ::XbpDialog:destroy()

RETURN self

// -------------------------------------------------

METHOD XbpDialogEx:DAWndProc( hwnd, msg, wparam, lparam )
LOCAL rc
LOCAL aChildlist
LOCAL oEdit
LOCAL i := 0
LOCAL nColorBG

   if msg == WM_CTLCOLOREDIT .or. msg ==  WM_CTLCOLORSTATIC
      // readonly Sle/Mle werden wie Static behandelt
      // lparam ist hwnd des Controls, wParam ist hDC

      // Xbp-Objekt aus handle ermitteln
      aChildlist  := ::drawingArea:childlist()
      i := ascan( aChildList, {|o|o:getHWND() == lparam .and. ;
                                  ( o:isDerivedFrom( XbpSle() ) .or. o:isDerivedFrom( XbpMle() ) ) } )

          if i > 0
             oEdit    := aChildlist[ i ]
             nColorBG := oEdit:setColorBG()
             // XBPSYSCLR_TRANSPARENT wird durch -47 XBPSYSCLR_ENTRYFIELD ersetzt...
             if nColorBG == -47 
                /* hier geht es um dreierlei Farben:
                  die Hintergrundfarbe des Textes (wird ignoriert da background mode TRANSPARENT)
                  die Vordergrundfarbe des Textes (wie :setColorFG())
                  die Grundfarbe des Controls (wird durch NULL_BRUSH ersetzt, d.h. Transparenz)
                */
                rc := DllCall( "gdi32.dll", DLL_STDCALL, "SetBkMode", wparam, TRANSPARENT )
                rc := DllCall( "gdi32.dll", DLL_STDCALL, "SetTextColor", wParam,;
                                                 AutomationTranslateColor( oEdit:setColorFG(), .F. ) )
                return DllCall( "gdi32.dll", DLL_STDCALL, "GetStockObject", NULL_BRUSH )
             endif
          endif

   endif

   // Defaultbehandlung aller anderen Messages.
   RETURN _CallPrevWindowProc( hwnd, msg, wparam, lparam )
... ich habe noch nicht mit :clipChildren experimentiert, aber so auf den ersten Blick kann ich den "Unterschied" nicht finden :-k
gruss by OHR
Jimmy
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Re: "transparente" XbParts

Beitrag von Günter Beyes »

...sorry, ich meine :drawingArea:clipChildren. Wenn ich das TRUE setze, sehe ich durch SLE und MLE hindurch z.B. den Desktop.

Gruß,
Günter
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: "transparente" XbParts

Beitrag von AUGE_OHR »

Günter Beyes hat geschrieben:...sorry, ich meine :drawingArea:clipChildren. Wenn ich das TRUE setze, sehe ich durch SLE und MLE hindurch z.B. den Desktop.
nicht ganz ...
SLEhallo.JPG
SLEhallo.JPG (48.03 KiB) 8934 mal betrachtet
da ist das SLE immer noch "schwarz" ...

ich habe auch mit :visualstyle := .F. / .T. probiert (immer mit XP Manifest ?) und alle möglichen :clipXXX Kombinationen ...

naja auch wenn mein Demo mit dem MLE funktioniert ... in der Application läuft es (noch ) nicht :(

trotzdem Danke nochmals für deine Hilfe.
das MLE war (weil gross) viel "wichtiger" und als "Ausgabe" ein "muss"
gruss by OHR
Jimmy
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Re: "transparente" XbParts

Beitrag von Günter Beyes »

Hallo Jimmy,

den Black-hole-Effekt beim SLE kann ich nur bestätigen. Er tritt auf, sobald eine Manifestdatei oder -ressource vorhanden ist, auch wenn man die Theme-Darstellung abschaltet. Na ja, Versuch macht kluch :wink:

Der zweite Ansatz zeigt keine echte Transparenz, sondern hier wird einfach ein Screenshot des Dialog-Hintergrunds im Fensterrahmen von MLE und SLE als Bitmap eingesetzt. Leider aber auch nicht anwendungstauglich, weil der MLE-Hintergrund bei jedem Tastendruck und jedem Scrollen flackert.

Gruß
Günter
Als-ob-Transparenz.PNG
Als-ob-Transparenz.PNG (86.74 KiB) 8894 mal betrachtet
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: "transparente" XbParts

Beitrag von AUGE_OHR »

Günter Beyes hat geschrieben:den Black-hole-Effekt beim SLE kann ich nur bestätigen. Er tritt auf, sobald eine Manifestdatei oder -ressource vorhanden ist, auch wenn man die Theme-Darstellung abschaltet. Na ja, Versuch macht kluch :wink:
... also doch wieder die Manifest Datei :!: auch mit den chinesischen Schriftzeichen habe ich ja da meine Probleme ... :evil:
Günter Beyes hat geschrieben:Der zweite Ansatz zeigt keine echte Transparenz, sondern hier wird einfach ein Screenshot des Dialog-Hintergrunds im Fensterrahmen von MLE und SLE als Bitmap eingesetzt. Leider aber auch nicht anwendungstauglich, weil der MLE-Hintergrund bei jedem Tastendruck und jedem Scrollen flackert.
ja das mit dem scrollen habe ich auch beim ersten Demo beobachtet und es mit oMLE:invalidateRect() versucht ... naja "schön" ist es nicht :-"

meine Idee für die heutige Session ging nun auch in die Richtung BMP.
Ich habe da noch eine "transparentes" XbpBrowse Class von Diego in Arbeit ...
... aber gut das du mich gleich davor "warnst" ... gut mit gedacht :thumbleft:

ok dann muss ich mir noch was anderes überlegen ... es soll :
a.) transparent
b.) scrollbar
sein ... hm ... Ownerdraw Listbox :-k
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: "transparente" XbParts

Beitrag von AUGE_OHR »

hi,

tja unter Win7 sieht die Sache schon anders aus
DWM.jpg
DWM.jpg (159.51 KiB) 8953 mal betrachtet
ich hatte den DWM Render völlig vergessen ... #-o
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: "transparente" XbParts

Beitrag von AUGE_OHR »

hm ... naja ...
DWM_Rund.jpg
DWM_Rund.jpg (275.28 KiB) 8967 mal betrachtet
das MLE und SLE sind zwar "transparent" ... aber "zu viel" ... es geht ja bis auf den Desktop "durch".
Ich möchte aber nur bis zum Bitmap ... und der Rest sollte nicht "transparent" sein.

anderes Problem :

Code: Alles auswählen

   //
   // now construct a Region and call its API function
   //
*
* does not work with DWM
*
*   hRgn := CreateEllipticRgn(nLeftRect,nTopRect,nRightRect,nBottomRect)
*   SetWindowRgn(hHwnd,hRgn,.t.)
dann "verschwindet" der DWM Effekt :(
gruss by OHR
Jimmy
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: "transparente" XbParts

Beitrag von Martin Altmann »

Moin,
hat das nicht - wie Günter schon schrieb - was mit :drawingArea:clipChildren zu tun? Darf nicht true sein, wenn ich das richtig verstanden habe.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: "transparente" XbParts

Beitrag von AUGE_OHR »

Martin Altmann hat geschrieben:hat das nicht - wie Günter schon schrieb - was mit :drawingArea:clipChildren zu tun? Darf nicht true sein, wenn ich das richtig verstanden habe.
hm ... muss ich probieren ...
nee ... ich habe ja keine "normale" :drawingArea mehr weil ja mit DWM Client.
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: "transparente" XbParts

Beitrag von AUGE_OHR »

ich lese gerade http://msdn.microsoft.com/en-us/library ... 85%29.aspx und frage mich welches OS() hatte das Demo,
mit dem Touchscreen und Bildschirm-Keyboard, auf dem Usertreffen 2009 in Röstal hatte.

wenn ich mir die DWM API so ansehe dann sind die
3-D window transition animations, Windows Flip and Windows Flip3D
ja da "eingebaut" ?
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: "transparente" XbParts

Beitrag von AUGE_OHR »

hi,

kann man mit XbpTreeView()

Code: Alles auswählen

oApp:dirTree:setcolorBG(XBPSYSCLR_TRANSPARENT)
verwenden ?
ich kann zwar jede andere Farbe setzen, aber nicht XBPSYSCLR_TRANSPARENT ?

ich habe es auch direkt über die Property versucht ... alle Farben nur nicht ... XBPSYSCLR_TRANSPARENT :(

Code: Alles auswählen

::dirTree:setProperty('ForeColor',AutomationTranslateColor( GRA_CLR_WHITE,.f.))
::dirTree:setProperty('BackColor',AutomationTranslateColor( GraMakeRGBColor({031,153,255}),.f.))
sonst jemand noch einen Tip ?
gruss by OHR
Jimmy
Antworten