ich würde gerne für Überblendung die Transparenz eines Fensterinhalts bzw. eines Static verändern. Habe Rogers Timer Beispiel abgeändert, aber es funktioniert nur mit dem kompletten Fenster. Wie kann ich nur den Fensterinhalt bzw. ein Static verändern ? Ich würde zur Überblendung von 2 Bitmaps zwei Statics erstellen, welche ich dann übereinanderblende (falls das überhaupt geht).
Ausserdem muss ich ein Delay einbauen, da ich sonst eine Fehlermeldung bei bekomme oDlg:gethwnd() : Receiver of message is not an object.
Grüße
Rudolf
Code: Alles auswählen
#INCLUDE "dcdialog.CH"
LOCAL GetList[0], GetOptions, oTimer, oDlg, aBitmaps
aBitmaps := Directory('test*.bmp')
DCGETOPTIONS ;
WINDOWWIDTH 1024 ;
WINDOWHEIGHT 800
oTimer := DC_SetTimerEvent():new(200,{||ChangeBackground(@oDlg,aBitmaps)})
DCREAD GUI TITLE 'Rotating Bitmap Backgrounds' PARENT @oDlg OPTIONS GetOptions
oTimer:destroy()
RETURN nil
* -----------
PROC appsys ; RETURN
* -----------
STATIC FUNCTION ChangeBackground( oDlg, aBitmaps )
******************************************************************
STATIC snPointer := 0,lFirst ,oDA
LOCAL oBitmap
local nHandle,nTransparency,i
if empty(lFirst)
sleep(10)
lFirst := .f.
endif
nHandle := oDlg:getHwnd()
snPointer++
IF oDlg == nil .OR. oDlg:status() = 0 .OR. Len(aBitmaps) = 0
RETURN nil
ENDIF
IF snPointer > Len(aBitmaps)
snPointer := 1
ENDIF
oBitmap := DC_GetBitmap(aBitmaps[snPointer,1])
DC_SetWindowTransparency(nHandle,0)
FOR i := 0 TO 100 STEP 3
Sleep(1)
nTransparency := i// weniger transparenz
DC_SetWindowTransparency(nHandle,nTransparency)
NEXT
DC_SetWindowTransparency(nHandle,100)
oDlg:lockUpdate(.t.)
oDlg:drawingArea:bitmap := oBitmap
oDlg:configure()
oDlg:lockUpdate(.f.)
FOR i := 100 TO 1 STEP -3
Sleep(1)
nTransparency := i // weniger transparenz
DC_SetWindowTransparency(nHandle,nTransparency)
NEXT
DC_SetWin