Ich habe folgendes Problem:
Ich möchte gerne mein Fenster mit Titel durch Mausklick im Client-Bereich verschieben können.
Dazu habe ich mich
Luckies Code aus der Code-Library bedient:
Allerdings habe ich nun das Problem, dass evtl. der Client-Bereich durch ein Panel (oder andere Komponenten) verdeckt ist, wodurch diese Methode nicht mehr dazu geeignet ist um das Fenster zu verschieben.
Daher möchte ich mir gerne eine Komponente schreiben, die mir die Möglichkeit gibt Komponenten anzugeben, bei denen das funktioniert.
Mein Versuch, ein Array mit den Namen der Komponenten zu erstellen und diese dann mit Hilfe von SetWindowLong auf WS_EX_TRANSPARENT zu stellen schlug leider fehl:
Delphi-Quellcode:
procedure TMoveEveryWhere.MoveExceptOn(KompArray: array of const);
var
i : Integer;
inde : Integer;
begin
for i := 0 to High(FKompArray) do
begin
inde := setWindowLong(((Owner.FindComponent(FKompArray[i].Name)) as TWinControl).Handle, GWL_EXSTYLE,
getWindowLong(((Owner.FindComponent(FKompArray[i].Name)) as TWinControl).Handle, GWL_EXSTYLE) and not WS_EX_TRANSPARENT);
end; // for i := 0 to High(FKompArray)
FKompArray := nil;
for i := 0 to High(KompArray) do
with KompArray[i] do
begin
case VType of
vtString, vtAnsiString:
begin
inde := Length(FKompArray);
SetLength(FKompArray, inde+1);
if VType=vtAnsiString then
FKompArray[inde].Name := string(VAnsiString)
else
FKompArray[inde].Name := VString^;
inde := ((Owner.FindComponent(FKompArray[inde].Name)) as TWinControl).Handle;
inde := setWindowLong(inde, GWL_EXSTYLE,
getWindowLong(inde, GWL_EXSTYLE) or WS_EX_TRANSPARENT);
jj := GetLastError;
inde := 0;
end;
end; // case VType
end; // with KompArray[i]
end;
inde gibt nach Ausführen von setWindowLong 0 zurück (entspricht Fehler). GetLastError liefert mir den Wert 1411 (= "Klasse ist nicht vorhanden").
Hat jemand eine Idee, wie ich dieses Problem lösen kann?