Thema: Delphi Desktop verschieben!?

Einzelnen Beitrag anzeigen

Flodding

Registriert seit: 26. Dez 2007
Ort: Kiel
121 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Desktop verschieben!?

  Alt 23. Apr 2009, 20:03
okay hab soweit alles gefunden um eine appbar zu erstellen, funktioniert auch... nur dann wenn meine geldbar aus ist habe ich die geldbar gestartet und starte dann meine appbar dazu um sie darunter zu platzieren, passiert das auch, jedoch verschwinden wieder die icons dahinter... also im prinzip kein effekt...

hier mal n stück code :

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  iResult: integer;
begin
regist := TRegistry.Create;
  try
    regist.RootKey:=HKEY_LOCAL_MACHINE;
    regist.Access:= KEY_READ;
    regist.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MyGeldBar', true);
    geldbarapppath:= regist.Readstring('DisplayIcon');
  finally
    regist.free;
  end;
if geldbarapppath <> 'then
begin
ShellExecute(0,'open', PAnsiChar(geldbarapppath),Nil, PAnsiChar(geldbarapppath), SW_SHOW);
form1.Height:=close.Height;
SetWindowLong(Application.Handle, GWL_EXSTYLE, GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
close.Left:=screen.Width - 77;
end;
Sleep(10000);
  SHAppBarMessage(ABM_REMOVE, fAppBarData);
  // Größe der ganzen Struktur
  fAppBarData.cbSize := SizeOf(TAppBarData);
  // Handle des Formulares, das als AppBar dienen soll
  fAppBarData.hWnd := Self.Handle;
  // Callback-Message
  fAppBarData.uCallbackMessage := WM_APPBARMSG;
  // Wo soll die AppBar sein?
  fAppBarData.uEdge := ABE_TOP;
  {Alternative Werte: ABE_BOTTOM, ABE_LEFT, ABE_RIGHT}

  // Rect für den reservierten Platz, wo keine Anwendung "hin darf"
  fAppBarData.rc.Left := 0;
  fAppBarData.rc.Right := 0;
  fAppBarData.rc.Top := 0;
  fAppBarData.rc.Bottom := self.ClientHeight;

  // AppBar erstellen
  iResult := SHAppBarMessage(ABM_NEW, fAppBarData);

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

  // Formular genauso breit machen, wie Bildschirm
  self.Width := screen.Width;

  // Position abfragen und nochmal setzen
  SHAppBarMessage(ABM_QUERYPOS, fAppBarData);
  SHAppBarMessage(ABM_SETPOS, fAppBarData);
  // Nachrichtenschleife abarbeiten
  Application.ProcessMessages;
  // Bringt das Fenster an die gewünschte Position. Dazu werden die vorher festgelegten Werte verwendet.
  MoveWindow(fAppBarData.hWnd, fAppBarData.rc.Left, fAppBarData.Rc.Top, GetSystemMetrics(SM_CXSCREEN), fAppBarData.rc.Bottom, true);
end;
was genau passiert wenn ich mein programm starte:

zuerst startet es nur die geldbar, damit die über meiner appbar ist... danach wartet es 10 sekunden... könnte auch n bissel weniger sein, aber der login bei der geldbar dauert n paar sekunden deshalb hab ichs erstmal so geregelt... danach sollte ja eigentlich meine appbar den platz unter der geldbar einnehmen und sich da platzieren... macht sie auch... nur über die icons vom desktop...
schließe ich nun die geldbar, so bleibt am oberen rand der unsichtbare bereich für meine appbar, aber meine appbar ist immernoch da wo sie war als die gelbar noch an war... schließe ich meine appbar, so verschwindet auch der reservierte ereich für meine appbar obnen wieder und alles ist wie vorher...

irgendwie komisch zu verstehen, aber ich konnts nicht besser erklären ... sorry
Flo
  Mit Zitat antworten Zitat