Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Problem mit SHAppBarMessage (https://www.delphipraxis.net/6648-problem-mit-shappbarmessage.html)

CalganX 17. Jul 2003 15:57


Problem mit SHAppBarMessage
 
Hi,
mit folgendem Source erstelle ich mir eine AppBar:
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
var
  aBuf: _AppBarData;
begin
  MSG_CBACK := RegisterWindowMessage('MSG_CBACK');

  aBuf.cbSize := sizeOf(_AppBarData);
  aBuf.hWnd := self.Handle;
  aBuf.uCallbackMessage := MSG_CBACK;
  aBuf.uEdge := ABE_TOP;

  SHAppBarMessage(ABM_NEW, aBuf);
end;
Mit
Delphi-Quellcode:
ShowMessage( SysErrorMessage(GetLastError) );
fange ich folgenden Fehler ab:

Zitat:

---------------------------
Project1
---------------------------
Klasse ist nicht vorhanden
---------------------------
OK
---------------------------
Hat da jemand eine Idee?

Chris

Christian Seehase 17. Jul 2003 16:21

Re: Problem mit SHAppBarMessage
 
Moin Chris,

prüf' doch erst mal, ob SHAppbarMessage überhaupt einen Fehler verursacht hat (liefert dann false zurück).
Wenn nicht sagt GetLastError nichts brauchbares aus.

CalganX 17. Jul 2003 16:28

Re: Problem mit SHAppBarMessage
 
Würde ich ja gerne, aber es ist kein Boolean, sondern ein Cardinal. Im PSDK steht:
Zitat:

Zitat von Das PSDK
Return Value
Returns a message-dependent value. For more information, see the Microsoft Platform Software Development Kit (SDK) documentation for the appbar message sent.

:mrgreen: ;)

Chris

Christian Seehase 17. Jul 2003 16:36

Re: Problem mit SHAppBarMessage
 
Moin Chris,

Typecast

Delphi-Quellcode:
if not Boolean(SHAppbarMessage(...)) then
:mrgreen:
;-)

CalganX 17. Jul 2003 16:40

Re: Problem mit SHAppBarMessage
 
*nein* ;)

Naja. Also, lt. dieser Abfrage liegt es nicht an SHAppBarMessage... :|
Allerdings tut sich wie gesagt nichts. Das Formular "liegt" ganz normal da rum.

Ich geh jetzt mal davon aus, dass ich nichts machen muss (also z.B. Align = alTop oder so).

Chris

Motzi 17. Jul 2003 16:52

Re: Problem mit SHAppBarMessage
 
Ganz so einfach ist es nicht.. ;)

du musst noch die Position mit ABM_SETPOS festlegen! Hier die Procedure die ich bei meinem X-Spy verwende:

Delphi-Quellcode:
procedure FillAppBarData(var aData: TAppBarData);
begin
  with aData do
  begin
    cbSize := SizeOf(TAppBarData);
    hWnd := MainForm.Handle;
    uCallbackMessage := WM_APPBAR;
    uEdge := ABE_TOP;
  end;
end;

procedure AddAppBar;
var
  aData: TAppBarData;
begin
  FillAppBarData(aData);
  SHAppBarMessage(ABM_NEW, aData);

  SystemParametersInfo(SPI_GETWORKAREA, 0, @aData.rc, 0);
  aData.rc.Bottom := aData.rc.Top + MainForm.Height;
  SHAppBarMessage(ABM_QUERYPOS, aData);
  SHAppBarMessage(ABM_SETPOS, aData);
  MainForm.aAppBarRect := aData.rc;
  MainForm.MoveToAppBarRect;
end;

Christian Seehase 17. Jul 2003 17:14

Re: Problem mit SHAppBarMessage
 
Moin Zusammen,

ausserdem sollte man am Schluss ABM_REMOVE nicht vergessen, damit der Bereich wieder freigegeben wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz