AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Library: Windows API / MS.NET Framework API Delphi Verschieben von Borderlosen Formen FullDrag
Thema durchsuchen
Ansicht
Themen-Optionen

Verschieben von Borderlosen Formen FullDrag

Ein Thema von EWeiss · begonnen am 4. Okt 2006
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

Verschieben von Borderlosen Formen FullDrag

  Alt 4. Okt 2006, 10:41
Möchte auch einen kleinen Beitrag hier leisten.

Wer kennt das nicht!

Utopische Frage!
Ich weise meiner Form beim laden einen Skin zu damit das ganze etwas ansehnlicher ist
habe ich die Borderstyle ausgeschaltet.

Damit ich meine Form verschieben kann benutze ich im MouseDown Events meiner
CaptionBar(Image) die Function ReleaseCapture.
Was mir dabei nicht gefällt, es kommt immer ein häßlicher Rahmen wenn ich die Form verschieben will.

Kurz gesagt!
Ich möchte meine Form verschieben als ganzes ohne das dieser Rahmen angezeigt wird.

Die Lösung!
Ich habe aus meinen Player 'VB' eine Funktion nach Delphi übersetzt.
Was dieses Problem behebt.

Delphi-Quellcode:
procedure TfrmMain.CaptionBarMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  // Springe in die Function SetFullWindowDrag
  // Weise dieser das Handle meiner Anwendung zu = frmMain.Handle
  // Und teile ihr mit das ich nun meine Form verschiebe.
  SetFullWindowDrag(frmMain.Handle, True);

  // Springe in die Function SetFullWindowDrag
  // Weise dieser das Handle meiner Anwendung zu = frmMain.Handle
  // Und teile ihr mit das ich mit dem verschieben fertig bin und das Event CaptionBarMouseDown verlasse.
  SetFullWindowDrag(frmMain.Handle, False);
end;

Delphi-Quellcode:
Function TfrmMain.SetFullWindowDrag(hwnd: DWORD; ShowFullWindow: Boolean): Boolean;

// Aktiviert oder deaktiviert die Anzeige von Fensterinhalten während des
// Ziehens oder der Größenänderung von Anwendungsfenstern.
// Der Rückgabewert gibt Aufschluss darüber, ob der Aufruf zu einer Änderung
// gegenüber der vorherigen Einstellung geführt hat (True) oder nicht (False).
Var
  lOldSetting: integer;
  lSuccess : boolean;
Begin
  // Bisherige Einstellung ermitteln:

  lSuccess := SystemParametersInfo(SPI_GETDRAGFULLWINDOWS, 0, @lOldSetting, 0);
  If lSuccess = False Then
    // Der abfragende Aufruf war nicht erfolgreich
    // (z.B. Windows 95 ohne "PLUS!"-Pack).
    Exit; // Rückgabewert bleibt False

  // Eine Aktion ist nur dann notwendig, wenn sich der bisherige
  // vom gewünschten Wert unterscheidet:
  If Bool(lOldSetting) <> ShowFullWindow Then
  Begin
     // Wert ändern und Erfolg prüfen:
    lSuccess := SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, Abs(DWORD(ShowFullWindow)), 0, SPIF_UPDATEINIFILE
                                      Or SPIF_SENDWININICHANGE);
    If bool(lSuccess) = True Then
    Begin
      Result := True;
      ReleaseCapture;
      SendMessage(hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0);
    End;
  End
End;
Viel Spass beim Testen.

EDIT: Die Funktion SetFullWindowDrag muss zweimal in dem gleichen MouseDown ereignis ausgeführt werden.
Das hat damit zu tun weil in SetFullWindowDrag ReleaseCapture ausgeführt wird.
Diese kann erst dann wieder verlassen werden wenn MouseDown ereignis abgeschlossen ist.

Gruß

[edit=CalganX]Code-Style. Mfg, CalganX[/edit]
  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 18:00 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