Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#3

AW: SPI_SETDRAGFULLWINDOWS, aber nur für eigene Anwendung

  Alt 14. Sep 2016, 15:50
Klar geht das

Delphi-Quellcode:
function TMagnetic.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).

begin
  // Bisherige Einstellung ermitteln:

  result := SystemParametersInfo(SPI_GETDRAGFULLWINDOWS, 0, @lOldSetting, 0);
  if result = false then
    // Result := False;
    // 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
    // Wert ändern und Erfolg prüfen:
    result := SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, Abs(DWORD(ShowFullWindow)), nil,
      SPIF_UPDATEINIFILE or SPIF_SENDWININICHANGE);

end;
mach mein TMagnetic wech dann sollte das funktionieren.

Zitat:
In WM_NCLBUTTONDOWN und Co. könnte man dann die Nachricht nicht an DefWindowProc() weiterleiten um somit den Windows-eigenen Drag-Drop-Prozess zu verhindern. Ob das auch die Option abfängt, über die Tastatur ein Fenster zu verschieben, wäre zu testen.
Sorry das ist schlichtweg falsch.

Delphi-Quellcode:
{$REGION 'WM_ENTERSIZEMOVE'}
    WM_EXITSIZEMOVE:
      begin
        if FullDrag then
          SKAERO_MagneticWindow.SetFullWindowDrag(MainApp.Handle, False);
      end;
{$ENDREGION}
Delphi-Quellcode:
{$REGION 'WM_NCLBUTTONDOWN'}
    WM_NCLBUTTONDOWN:
      begin
        IsMoving := TRUE;
        if (wP = HTCAPTION) and FullDrag then
          SKAERO_MagneticWindow.SetFullWindowDrag(MainApp.Handle, True);
      end;
{$ENDREGION}
Zitat:
weil das ein unzuverlässiger Hack ist
Das hat nichts mit einem Hack zu tun.. ich verwende das schon seit Jahren und hatte keine Probleme.
Man muss es nur richtig machen.

Aber ja nebenbei du kannst es deaktivieren aber mit meiner Anwendung würde es wieder aktiviert.
Also eine Dauerhafte Möglichkeit das Auszuschalten wirst du nicht finden.

gruss

Geändert von EWeiss (14. Sep 2016 um 15:59 Uhr)
  Mit Zitat antworten Zitat