Message über Startleiste, wie bei ICQ

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Beitrag von Shardik »

AnimateWindow_() wird auch von WinNT 4 nicht unterstützt. Wahrscheinlich sind gnozal und ich die einzigen, die noch WinNT einsetzen (und meine 2200+ Anwender) :wink:
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

win2000pro hat doch auch den NT-Kernel, oder?

zwar ein paar features mehr in bezug auf games und co (aktuelle DX etc.),
aber die Basis ist doch NT....

mein Windows-Verzeichnis heißt sogar WinNT....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Beitrag von Shardik »

MSDN hat geschrieben: AnimateWindow Function
:
:
Minimum operating systems Windows 98, Windows 2000
http://msdn2.microsoft.com/en-us/library/ms632669.aspx
Benutzeravatar
kaitec
Beiträge: 120
Registriert: 07.11.2005 00:50
Wohnort: Langenselbold
Kontaktdaten:

Beitrag von kaitec »

Dieser Code müsste ab PB 3.94 funktionieren! Ist ein einfacher Code der Erweiterbar ist!

Code: Alles auswählen

Procedure SetWinTransparency(win,level)
 If level>=0 And level<101
  hLib = LoadLibrary_("user32.dll")
  If hLib
   adr = GetProcAddress_(hLib,"SetLayeredWindowAttributes")
   If adr
    SetWindowLong_(WindowID(win),#GWL_EXSTYLE,GetWindowLong_(WindowID(win),#GWL_EXSTYLE)|$00080000) ; #WS_EX_LAYERED = $00080000
    CallFunctionFast(adr,WindowID(win),0,255*level/100,2)
   EndIf
   FreeLibrary_(hLib)
  EndIf
 EndIf
EndProcedure

  Procedure StatusWindow(fenstername.s, text.s, width.l, BACKCOLOR.l)

If ExamineDesktops()
  dh = DesktopHeight(0)
  dw =  DesktopWidth(0)

  dh =dh - 150
  dw =dw - width
  tw = width - 10
  
  If OpenWindow(1, dw, dh, width, 100,#PB_Window_BorderLess | #PB_Window_Invisible,fenstername.s)
   hBrush.l = CreateSolidBrush_(BACKCOLOR)
   SetClassLong_(WindowID(), #GCL_HBRBACKGROUND, hBrush.l)
   InvalidateRect_(WindowID(), #Null, #True)
   
    If CreateGadgetList(WindowID())
          If LoadFont(0,"Arial",16)
           SetGadgetFont(#PB_Default,FontID())   ; geladenen Arial 16 Zeichensatz als neuen Standard festlegen
          EndIf
      TextGadget(2, 5, 10, tw, 25, text.s, #PB_Text_Center)

      SetWinTransparency(1,0)

      Delay(20)
      HideWindow(1,0) 

      For x=0 To 80
       SetWinTransparency(1,x)
       Delay(5)
     Next
     time = 0

     Repeat
      Event = WindowEvent()

      time = time + 1
      Delay(1)
     Until time > 1500

     x=100
     SetWinTransparency(1,x)
     Delay(200)
     Repeat
      SetWinTransparency(1,x)
      x=x-1
      Delay(10)
     Until x =< 0

     HideWindow(1,1)
     Delay(100)
    EndIf
  EndIf
EndIf
EndProcedure 
Der Befehl lautet dafür zum Beispiel:

Code: Alles auswählen

StatusWindow("Fenster Titel", "Hallo =)", 300, RGB(20,0,100))
Benutzeravatar
coMstructor
Beiträge: 130
Registriert: 04.07.2006 20:10
Kontaktdaten:

Beitrag von coMstructor »

AND51 hat geschrieben:Hallo!

Wollte schon früher posten, aber ging nicht. Ich hoffe, meine Lösung findet auch Verwendung. Ich verwende nur einen API-Aufruf: SystemParametersInfo_() (Abwärtskompatible bis Win95).

Code: Alles auswählen

EnableExplicit

OpenWindow(0, 0, 0, 300, 250, "AND51", #PB_Window_BorderLess|#PB_Window_Invisible)
CreateGadgetList(WindowID(0))
	ButtonGadget(0, 50, 50, 200, 50, "Close", #PB_Button_Default)

; get the right location for the window. therefore, we get the WORKAREA-coords
Define winpos.RECT

SystemParametersInfo_(#SPI_GETWORKAREA, 0, @winpos, 0)
ExamineDesktops()

With winpos
	\Right-WindowWidth(0)
	\Bottom-WindowHeight(0)
	
	ResizeWindow(0, \Right, \Bottom, #PB_Ignore, #PB_Ignore)
EndWith

; Show the window
; AnimateWindow_(WindowID(0), 1500, #AW_VER_NEGATIVE) ; Roll up
AnimateWindow_(WindowID(0), 1500, #AW_VER_NEGATIVE|#AW_SLIDE) ; Slide up

; Wait for closing the window
Repeat : Until WaitWindowEvent() = #PB_Event_Gadget And EventGadget() = 0


; Hide the window
; AnimateWindow_(WindowID(0), 1500, #AW_VER_POSITIVE|#AW_HIDE) ; Roll down
AnimateWindow_(WindowID(0), 1500, #AW_VER_POSITIVE|#AW_SLIDE|#AW_HIDE) ; Slide down
Das ist doch gemeint, oder?
kurze frage, wie mach ich es dass es von oben nach unten geschossen wird, also genau umgekehrt ??
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Das ist ganz einfach:
Siehst du die Angabe "negative" und "positive" in den Konstanten? Damit kannst du die Richtung steuern.
Und immer schon unterscheiden zwischen ROLLEN und SLIDEN.
Rollen ist wie einen Teppich ausrollen. Sliden bedeutet schieben. In diesem Punkt unterscheiden sich die Effekte und anhand dieses Satzes merke ich mir das immer.

Hier, bitte sehr! Ich habe nur die Öffnungs-Effekte geändert, die Schließ-Effekte sind noch gleich:

Code: Alles auswählen

EnableExplicit 

OpenWindow(0, 0, 0, 300, 250, "AND51", #PB_Window_BorderLess|#PB_Window_Invisible) 
CreateGadgetList(WindowID(0)) 
   ButtonGadget(0, 50, 50, 200, 50, "Close", #PB_Button_Default) 

; get the right location for the window. therefore, we get the WORKAREA-coords 
Define winpos.RECT 

SystemParametersInfo_(#SPI_GETWORKAREA, 0, @winpos, 0) 
ExamineDesktops() 

With winpos 
   \Right-WindowWidth(0) 
   \Bottom-WindowHeight(0) 
    
   ResizeWindow(0, \Right, \Bottom, #PB_Ignore, #PB_Ignore) 
EndWith 

; Show the window 
; AnimateWindow_(WindowID(0), 1500, #AW_VER_POSITIVE) ; Roll up 
AnimateWindow_(WindowID(0), 1500, #AW_VER_POSITIVE|#AW_SLIDE) ; Slide up 

; Wait for closing the window 
Repeat : Until WaitWindowEvent() = #PB_Event_Gadget And EventGadget() = 0 


; Hide the window 
; AnimateWindow_(WindowID(0), 1500, #AW_VER_POSITIVE|#AW_HIDE) ; Roll down 
AnimateWindow_(WindowID(0), 1500, #AW_VER_POSITIVE|#AW_SLIDE|#AW_HIDE) ; Slide down
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
coMstructor
Beiträge: 130
Registriert: 04.07.2006 20:10
Kontaktdaten:

Beitrag von coMstructor »

cool danke ;) hab nur noch ein kleines problem:

Code: Alles auswählen

EnableExplicit

ExamineDesktops()

OpenWindow(0, 0, 0, DesktopWidth(0), DesktopHeight(0), "AND51", #PB_Window_BorderLess|#PB_Window_Invisible)
CreateGadgetList(WindowID(0))
   ButtonGadget(0, 50, 50, 200, 50, "Close", #PB_Button_Default)

; get the right location for the window. therefore, we get the WORKAREA-coords
Define winpos.RECT

SystemParametersInfo_(#SPI_GETWORKAREA, 0, @winpos, 0)


With winpos
   \Right-WindowWidth(0)
   \Bottom-WindowHeight(0)
   
   ResizeWindow(0, \Right, \Bottom, #PB_Ignore, #PB_Ignore)
EndWith

; Show the window
 ;AnimateWindow_(WindowID(0), 1500, #AW_VER_POSITIVE) ; Roll up
AnimateWindow_(WindowID(0), 500, #AW_VER_POSITIVE|#AW_SLIDE) ; Slide up

; Wait for closing the window
Repeat : Until WaitWindowEvent() = #PB_Event_Gadget And EventGadget() = 0


; Hide the window
; AnimateWindow_(WindowID(0), 1500, #AW_VER_POSITIVE|#AW_HIDE) ; Roll down
AnimateWindow_(WindowID(0), 500, #AW_VER_NEGATIVE|#AW_SLIDE|#AW_HIDE) ; Slide down
ich will das es von oben bis zur mitt geht und nicht bis ganz nach unten , was muss ich da ändern?

:allright:
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Leider verstehe ich nicht ganz, was du meinst.
Meinst du von ganz oben rechts bis mitte rechts? Dass das Fenster von einer Position zur anderen "wandert"?
Wäre hilfreich, wenn du es genauer beschreiben oder gar eine Skizze liefern könntest!

Ansonsten gebe ich dir als Tipp: ResizeWindow(), damit kannst du manuell die Fensterposition verändern.
In Kombination mit einer For-Schleife kannst du damit ebenfalls hübsche Effeke erstellen!

Wenn du imemrnoch nicht weiterkommst, kein Problem, ich/wir helfen dir. :allright:
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
coMstructor
Beiträge: 130
Registriert: 04.07.2006 20:10
Kontaktdaten:

Beitrag von coMstructor »

im moment wenn du meinen code kompilierst kommt das window von oben bis ganz nach unten richtig? ich will aber dass das window von ooben bis zur mitte des bildschirmes geht und dann halt wieder hoch. die breite sollte schon so bleiben
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Ahso, also wenn das hier dein Desktop ist, dann soll das Fenster dort sein, wo die X sind, richtig?

Code: Alles auswählen

+----------+
|XXXXXXXXXX|
|XXXXXXXXXX|
|          |
|          |
+----------+
Also das Fenster soll auch genauso breit sein, wie der Desktop?
Ich versuche, mal was zu basteln...


// Edit:
Ouuuuuhhh... Ich denk mir immer, wieso geht das ver***** Fenster an der falschen Stelle auf, dabei hast du da unnötigen Code reingeepackt, den ich vergaß rauszunehmen... :bluescreen: (ich)
Zuletzt geändert von AND51 am 14.11.2007 21:16, insgesamt 1-mal geändert.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Antworten