AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Wm_windowposchanging

Ein Thema von ConnorMcLeod · begonnen am 29. Mär 2013 · letzter Beitrag vom 29. Mär 2013
Antwort Antwort
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#1

Wm_windowposchanging

  Alt 29. Mär 2013, 15:01
Hallo Kollegen,

wie die meisten von Euch wissen, kann man auf die Änderung der Fensterdimensionen (Move und Resize) so reagieren:

procedure WMWindowPosChanging(var AMessage: TWMWindowPosChanging); message WM_WINDOWPOSCHANGING; .

Die Message überbringt einen Pointer auf eine Struktur, in der die neuen Dimensionen stehen.

Delphi-Quellcode:
AMessage.WindowPos^

... zeigt auf ...

  tagWINDOWPOS = packed record
    hwnd: HWND;
    hwndInsertAfter: HWND;
    x: Integer;
    y: Integer;
    cx: Integer;
    cy: Integer;
    flags: UINT;
  end;
.
Ich habe mir gezwungenermassen den Spaß gemacht und nachgesehen, welche Werte in der Struktur stehen und staunte nicht schlecht: in ca. 5% der Fälle steht beim Resize in x, y fälschlicherweise Null (in Zahlen: 0).

Kennt vllt jmd die Antwort, warum das so ist?

Wie immer danke für alle Ideen!
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

AW: Wm_windowposchanging

  Alt 29. Mär 2013, 15:07
was heißt denn hier fälschlicherweise ??
Das kommt doch auf die Flags drauf an, ob da überhaupt sinnvolle Werte drin stehen. In diesem Sinne: Schau mal nach ob das Flag
Code:
SWP_NOMOVE = 0x0002
gesetzt ist.
Falls nur die z-order verändert wird, kann da ja durchaus 0 drinstehen.
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Wm_windowposchanging

  Alt 29. Mär 2013, 15:30
Fälschlicherweise heißt fälschlicherweise.
Indem man das Testfenster mit der Maus am Rand nimmt und so die Größe ändert, ergibt sich ein Resize, wenn ich mich nicht irre.
Beim Mitloggen der Messages sehe ich ab und zu die Nullen. Im Testfenster passiert nichts anderes als das Reagieren auf den ThemenTitel und auf WM_ENTERSIZEMOVE, WM_EXITSIZEMOVE, WM_SIZING, WM_MOVING. Deswegen glaube ich, daß ich mir nicht selbst in die Quere komme.

Trotzdem danke, ich checke es nochmal. Könnte ja sein, daß Win7 im Hintergrund mal eine Z-Order refresht oder so.
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Wm_windowposchanging

  Alt 29. Mär 2013, 15:58
ok, das Phänomen ist vorerst im Griff. Die Lösung sieht so aus:
Delphi-Quellcode:
var
  lwpWindowPos: TWindowPos; // originale Dimensionen
  li : integer; // SZ
begin
  lwpWindowPos := AMessage.WindowPos^;

  li := (SWP_NOMOVE and lwpWindowPos.flags);
  if (0 <> li) then
  begin
    inherited;
    exit;
  end;
Jetzt wüßte ich noch gerne, wie die störende Message während des Resize ausgelöst wird. Aber naja, muss nicht.
@jfheins: Danke nochmal für den Hinweis.
@all: Schöne F'eiertage!
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 19:10 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