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
 
#3

Re: AppBar on Demand

  Alt 20. Jun 2004, 15:19
Hi,
hm... Ist nicht so ganz das Wahre.

Hab es aber gerade durch Zufall hinbekommen.
Im OnMouseEnter-Event (bzw. einem CM_MOUSEENTER-Messagehandler) muss für die Anzeige folgendes stehen:
Delphi-Quellcode:
  // Mouse enters form

  {bValue ist eine globale Boolean-Variable}
  if bVisible then Exit
  else bVisible := true;

  SHAppBarMessage(ABM_REMOVE, aAppBarData);

  self.Height := self.Tag;
  aAppBarData.rc.Bottom := self.ClientHeight;

  {Result ist ein lokaler Integer}
  result := SHAppBarMessage(ABM_NEW, aAppBarData);

  if Result = 0 then
  begin
    ShowMessage('AppBar konnte nicht registriert werden');
    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;
Und für das Verstecken muss das OnDeactivate-Ereignis von Application verwendet werden:
Delphi-Quellcode:
  // Application loses focus

  SHAppBarMessage(ABM_REMOVE, aAppBarData);

  aAppBarData.rc.Bottom := 5;

  {Result ist ein lokaler Integer}
  result := SHAppBarMessage(ABM_NEW, aAppBarData);

  if Result = 0 then
  begin
    ShowMessage('AppBar konnte nicht registriert werden');
    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);

  {bVisible ist ein globaler Boolean}
  bVisible := false;
Bei mir funktioniert's jetzt, auch wenn es noch ein bisschen Buggy ist.

Chris
  Mit Zitat antworten Zitat