Window transparent und nicht in Taskleiste?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Kai
Beiträge: 264
Registriert: 29.09.2005 20:58
Computerausstattung: iMac 2019
Wohnort: Hannover
Kontaktdaten:

Window transparent und nicht in Taskleiste?

Beitrag von Kai »

Das folgende Beispiel geht soweit ja super, nur ist das Fenster dann wieder inner Taskleiste zu sehen, sobald man nen Butten ect betätigt,
gibts nicht auch ne andere Möglichkeit das das window sowohl transparent wie auch aus der Taskbar bleibt?

Will nur ein Programm haben, was ich später NUR über ein Systray Icon steuere.

Code: Alles auswählen

hwnd = OpenWindow(0,0,0,230,90,#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_Invisible,"Verschieb mich !")
  If hwnd
   If CreateGadgetList(WindowID())
    ButtonGadget  (1, 10, 10,200, 20, "Klick mich")
    CheckBoxGadget(2, 10, 40,200, 20, "Markiere mich")
   EndIf
 
  If CreateMenu(0, WindowID())
    MenuTitle("Menu")
    MenuItem(1, "Eintrag 1")
    MenuItem(2, "Eintrag 2")
    MenuItem(3, "Eintrag 3")
  EndIf
 
  ; es wirkt leider nur: Fenster immer oben (#HWND_TOPMOST)
  SetWindowPos_(WindowID(0), #HWND_TOPMOST, 0, 0, 0, 0,#SWP_NOMOVE | #SWP_NOSIZE)
  SetWindowLong_(WindowID(0),#GWL_EXSTYLE,#WS_EX_TOOLWINDOW) ; Fenster nich in der Taskbar anzeigen
 
  HideWindow(0, 0) ; Jetzt erst Fenster zeichnen lassen
  
  SetWindowOpacity(hwnd,100) ;Transparent
  
  WinX = WindowX() ; X Position retten
  WinY = WindowY() ; y Position retten
   
  Repeat
    EventID = WaitWindowEvent()
   
    Select EventID
     
      Case #WM_MOVE ; Wenn Fensterbewegung ....
        MoveWindow(WinX,WinY) ; .....Fenster auf alte Position zurück setzen
     
      Case #PB_Event_Gadget
        Select EventGadgetID()
          Case 1 : Debug "Schalter 1 angeklickt!"
          Case 2 : Debug "Schalter 2 angeklickt!"
          Case 3 : Debug "Schalter 3 angeklickt!"
        EndSelect
       
      Case #PB_Event_Menu
        Select EventMenuID()
          Case 1 : Debug "Menü-Eintrag 1 angeklickt!"
          Case 2 : Debug "Menü-Eintrag 2 angeklickt!"
          Case 3 : Debug "Menü-Eintrag 3 angeklickt!"
        EndSelect
    EndSelect
   
  Until EventID = #PB_Event_CloseWindow
EndIf 
Forgotten Tomb
Beiträge: 21
Registriert: 23.09.2004 15:05
Wohnort: Im Norden
Kontaktdaten:

Beitrag von Forgotten Tomb »

Guten morgen,

keine ahnung ob du damit etwas anfangen kannst, aber so geht es eigentlich!

Code: Alles auswählen

; German forum: http://robsite.de/php/pureboard/viewtopic.php?t=1988&highlight=
; Author: Christian Stransky (CS2001) 
; Date: 15. August 2003 

Procedure HideWindowFromShowingInTaskbar(WindowID, NewWindowHandle, show) 
  If show=1 
    HideWindow(WindowID,1) 
  EndIf 
  SetWindowLong_(WindowID(WindowID),#GWL_HWNDPARENT,NewWindowHandle) 
  If show=1 
    HideWindow(WindowID,0) 
  EndIf 
  ProcedureReturn 
EndProcedure 

OpenWindow(1, 0, 0, 0, 0, #PB_Window_ScreenCentered, "Not Needed") 
HideWindow(1,1) 

OpenWindow(0,0,0,400,100,#PB_Window_ScreenCentered|#PB_Window_SystemMenu, "Not shown in the Taskbar") 
CreateGadgetList(WindowID()) 
  ButtonGadget(0, 0, 0, 200, 100, "Hide Window from showing in Taskbar") 
  ButtonGadget(1, 200, 0, 200, 100, "Show Window in Taskbar") 
  DisableGadget(1,1) 
  
Repeat 
  EventID=WaitWindowEvent() 
  Select EventID 
    Case #PB_Event_Gadget 
      Select EventGadgetID() 
        Case 0 
          HideWindowFromShowingInTaskbar(0, WindowID(1), 0) 
          DisableGadget(0,1) 
          DisableGadget(1,0) 
        Case 1 
          HideWindowFromShowingInTaskbar(0, 0, 1) 
          DisableGadget(0,0) 
          DisableGadget(1,1) 
      EndSelect 
  EndSelect 
Until EventID=#PB_Event_CloseWindow 

; ExecutableFormat=Windows
; FirstLine=1
; EnableXP
; EOF
Blabla, arbeit wieder aufgenommen
Benutzeravatar
Kai
Beiträge: 264
Registriert: 29.09.2005 20:58
Computerausstattung: iMac 2019
Wohnort: Hannover
Kontaktdaten:

Beitrag von Kai »

Cool, geht, thx...

Nur was genau wird da gemacht? Warum erstell ich 2 Fenster?
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> Warum erstell ich 2 Fenster?

Du erstellst ein Parentfenster und ein darin vorhandenes Childfenster.
Normalerweise würde nun nur das Parentfenster in der Taskbar erscheinen.
Und das wird verhindert, indem man es unsichtbar schaltet.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Kai
Beiträge: 264
Registriert: 29.09.2005 20:58
Computerausstattung: iMac 2019
Wohnort: Hannover
Kontaktdaten:

Beitrag von Kai »

Asoo, goiler Trick. :allright:
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Das hättest du auch mit der Suche gefunden.
http://forums.purebasic.com/german/viewtopic.php?t=4058
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag von Scarabol »

Nur mal sonne Frage: Gabs HideWindow() noch nicht?

Gruß
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Scarabol hat geschrieben:Gabs HideWindow() noch nicht?
meinst Du in 2005? Guck Dir mal den Source von Forgotten Tomb ein wenig
genauer an.

Grüße ... Kiffi
a²+b²=mc²
Antworten