[Windows]Bottom-Most Fenster

7H3 N4C3R

Lt. Commander
Registriert
Feb. 2002
Beiträge
1.816
Moin moin,


ich würd gern ähnlich wie ein Top-Most-Fenster ein Bottom-Most-Fenster erstellen - z.B. um Statusinformationen permanent auf dem Desktop anzeigen zu lassen. Kennt jemand eine einfache Möglichkeit, wie das geht? Ich will nach Möglichkeit nicht alle Möglichen WindowMessages dafür überschreiben müssen.

Gruß
 
Meinst du so Programm wie WinBar oder Samurize ?
 
Also, eine kurze Recherche im ApiViewer 2003 und im API-Guide ergaben:

Code:
Const SWP_NOSIZE = &H1
Const SWP_NOMOVE = &H2
Const SWP_NOACTIVATE = &H10
Const SWP_SHOWWINDOW = &H40
Const HWND_BOTTOM As Long = 1

Private Declare Sub SetWindowPos Lib "User32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)

Private Sub Form_Load()
 With Timer1
  .Enabled = True
  .Interval = 1
 End With
 Timer1_Timer
End Sub

Private Sub Timer1_Timer()
 SetWindowPos Me.hWnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE
End Sub

Die Verwendung des Counters rührt von der Tatsache her, dass man das Fenster jederzeit vor ein anderes Fenster ziehen kann.
Der Timer verhindert das (zumindest sieht es so aus...). Vielleicht nicht die beste Lösung, aber eine andere kenn ich leider nicht...

Greets - SK
 
Wie wäre es mit einem Timer und dann ständigem Hochsetzen des z-Index?
Also in etwa sowas:
Code:
case WM_TIMER:
  SetWindowPoshWnd,HWND_BOTTOM,0,0,0,0,
    SWP_NOACTIVATE|SWP_SHOWWINDOW|SWP_NOMOVE|SWP_NOSIZE)
  break;

/edit:
Mal den Code von dem über mir geklaut und die richtige Funktion eingesetzt :o)
 
Zuletzt bearbeitet:
Keine Ahnung warum, aber ich war grad voll dabei, dass hier nur VB gefragt wird (man sollte halt nicht auf mehreren Foren gleichzeitig lesen und schreiben)!

Keine Ahnung, wie das in C geht, aber in VB klappt's so...keine Ahnung, was dein Code bewirkt...

Greets - SK
 
Die entsprechende Variante in Delphi soll undgefähr so sein:
(von http://swissdelphicenter.ch/de/ )
Code:
(* Mit dem folgendem Code liegt die Form des
Programms diereckt auf dem Desktop, also immer
Hintergrund, selbst wenn sie den Fokus bekommt *)


protected
  procedure CreateParams(var Params: TCreateParams); override;

//...

procedure TForm.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  if Assigned(Application.MainForm) then
  begin
    Params.WndParent := GetDesktopWindow;
    Params.Style := WS_CHILD;
  end;
end;
 
@pcwTJaR:

Cool, genau sowas hab ich gesucht :) Thx!

@all:
Die Variante mit dem Timer hatte ich mir schon überlegt, fand ich aber sehr unschön. Trotzdem danke
 
Zurück
Oben