Seite 1 von 1

StickyWindow Rand -> Wie maximieren andere WinApps korrek

Verfasst: 24.09.2007 18:00
von rfdistl
Ich bin bei den letzten Optimierungen eines für meine Firma geschriebenen kleinen BDE Systems.

Optimal wäre es jetzt, wenn ich ein einzeiliges rahmenloses mit Icons gefülltes Window am oberen Rand des Desktops platzieren könnte. (= eigene TaskLeiste oder Control Center oder ...)

Mit StickyWindow bleibt es zwar im Vordergrund, aber bei Maximierung anderer Applikationen ist deren Fenster nun natürlich oben beschnitten, da unter meines "gelegt".

Wie teile ich Windows mit, dass dieser Bereich nun nicht mehr zur Verfügung steht und andere Fenster bis unterhalb meines Fensters maximieren. (analog Taskleiste)

Habe leider im Forum auf Stichwortsuche nichts gefunden. Weiss jemand Rat oder hat einen Link auf die vielleicht doch schon gefundene Lösung?

Danke im voraus
Robert

Verfasst: 24.09.2007 19:07
von roherter
Dieser Code ist von Freak link zum Beitrag findest du unter dem Code

Code: Alles auswählen

Callback to update all non-child maximized windows
Procedure.l UpdateWindowsProc(hWnd.l, *desktop.RECT)
  If IsZoomed_(hWnd)
    MoveWindow_(hWnd, *desktop\left, *desktop\top, *desktop\right-*desktop\left, *desktop\bottom-*desktop\top, #TRUE)
  EndIf
  ProcedureReturn #TRUE
EndProcedure


; Get actual desktop size (without Taskbar)
SystemParametersInfo_(#SPI_GETWORKAREA, 0, @desktop.RECT, 0)

If OpenWindow(0, desktop\left, desktop\top, 0, 0, #PB_Window_SystemMenu, "")

  ; resize Window to not overlap the Taskbar, and to 50 pixel width
  SetWindowPos_(WindowID(),#HWND_TOPMOST,0,0,50,desktop\bottom-desktop\top,#SWP_NOMOVE)
 
  ; now calculate the new desktop rectangle
  desktopnew.RECT
  desktopnew\left = desktop\left + WindowWidth() + GetSystemMetrics_(#SM_CXFIXEDFRAME)*2
  desktopnew\right = desktop\right
  desktopnew\top = desktop\top
  desktopnew\bottom = desktop\bottom
 
  ; set new desktop rectangle
  SystemParametersInfo_(#SPI_SETWORKAREA, 0, @desktopnew, #SPIF_SENDWININICHANGE)
 
  ; update all windows (because most do not react to the #WM_SETTINGCHANGE message
  EnumWindows_(@UpdateWindowsProc(), @desktopnew)

  ; here comes all the rest of your prog (in my case, only wait)
  Repeat
  Until WaitWindowEvent() = #PB_EventCloseWindow
 
  ; reset desktop to old size
  SystemParametersInfo_(#SPI_SETWORKAREA, 0, @desktop, #SPIF_SENDWININICHANGE) 
  ; update windows again
  EnumWindows_(@UpdateWindowsProc(), @desktop)

EndIf
End
http://www.purebasic.fr/english/viewtop ... ght=appbar

Problem gelöst!

Verfasst: 24.09.2007 21:38
von rfdistl
Vielen Dank für die schnelle Hilfe.

Der Code funktioniert wie benötigt.

Gruß
Robert