Thema: Delphi TNA - Problem

Einzelnen Beitrag anzeigen

Dbof

Registriert seit: 20. Mär 2008
61 Beiträge
 
#1

TNA - Problem

  Alt 26. Jun 2008, 21:48
Hallo und sorry für den häßlichen Titel, aber ich kann das Problem selbst nicht beschreiben...
ich habe folgendes Programm, in dem ich mit Button1 die TNA in mein Form ziehe und dabei auch die Taskleiste verstecke. Mit Button2 mache ich beides rückgängig.

Delphi-Quellcode:
Procedure TForm1.Button1Click(Sender: TObject);
Begin
   TNAHandle := GetHandle;
   TBHandle := FindWindow('Shell_TrayWnd', Nil);
   OriginTB := Windows.GetParent(TBHandle);
   OriginParent := Windows.GetParent(TNAHandle);
   Windows.SetParent(TNAHandle, Self.Handle);
   HideTaskBar(true);
End;

Procedure TForm1.Button2Click(Sender: TObject);
Begin
   Windows.SetParent(TNAHandle, OriginParent);
   HideTaskBar(false);
End;

Function TForm1.GetHandle: HWND;
Begin
   Result := FindWindow('Shell_TrayWnd', Nil);
   Result := FindWindowEx(Result, 0, 'TrayNotifyWnd', Nil);
   Result := FindWindowEx(Result, 0, 'Syspager', Nil);
   Result := FindWindowEx(Result, 0, 'ToolbarWindow32', 'Infobereich');
End;

procedure TForm1.HideTaskBar(State : Boolean);
Begin
  If State = true then
      ShowWindow(TBHandle, SW_Hide)
  Else If State = false then
      ShowWindow(TBHandle, SW_Show);
  end;
end.
Nun das Problem: Ich klicke 2-mal den Button1. Die Taskleiste bleibt versteckt, die TNA wird im Form angezeigt. Bei Klick auf Button2 wird die Taskleiste wieder angezeigt, doch die TNA bleibt in meiner Form...und bewegt sich von dort auch nicht fort, bis ich explorer.exe beende und neustarte.

Ist das Problem, dass ich SetParent nicht 2-mal aufrufen kann? Kann man das Problem leichter lösen als eine Art Afrage zu machen, ob die TNA enthalten ist oder nicht?


Danke im Voraus!



P.S. Bin völliger Anfänger, habe den Funktionschnipsel GetHandle im Forum gefunden. Die Bezeichnungen Button1 usw. werden im HauptProgramm nicht enthalten sein, sondern stark verändert...
  Mit Zitat antworten Zitat