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 :mrgreen:

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

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. :allright:

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 !? :lol:

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? :lol:
Ich glaube Du meinst Mirinda :mrgreen:

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
:roll:

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..