Einzelnen Beitrag anzeigen

DevilsCamp
(Gast)

n/a Beiträge
 
#1

Fenster mit Titel verschieben, nur bei best. Komponenten

  Alt 19. Aug 2005, 13:29
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?
  Mit Zitat antworten Zitat