wir haben ja die transparency Funktion mit dem man ein "Fenster" transparent machen kann.
Diese Art von Effekten ist bei Win7 / Aero Style durchaus vorgesehen so das die Kunden nach solchen Effekten fragen.
unter Xbase++ "sollte" als Presentation Parameter
Code: Alles auswählen
{{XBP_PP_BGCLR,XBPSYSCLR_TRANSPARENT}}
oder nach :create()
:setcolorBG(XBPSYSCLR_TRANSPARENT)
hierbei handelt es sich um "Listen" mit "Inhalt" der sich "verschieben" kann wie bei einer Listbox oder Browse.
verwendet man das XBPSYSCLR_TRANSPARENT bekommt man meistens "schwarz" oder "weiss", aber nicht den "durch Schein" Effekt.
auch bei activeX, wo es z.T. eine Methode / Property dafür gibt, funktioniert es mit Xbase++ nicht. ( Gegenprobe harbour steht noch aus ...)
Code: Alles auswählen
// wird "schwarz"
oListView:BackColor := XBPSYSCLR_TRANSPARENT
// dito
oListView:BackColor := AutomationTranslateColor(XBPSYSCLR_TRANSPARENT,.F.)
// dito
oListView:BackColor := AutomationTranslateColor(XBPSYSCLR_TRANSPARENT,.T.)
// dito
oListView:BackColor := 0
// Gegenprobe : alle GRA_CLR > 0 funktionieren
oListView:BackColor := GRA_CLR_DARKCYAN
// ebenfalls GraMakeRGBColor(
oListView:BackColor := GraMakeRGBColor({255,242,229})
weil es auch einen (VB) Source dazu gab hab ich mir das mal genauer angesehen und auf die frage "ownerdraw" gekommen.
Ich meine nun nicht, wie in der Demo, das ich alles per "ownerdraw" machen will sondern die "Override" Methoden sagen mir ja das es solche Methoden gibt.
***
Code: Alles auswählen
#define LVM_FIRST 0x1000
#define LVM_SETBKCOLOR (LVM_FIRST+1)
#define LVM_SETTEXTCOLOR (LVM_FIRST+36)
#define LVM_SETTEXTBKCOLOR (LVM_FIRST+38)
hList := oListView:getHWND()
// Text Farbe funktioniert
SendMessageA(hList,LVM_SETTEXTCOLOR,0,AutomationTranslateColor(GRA_CLR_DARKPINK,.F.))
// Hintergrund des Text funktioniert
SendMessageA(hList,LVM_SETTEXTBKCOLOR,0,AutomationTranslateColor(GRA_CLR_RED ,.F.))
// Hintergrund des Text "transparent" -> "schwarz"
SendMessageA(hList,LVM_SETTEXTBKCOLOR,0,AutomationTranslateColor(XBPSYSCLR_TRANSPARENT,.F.))
// dito.
SendMessageA(hList,LVM_SETTEXTBKCOLOR,0,AutomationTranslateColor(XBPSYSCLR_TRANSPARENT,.T.))
// dito
SendMessageA(hList,LVM_SETTEXTBKCOLOR,0,XBPSYSCLR_TRANSPARENT)
// Gegenkontrolle alles "so" ok
SendMessageA(hList,LVM_SETTEXTCOLOR , 0, GRA_CLR_GREEN )
SendMessageA(hList,LVM_SETTEXTBKCOLOR , 0, GRA_CLR_YELLOW )
SendMessageA(hList,LVM_SETBKCOLOR , 0, GRA_CLR_CYAN )
und dann fand CLR_NONE, also neue Hoffnung
Code: Alles auswählen
#define CLR_NONE 0xFFFFFFFF
// so nach VB
SendMessageA(hList,LVM_SETTEXTBKCOLOR , 0, CLR_NONE )
// nix
SendMessageA(hList,LVM_SETTEXTBKCOLOR , 0, AutomationTranslateColor(CLR_NONE,.F.))
// nix
SendMessageA(hList,LVM_SETTEXTBKCOLOR , 0, AutomationTranslateColor(CLR_NONE,.T.))
// dito Backgound
SendMessageA(hList,LVM_SETBKCOLOR,0,CLR_NONE )
// nix
SendMessageA(hList,LVM_SETBKCOLOR,0,AutomationTranslateColor(CLR_NONE,.F.))
// nix
SendMessageA(hList,LVM_SETBKCOLOR,0,AutomationTranslateColor(CLR_NONE,.T.))
also nächste Idee :
wenn ich SendMessageA() verwenden um einen Event ala PostAppEvent() zu veröffentlichen dann ist das ja "manuell".
Die Methode die auf LVM_SETBKCOLOR "reagiert" wird gewöhlich vom OS() System "angesprochen".
Mit dem SubClass.OBJ von Günter Beyes müsste ich doch "abhören" können wenn der LVM_SETBKCOLOR Event "gesendet" wird um ein "paint" einzuleiten ?
reicht nun der "abgefangene" Event aus um meine eigene Methode anzusprechen ?
wie "entferne" ich den Event aus der Windows Queue damit er nicht "weitergeleitet" wird ?
... oder muss ich den (genauen) "Namen" der Methode wissen um sie zu "überschreiben" ?