| |
|
|
CB | Hi,
Fenster kommt und geht wieder - zügig, allmählich oder gemächlich, je nach Bedarf. Experimentieren mit Sleep! KompilierenMarkierenSeparierenGrowingWindow
Autor: Christian Bernfeld
DEF GetSysColor(1) ! "USER32","GetSysColor"
Declare G%,Neutral&,Text1$,Text2$
Neutral& = GetSysColor(15)
WindowStyle 538
WindowTitle "Hoppla - da geht jan Fenster auf ..."
Declare x%,y%,PosX%,PosY%,Xeff%,Yeff%,LX%,LY%
x% = 800
y% = 600
PosX% = (%maxx/2)-(x%/2)
PosY% = (%maxy/2)-(y%/2)
Window 0,0 - 0,0
Cls Neutral&
UseFont "MS Sans Serif",15,0,1,0,0
SetDialogFont 1
Text1$ = @Create("Text",%Hwnd,"Nur eine kleine optische Spielerei",40,40,300,13)
Text1$ = @Create("Text",%Hwnd,"Taste oder Maus zum Beenden...",520,500,240,13)
WhileLoop 1,100
Sleep 5
INC G%
Xeff% = x%*G%/100
Yeff% = y%*G%/100
LX% = (%maxx/2)-(Xeff%/2)
LY% = (%maxy/2)-(Yeff%/2)
setwindowpos %Hwnd = LX%,LY% - Xeff%,Yeff%;0
EndWhile
WaitInput
WhileNot G% = 1
Sleep 1
DEC G%
Xeff% = x%*G%/100
Yeff% = y%*G%/100
LX% = (%maxx/2)-(Xeff%/2)
LY% = (%maxy/2)-(Yeff%/2)
setwindowpos %Hwnd = LX%,LY% - Xeff%,Yeff%;0
EndWhile
End
Gruß, Christian |
|
|
| |
|
|
|
CB | Hi,
ich habe da noch eine Variante: Das Window taucht aus dem Nichts auf und verschwindet genauso elegant wieder. Basierend auf einer Vorlage von Sven Schmidts. KompilierenMarkierenSeparierenGrowingDisappearingWindow
Autor: Christian Bernfeld
DEF GetSysColor(1) ! "USER32","GetSysColor"
Declare G%,Neutral&,Text1$,Text2$
Neutral& = GetSysColor(15)
Die folgende Prozedur "SetTransparent" wurde von Sven Schmidts veröffentlicht,
ich habe sie nur für meine Zwecke etwas modifiziert
PROFAN²-NT-TEAM-Vorlage
Autor: Sven Schmidts, concept/design
Titel: Transparent Window @ Win2k
Beschreibung: Sorgt für diesen "netten" Effekt; Transparente Fenster unter Windows (>=) 2000
Copyright © 2000-2001 Sven Schmidts, schmidts@cdesign.de
def %LWA_ALPHA $2
def %GWL_EXSTYLE -20
def %WS_EX_LAYERED $80000
def %WS_EX_TRANSPARENT $20
def SetWindowLong(3) !"USER32","SetWindowLongA"
def GetWindowLong(2) !"USER32","GetWindowLongA"
def SetLayeredWindowAttributes(4) !"USER32","SetLayeredWindowAttributes"
Proc SetTransparent
Declare Old&
Parameters Hwnd%, Perc%
Old& = GetWindowLong(Hwnd%,%GWL_EXSTYLE)
SetWindowLong(Hwnd%, %GWL_EXSTYLE, @Or(Old&,%WS_EX_LAYERED));
SetLayeredWindowAttributes(Hwnd%, 0, (255 * Perc%) / 100, %LWA_ALPHA);
EndProc
WindowStyle 538
WindowTitle "Hoppla - da geht jan Fenster auf ..."
Declare x%,y%,PosX%,PosY%,Xeff%,Yeff%,LX%,LY%
x% = 800
y% = 600
PosX% = (%maxx/2)-(x%/2)
PosY% = (%maxy/2)-(y%/2)
Window 0,0 - 0,0 zuerst "neben" den Bildschirm
Cls Neutral&
UseFont "MS Sans Serif",15,0,1,0,0
SetDialogFont 1
Text1$ = @Create("Text",%Hwnd,"Noch so eine kleine optische Spielerei",40,40,300,13)
Text1$ = @Create("Text",%Hwnd,"Taste oder Maus zum Beenden...",520,500,240,13)
***** Variante 1: Abnehmende Transparenz ******
SetTransparent %Hwnd, 0
setwindowpos %Hwnd = PosX%,PosY% - x%,y%;0
WhileLoop 1,100
Sleep 1
SetTransparent %Hwnd, G%
INC G%
EndWhile
***** Oder Variante 2 - beide Methoden kombiniert *****
Voraussetzung für Kombination beider Methoden:
Relativ leistungsstarker PC (v.a. Grafikkarte), sonst ruckelts zu stark
WhileLoop 1,100
Sleep 1
SetTransparent %Hwnd, G%
INC G%
Xeff% = x%*G%/100
Yeff% = y%*G%/100
LX% = (%maxx/2)-(Xeff%/2)
LY% = (%maxy/2)-(Yeff%/2)
setwindowpos %Hwnd = LX%,LY% - Xeff%,Yeff%;0
EndWhile
WaitInput
WhileNot G% = 1
Sleep 1
SetTransparent %Hwnd, G%
DEC G%
Xeff% = x%*G%/100
Yeff% = y%*G%/100
LX% = (%maxx/2)-(Xeff%/2)
LY% = (%maxy/2)-(Yeff%/2)
setwindowpos %Hwnd = LX%,LY% - Xeff%,Yeff%;0 auch hier können beide Methoden kombiniert werden
EndWhile
End
Viel Spaß beim Experimentieren Christian |
|
|
| |
|
|
|
| Noch ne Variante: KompilierenMarkierenSeparieren {$cleq}
def SetWindowLong(3) !"USER32","SetWindowLongA" :
def GetWindowLong(2) !"USER32","GetWindowLongA"
def SetLayeredWindowAttributes(4) !"USER32","SetLayeredWindowAttributes"
declare i&
buildmainwin
for i&:=0 to 255 step 3 do alpha %hwnd,i&
print "Click" : waitinput
for i&:=255 downto 0 step 3 do alpha %hwnd,i&
end
Proc preparehdl4alpha
Parameters hdl&
SetWindowLong(hdl&, -20, @Or(GetWindowLong(hdl&,-20),$80000));
EndProc
Proc alpha
Parameters hdl&,aval%
SetLayeredWindowAttributes(hdl&, 0, aval%, $2);
EndProc
proc buildmainwin
windowstyle 80 : window 0,0 - 0,0 : preparehdl4alpha %hwnd : alpha %hwnd,0
setwindowpos %hwnd = 0,0 - %maxx,%maxy
cls 0 : showcursor 0
endproc
Salve, iF |
|
|
| |
|
|
|
CB | Hi, iF! Seufz - da sieht man halt den Profi am Werk!
Na warte - mein Auto hat auch schon gemeint: Wenn ich einmal groß bin, werde ich ein Ferrari! :+D)--
Gruß, Christian |
|
|
| |
|
|
|
| Also das hat doch nun wirklich nix mit Profi hin oder her zu tun - das ist doch wirklich nurn normaler quelly.
Salve, iF |
|
|
| |
|
|
|
CB | War ja auch nurn :+D)--
Aber mir gefällt das irrsinnig gut, wie einfach manche Dinge mit Deinem genialen XPSE (und XProfan 9) zu verwirklichen sind. Deshalb -->
Apropos XPSE: Bei meinem derzeitigen Projekt steigt XPSE aus. Im Log kommt er nur bis Loading, mehr passiert nicht. Alle anderen Progs, die ich damit getestet habe, funktionieren aber. Da ich aber immer noch etliche kleinere Fehler in meinem Code auszubügeln habe, hat es für mich momentan nicht viel Sinn, den auch noch mit dem XPSE zu testen. Ich verspreche Dir aber, wenn das Prog fertig ist (das werden dann so schätzomativ 15000 Zeilen werden) und Profan2cpp auch keine Fehler mehr meldet, Deinen XPSE da ran zu lassen - Du wolltest ja, daß mal ein richtig großer Code getestet wird.
Gruß, Christian |
|
|
| |
|
|
|
| Ich würde mich wirklich freuen zu wissen warum xpse aussteigt. Vielleicht einfach mal Passagen kicken um festzustellen woran es liegt.
Grade zum Entwickeln größerer Projekte - und um Flüchtigkeitsfehler zu verringern - ist xpse geeignet - denn solch Fehler findet xpse.
Salve, iF |
|
|
| |
|
|
|
CB | Hi, iF!
Bitte noch um etwas Geduld, auch wenns Dich schon sehr unter den Fingernägeln brennt - glaub mir, ich verstehe das. Mein angepeilter Fertigstellungstermin ist Ende Februar, spätestens Mitte März. Ich arbeite dzt. wie ein Pferd daran: seit mehr als 2 Monaten 12 - 14 Stunden und max. 6 Stunden Schlaf - täglich! (außer am Wochenende, da dreh ichs dann um). Auch meine (Viel-)Schreiberei im Forum kostet mich viel Zeit. (mach ich aber gerne und aus Überzeugung) Nur: meinen Code runterzustrippen sehe ich mich derzeit leider wirklich außerstande. Abgesehen davon, wärs auch kaum realisierbar. Da hängen soviele Funktionen voneinander ab, daß dann gar nix mehr funktionieren würde. Ich bin froh, wenn der Code mal nicht nur zu 98% funktioniert. Quasi-M$-Standard Laß mir noch ein bißchen Zeit! Vielleicht löst sich das Problem mit dem XPSE dann von selbst. Ansonsten werde ich das nach Fertigstellung ausgiebig testen und wenn ich selbst nicht weiterkomme, schicke ich Dir den Code mitsamt dem ganzen Klimbim, der notwendig ist, damit Du dieselbe Testumgebung einrichten kannst - hoch und heilig versprochen! (Das sind einige MB) Vielleicht gewinne ich den Sonderpreis für das umfangreichste Wettbewerbsprogramm Nein, keine Sorge, da hätte ich eine andere Idee, bloß - woher die Zeit nehmen?
Gruß, Christian |
|
|
| |
|
|