Schöne Fensteranimation mit Transparenz
Ich habe 2 Programme mit über 5000 Zeilen -> Bin mir aber sicher einige von Euch würden wahrscheinlich nur 4000 oder noch weniger brauchen....Man merkt leider erst oft am Ende eines Programms, daß man einiges wirtschaftlicher hätte machen können...naja, da fehlt mir einfach die Routine...
Windows 11 - PB 6.03 x64
_________________________________
_________________________________
@AND51
>> 2225? Wenn du das schon "sehr groß" findest
>Das tut ja nichts zur Sache. War einer meiner ersten Codes, dafür find ich >2225 Zeilen viel.
Na wenn das einer deiner ersten Codes waren, dann ist ja jut
Meine erste Anwendung (MWXP-Speed), die ich mit PB 3.30 (Jahr 2004) programmiert habe, hatte schon 2101 Zeilen, naja 124 Zeilen weniger als deiner
>> 2225? Wenn du das schon "sehr groß" findest
>Das tut ja nichts zur Sache. War einer meiner ersten Codes, dafür find ich >2225 Zeilen viel.
Na wenn das einer deiner ersten Codes waren, dann ist ja jut
Meine erste Anwendung (MWXP-Speed), die ich mit PB 3.30 (Jahr 2004) programmiert habe, hatte schon 2101 Zeilen, naja 124 Zeilen weniger als deiner

- NicTheQuick
- Ein Admin
- Beiträge: 8812
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Es reicht sogar nur ein Delay:
Die 'Continue's bringen nichts, weil danach sowieso direkt 'Wend' kommt.
Dann ein 'Delay(1)' vor das 'Wend' und gut ist.
Code: Alles auswählen
Procedure TransparenzAnimation(WindowID)
Protected n, opacity=255
If OSVersion() < #PB_OS_Windows_2000
ProcedureReturn
EndIf
While IsWindow(WindowID)
If WindowMouseX(WindowID) <> -1 And WindowMouseY(WindowID) <> -1 And GetForegroundWindow_() = WindowID(WindowID)
If opacity < 255
opacity+16
If opacity > 255
opacity=255
EndIf
TransparentesFenster(WindowID, opacity)
EndIf
Else
If opacity > 118
opacity-16
If opacity < 1
opacity=1
EndIf
TransparentesFenster(WindowID, opacity)
EndIf
EndIf
Delay(1)
Wend
EndProcedure
Dann ein 'Delay(1)' vor das 'Wend' und gut ist.

> Die 'Continue's bringen nichts, weil danach sowieso direkt 'Wend' kommt.
Ja, da hatte ich nen Denkfehler. Ich dachte, wenn weder der If- noch der Else-Teil ausgeführt wird, dann würde das Continue ausgelassen und das Delay(500) ausgeführt, um die CPU nicht so stark auszulasten.
Werde das noch korrigieren.
> Netter Effekt, aber ist Miranda nicht ne Brause?
Ahoi !?
Ja, da hatte ich nen Denkfehler. Ich dachte, wenn weder der If- noch der Else-Teil ausgeführt wird, dann würde das Continue ausgelassen und das Delay(500) ausgeführt, um die CPU nicht so stark auszulasten.
Werde das noch korrigieren.
> Netter Effekt, aber ist Miranda nicht ne Brause?
Ahoi !?

PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
Perfekt wäre es, wenn ein Rechteck (4 Linien) sichtbar bleiben würde, wenn das Fenster komplett unsichtbar ist. Ich habe leider keine Ahnung, wie man so etwas machen könnte...Ich hab`s mal mit Desktopoutput probiert (Quelle: CodeArchiv: DesktopPainter)...naja...
Die Linien sollten natürlich anschließend wieder unsichtbar werden...
Hat jemand eine Idee?
lg
Marco
Code: Alles auswählen
Global Mem.l
Mem = AllocateMemory(1024)
Procedure.l DesktopOutput()
PokeL(Mem, 1)
ProcedureReturn Mem
EndProcedure
Macro TransparentesFenster(Window, Sichtbarkeit=255)
SetWindowLong_(WindowID(Window), #GWL_EXSTYLE, GetWindowLong_(WindowID(Window),#GWL_EXSTYLE)|#WS_EX_LAYERED)
SetLayeredWindowAttributes_(WindowID(Window), 0, Sichtbarkeit, #LWA_ALPHA)
EndMacro
Procedure TransparenzAnimation(WindowID)
Protected n, opacity=255
If OSVersion() < #PB_OS_Windows_2000
ProcedureReturn
EndIf
While IsWindow(WindowID)
If WindowMouseX(WindowID) <> -1 And WindowMouseY(WindowID) <> -1 And GetForegroundWindow_() = WindowID(WindowID)
If opacity < 255
opacity+16
If opacity > 255
opacity=255
EndIf
TransparentesFenster(WindowID, opacity)
EndIf
Else
If opacity > 10
opacity-16
If opacity < 1
opacity=1
If StartDrawing(desktopoutput())
Line(WindowX(windowid), WindowY(WindowID), WindowWidth(windowid), 0, RGB(0,0,0))
Line(WindowX(windowid), WindowY(WindowID), 0, WindowHeight(windowid), RGB(0,0,0))
Line(WindowX(windowid)+WindowWidth(windowid), WindowY(WindowID), 0, WindowHeight(windowid), RGB(0,0,0))
Line(WindowX(windowid), WindowY(WindowID)+WindowHeight(windowid), WindowWidth(windowid), 0, RGB(0,0,0))
StopDrawing()
EndIf
EndIf
TransparentesFenster(WindowID, opacity)
EndIf
EndIf
Delay(1)
Wend
EndProcedure
OpenWindow(0, 60, 60, 640, 480, "AND51 - Bitte Maus in und aus dem Fenster schieben!")
CreateThread(@TransparenzAnimation(), 0)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Hat jemand eine Idee?
lg
Marco
Windows 11 - PB 6.03 x64
_________________________________
_________________________________
Ich glaube Du meinst MirindaFalo hat geschrieben:Netter Effekt, aber ist Miranda nicht ne Brause?



ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.