Problem med SHAppBarMessage

Tags:    delphi

Daws...

Jeg faldt over dette stykke kode i nat:

<pre>
var
Form1: TForm1;
AppData: _AppBarData; //Appbars structure
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
// Application.handle; //apps handle
with AppData do //structure setup
begin
AppData.cbSize := 20;
Appdata.hWnd := Application.handle;
AppData.uEdge := ABE_Top;
AppData.rc.Left := 50;
AppData.rc.Top := 50;
AppData.rc.Right := 50;
AppData.rc.Bottom := 50;
end;

SHAppBarMessage(ABM_NEW, AppData); //Add to system list
SHAppBarMessage(ABM_ACTIVATE, AppData); //Activate ot
SHAppBarMessage(ABM_SETPOS, AppData); //Position it
MoveWindow(AppData.hWnd, AppData.rc.left, AppData.rc.top, AppData.rc.right - AppData.rc.left, AppData.rc.bottom - AppData.rc.top, TRUE); //Move the appbar into the specified rect

end;
</pre>

Det virker i og for sig fint, men har det problem at min form ikke kommer op det rigtige sted. hvordan kan man fiks det ?

- SpeC - #SpeC.DK @ Q-NET



3 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
Daws...

Jeg faldt over dette stykke kode i nat:

<pre>
var
Form1: TForm1;
AppData: _AppBarData; //Appbars structure
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
// Application.handle; //apps handle
with AppData do //structure setup
begin
AppData.cbSize := 20;
Appdata.hWnd := Application.handle;
AppData.uEdge := ABE_Top;
AppData.rc.Left := 50;
AppData.rc.Top := 50;
AppData.rc.Right := 50;
AppData.rc.Bottom := 50;
end;

SHAppBarMessage(ABM_NEW, AppData); //Add to system list
SHAppBarMessage(ABM_ACTIVATE, AppData); //Activate ot
SHAppBarMessage(ABM_SETPOS, AppData); //Position it
MoveWindow(AppData.hWnd, AppData.rc.left, AppData.rc.top, AppData.rc.right - AppData.rc.left, AppData.rc.bottom - AppData.rc.top, TRUE); //Move the appbar into the specified rect

end;
</pre>

Det virker i og for sig fint, men har det problem at min form ikke kommer op det rigtige sted. hvordan kan man fiks det ?

- SpeC - #SpeC.DK @ Q-NET

Jeg tror det er fordi du har angivet at din appbar skal ha' en bredde og højde på 0:
AppData.rc.Left := 50;
AppData.rc.Top := 50;
AppData.rc.Right := 50;
AppData.rc.Bottom := 50;

prøv evt. med :
AppData.rc.Left := 50;
AppData.rc.Top := 50;
AppData.rc.Right := AppData.rc.Left+Width;
AppData.rc.Bottom := AppData.rc.Top+Height;

/Michael.



Daws...

Jeg faldt over dette stykke kode i nat:

<pre>
var
Form1: TForm1;
AppData: _AppBarData; //Appbars structure
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
// Application.handle; //apps handle
with AppData do //structure setup
begin
AppData.cbSize := 20;
Appdata.hWnd := Application.handle;
AppData.uEdge := ABE_Top;
AppData.rc.Left := 50;
AppData.rc.Top := 50;
AppData.rc.Right := 50;
AppData.rc.Bottom := 50;
end;

SHAppBarMessage(ABM_NEW, AppData); //Add to system list
SHAppBarMessage(ABM_ACTIVATE, AppData); //Activate ot
SHAppBarMessage(ABM_SETPOS, AppData); //Position it
MoveWindow(AppData.hWnd, AppData.rc.left, AppData.rc.top, AppData.rc.right - AppData.rc.left, AppData.rc.bottom - AppData.rc.top, TRUE); //Move the appbar into the specified rect

end;
</pre>

Det virker i og for sig fint, men har det problem at min form ikke kommer op det rigtige sted. hvordan kan man fiks det ?

- SpeC - #SpeC.DK @ Q-NET
Jeg tror det er fordi du har angivet at din appbar skal ha' en bredde og højde på 0:
AppData.rc.Left := 50;
AppData.rc.Top := 50;
AppData.rc.Right := 50;
AppData.rc.Bottom := 50;

prøv evt. med :
AppData.rc.Left := 50;
AppData.rc.Top := 50;
AppData.rc.Right := AppData.rc.Left+Width;
AppData.rc.Bottom := AppData.rc.Top+Height;

/Michael.


Hmm Det viker ikke, da formen bare docker til toppen af "desktopen"


- SpeC - #SpeC.DK @ Q-NET



Hmm Det viker ikke, da formen bare docker til toppen af "desktopen"

- SpeC - #SpeC.DK @ Q-NET

Det er fordi at windows selv ændre dine koordinater når du sender en ABM_SETPOS. I følge deres dokumentation så vil din AppData.rc variabel blive ændret til den position som systemet har givet dig.

I din kode har du også sat den til at dock'e til toppen af skærmen hvilket jo egentlig også er det den gør :-|

Så alt skulle fungere korrekt.
Kig evt. på dette link for en nærmere beskrivelse af de forskellige beskeder du kan sende:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/messages/abm_new.asp

God fornøjelse
/Michael.

[Redigeret d. 02/01-04 17:27:40 af Michael Skovslund]



t