AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Fenster mit Titel verschieben, nur bei best. Komponenten
Thema durchsuchen
Ansicht
Themen-Optionen

Fenster mit Titel verschieben, nur bei best. Komponenten

Ein Thema von DevilsCamp · begonnen am 19. Aug 2005 · letzter Beitrag vom 19. Aug 2005
Antwort Antwort
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
DevilsCamp
(Gast)

n/a Beiträge
 
#2

Re: Fenster mit Titel verschieben, nur bei best. Komponenten

  Alt 19. Aug 2005, 14:59
ich habe noch eine weitere Methode gefunden mit der ich das Verschieben des Forms für jede Komponente Aktivieren kann, die ein OnMouseDown-Ereignis besitzt.

Delphi-Quellcode:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
const
  SC_DRAGMOVE = $F012;
begin
  if Button = mbleft then
  begin
    ReleaseCapture;
    Form1.Perform(WM_SYSCOMMAND, SC_DRAGMOVE, 0);
  end;
end;
Allerdings schaffe ich es nicht, dies in meine Komponente einzubauen, dass dies dann automatisch verwendet wird.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz