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...