Thema: Delphi AppBar on Demand

Einzelnen Beitrag anzeigen

CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#1

AppBar on Demand

  Alt 20. Jun 2004, 13:52
Hi,
ich versuche gerade ein kleines AppBar-Tool so umzuschreiben, dass er nur erscheint, wenn man über den 5 Pixel sichtbaren Streifen (Teil vom Formular) fährt. Sozusagen "automatisch im Hintergrund".

Ich fange das Event CM_MOUSEENTER ab und das funktioniert soweit, allerdings bekomme ich es nicht hin, dass die AbbBar das gleiche verhalten zeigt, wie die DesktopBands, also dass das gesamte Formular erscheint, während man drauf ist und wieder verschwindet, wenn man das Formular verlässt.
Kurz gesagt passiert bei mir nichts, was darauf schließen lassen würde, dass mein Formular sich "öffnet".

Nach mehreren unsinnigen Versuchen steht in meinem selbst gefrickelten OnMouseEnter-Event folgendes:
Delphi-Quellcode:
procedure TfrmMain.CMMouseEnter(var Message: TMessage);
var
  Result: integer;
begin
  // Mouse enters form

  SHAppBarMessage(ABM_REMOVE, aAppBarData);

  aAppBarData.cbSize := SizeOf(TAppBarData);
  aAppBarData.hWnd := Self.Handle;
  aAppBarData.uCallbackMessage := WM_APPBAR;
  aAppBarData.uEdge := ABE_TOP;

  aAppBarData.rc.Left := 0;
  aAppBarData.rc.Top := 0;
  aAppBarData.rc.Right := 0;
  aAppBarData.rc.Bottom := self.ClientHeight;

  result := SHAppBarMessage(ABM_NEW, aAppBarData);

  if Result = 0 then
  begin
    ShowMessage('Sorry, Windows is too stupid to show a simple AppBar!');
    exit;
  end;

  self.Width := screen.Width;

  SHAppBarMessage(ABM_QUERYPOS, aAppBarData);
  SHAppBarMessage(ABM_SETPOS, aAppBarData);
  Application.ProcessMessages;
  MoveWindow(aAppBarData.hWnd, aAppBarData.rc.Left, aAppBarData.Rc.Top, GetSystemMetrics(SM_CXSCREEN), aAppBarData.rc.Bottom, true);

  inherited;
end;
Funktioniert wie gesagt nicht. Keine Fehlermeldung oder so, es wird einfach nicht angezeigt.

Hat jemand eine Idee, wie sich das realisieren lässt?

Chris
  Mit Zitat antworten Zitat