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 Unit für Appbar (https://www.delphipraxis.net/25060-unit-fuer-appbar.html)

OrallY 30. Jun 2004 15:45


Unit für Appbar
 
Hab mir grad den Artikel zu AppBars in der CodeLib durchgelesen und einfach mal ausprobieren wollen. Nur kennt er die ganze Strukturen etc. nicht. Welche Unit ist noch einzubinden?

sakura 30. Jun 2004 15:46

Re: Unit für Appbar
 
Es sollte wohl die Unit ShellApi sein ;)

...:cat:...

P.S.: Inc(PostCount) :lol:

OrallY 30. Jun 2004 15:50

Re: Unit für Appbar
 
Das freut mich aber, dass sich zufälligerweise so schnell jemand gefunden hat, der mir antwortet :wink:.
Thx.

-=IOI=- 5. Apr 2005 19:11

Re: Unit für Appbar
 
Hätte da auch ein kleines Problem bezüglich der AppBar.
Und zwar besteht mein Programm aus 4 Forms, von denen jede eine AppBar sein soll. Bei der Hauptform funktioniert das auch ganz gut, nur bei den anderen 3 bekomm ich eine Access Violation Fehlermeldung, obwohl ich alles genau gleich, wie bei der Hauptform gemacht haben (die 3 weiteren Forms werden über den Show-Befehl angezeigt).

Gruß Flo

Christian Seehase 5. Apr 2005 19:25

Re: Unit für Appbar
 
Moin Flo,

ohne Sourcen ist das wohl kaum zu beantworten.

Dir ist schon klar, dass man maximal vier AppBars gleichzeitig haben kann, von die Startleiste schon mal eine ist.

-=IOI=- 5. Apr 2005 19:33

Re: Unit für Appbar
 
Das OnCreate der Hauptform beginnt so:

Delphi-Quellcode:
ClientWidth := 120;
  ClientHeight := Screen.Height - 28;
  Left := Screen.Width - ClientWidth;
  Top := 0;

  aAppBarData.cbSize := SizeOf(TAppBarData);
  aAppBarData.hWnd := Self.Handle;
  aAppBarData.uCallbackMessage := WM_APPBARMSG;
  aAppBarData.uEdge := ABE_RIGHT;
  {Alternative Werte: ABE_BOTTOM, ABE_LEFT, ABE_RIGHT, ABE_TOP}

  aAppBarData.rc.Left := Form1.Left;
  aAppBarData.rc.Right := Screen.Width;
  aAppBarData.rc.Top := Form1.Top;
  aAppBarData.rc.Bottom := Form1.ClientHeight;
  iResult := SHAppBarMessage(ABM_NEW, aAppBarData);

  if iResult = 0 then
  begin
    ShowMessage('Die AppBar konnte nicht erzeugt werden. Unter Umständen existiert bereits eine AppBar an dieser Position.');
    Exit;
  end;

  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);

  MPEGaudio := TMPEGaudio.Create;

  Randomize;
  z := 1;
  schirm := 0;
  Maximieren1.Enabled := false;
  Minimieren1.Enabled := true;

  F2 := TForm2.Create(self);
  F2.Show;
  F3 := TForm3.Create(self);
  F3.Show;
  F4 := TForm4.Create(self);
  F4.Show;
und das OnShow der anderen Forms beginnt so: (natürlich für jede Form angepasst)

Delphi-Quellcode:
ClientWidth := 120;
  ClientHeight := Screen.Height - 28;
  Left := 0;
  Top := 0;

  aAppBarData.cbSize := SizeOf(TAppBarData);
  aAppBarData.hWnd := Self.Handle;
  aAppBarData.uCallbackMessage := WM_APPBARMSG;
  aAppBarData.uEdge := ABE_LEFT;
  {Alternative Werte: ABE_BOTTOM, ABE_LEFT, ABE_RIGHT, ABE_TOP}

  aAppBarData.rc.Left := Form2.Left;
  aAppBarData.rc.Right := Form2.ClientWidth;
  aAppBarData.rc.Top := Form2.Top;
  aAppBarData.rc.Bottom := Form2.ClientHeight;
  iResult := SHAppBarMessage(ABM_NEW, aAppBarData);

  if iResult = 0 then
  begin
    ShowMessage('Die AppBar konnte nicht erzeugt werden. Unter Umständen existiert bereits eine AppBar an dieser Position.');
    Exit;
  end;

  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);
Hoffe, dass hilft weiter

Christian Seehase 5. Apr 2005 19:42

Re: Unit für Appbar
 
Moin Flo,

und an welcher Stelle tritt eine AV auf?

-=IOI=- 5. Apr 2005 19:52

Re: Unit für Appbar
 
Direkt beim Start, aber nur, wenn ich versuche in einem der 3 anderen Forms eine AppBar draus zu machen.
Weiß nicht, ob sich die AppBar vielleicht mit dem OnShow nicht versteht, wobei es ja eigentlich gehen müsste (OnCreate hab ich nämlich auch schon probiert - ging auch nicht).

Christian Seehase 5. Apr 2005 20:12

Re: Unit für Appbar
 
Moin Flo,

geh' doch mal bitte im Einzelschritt da durch, und gib dann mal die Zeile an der die AV auftritt.

-=IOI=- 7. Apr 2005 19:47

Re: Unit für Appbar
 
Hallo Christian,

habe das Problem gefunden und es auf andere Art umgangen. Und zwar hab ich in den weiteren Forms die Position und Größe mit Form2.Width := ...; eingestellt. Dies führte zu dem Fehler. Mit Width := ...; funktioniert es problemlos.

Aufgrund eines anderen Fehlers und der Tatsache, dass zusätzlich zur Taskleiste keine weitere AppBar möglich ist, hab ich nun ein neues Programm erstellet, dass ebenfalls 4 Forms enthält, die alle eine AppBar Komponenete haben, die alle AppBars problemlos erstellt, die ich brauch. (Was ein Satz :roll: )

Dieses Programm rufe ich nun beim Programmstart auf und so werden die AppBars erzeugt und mein prog legt sich drüber. Nur weiß ich leider nicht, wie ich dieses Programm beim Beenden meines Hauptprogramms mitbeenden kann.

Hast du da vielleicht eine Idee? (Oder auch ein anderer?)

Gruß Flo


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:00 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