Seite 2 von 3
Verfasst: 29.01.2008 23:16
von marco2007
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...
Verfasst: 29.01.2008 23:47
von RSBasic
@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

Verfasst: 30.01.2008 00:00
von rolaf
Netter Effekt, aber ist Miranda nicht ne Brause?

Verfasst: 30.01.2008 00:08
von NicTheQuick
Es reicht sogar nur ein Delay:
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
Die 'Continue's bringen nichts, weil danach sowieso direkt 'Wend' kommt.
Dann ein 'Delay(1)' vor das 'Wend' und gut ist.

Verfasst: 30.01.2008 01:25
von AND51
> 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 !?

Verfasst: 30.01.2008 22:48
von marco2007
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...
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
Die Linien sollten natürlich anschließend wieder unsichtbar werden...
Hat jemand eine Idee?
lg
Marco
Verfasst: 03.06.2008 20:54
von TomTom
cool!
kann man den effect auch auf fremde fenster übergeben?
wenn ja, wie kann ich dort einbauen, dass jedes fenster durchsichtig wird?
MFG tomtom
Verfasst: 03.06.2008 21:04
von ZeHa
Falo hat geschrieben:Netter Effekt, aber ist Miranda nicht ne Brause?

Ich glaube Du meinst Mirinda

Verfasst: 15.06.2008 19:08
von Andesdaf
Irgendwie sieht das Rechteck etwas zu klein aus (vielleicht liegt es auch an Windows Aero) und sind nur sehr kurz sichtbar. Vielleicht die Delays vergrößern oder so... aber damit habe ich leider keine Ahnung

Verfasst: 16.06.2008 10:50
von dige
Ja, es ist zu klein, da ja nur das Klientfenster ermittelt wird, aber nicht der Fensterrahmen inkl. Titelbar.
Die API GetWindowRect_() ermittelt die kompletten Koordinaten..