Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Fenster flickert beim resize von Linker und Top seite (https://www.delphipraxis.net/200991-fenster-flickert-beim-resize-von-linker-und-top-seite.html)

EWeiss 13. Jun 2019 19:02

Fenster flickert beim resize von Linker und Top seite
 
Hier sind viel Infos nur wirklich helfen tut da nix..
https://stackoverflow.com/questions/...specially-drag

Hat jemand ähnlich Probleme und wie kann man es beheben?
Sehr schlecht wenn die Controls auf dem Fenster hin und her springen.. (Nebenbei das gleiche Problem habe ich auch beim Explorer) Windows 10

gruss

EWeiss 13. Jun 2019 21:06

AW: Fenster flickert beim resize von Linker und Top seite
 
OK habe es erst mal Temporär gefixt ohne das Window auf Hide zu stellen.. Hmmm scheint hier wohl niemand zu wissen.

Die Lösung war, einfach die Flags in wc Class auf 0 setzen also "CS_HREDRAW or CS_VREDRAW" entfernen.
Das Problem ist das vorher neu gezeichnet wird bevor WM_SIZE das überhaupt mitbekommt.

Wenn ich mir den Windows Explorer so ansehe wie da die Statusleiste hoch und runter Hüpft nun gut muss wohl so sein.
Windows wird immer schlechter. :evil:

PS:
Ideal ist das immer noch nicht die rechte Seite zieht immer nach.
Die Controls hüpfen nicht mehr nur das Problem mit der Rechten Seite bekomme ich im Moment nicht in den griff, bin wohl nicht der einzige.
Betrifft aber nur die Konstellation wenn man das Window an der linken\Top Seite in der Größe verändert.

gruss

EWeiss 14. Jun 2019 21:28

AW: Fenster flickert beim resize von Linker und Top seite
 
Habe mal einen Versuch gemacht.

Delphi-Quellcode:
WM_NCCALCSIZE:
  begin
    if (wp = Ord(True)) then
    begin
      res := DefWindowProc(WinHandle, WM_NCCALCSIZE, wP, lP);

      ncps := PNCCalcSizeParams(lp);
      if (Assigned(ncps)) then
      begin
        GetWindowRect(WinHandle, ncps.rgrc[2]);
        ncps.rgrc[1] := ncps.rgrc[2];
        res := WVR_VALIDRECTS;
      end;
    end else
      res := DefWindowProc(WinHandle, WM_NCCALCSIZE, wP, lP);

    Result := res;
    exit;
  end;
Verstehe die Technik nicht ganz.
Was verhindert nun das die Rechte Seite nachzieht?
Alle Rects sind gleich sehe keinen unterschied.


Hmm.. glaube das kann man nicht verhindern das ist ein Windows Problem.

gruss

peterbelow 14. Jun 2019 23:20

AW: Fenster flickert beim resize von Linker und Top seite
 
Zitat:

Zitat von EWeiss (Beitrag 1434670)
Habe mal einen Versuch gemacht.

Verstehe die Technik nicht ganz.
Was verhindert nun das die Rechte Seite nachzieht?
Alle Rects sind gleich sehe keinen unterschied.


Hmm.. glaube das kann man nicht verhindern das ist ein Windows Problem.

gruss

Es ist definitv ein Windows-Problem, und die einzig brauchbare Lösung, die mir dafür bisher eingefallen ist, ist WM_NCHITTEST zu verarbeiten und einfach einen Drag nur für die linke oder untere Kante des Fensters zu erlauben, d.h. für HTRIGHT, HTTOP und die entsprechenden Ecken den Hittest einfach auf HTNOWHERE zu setzen.

EWeiss 14. Jun 2019 23:27

AW: Fenster flickert beim resize von Linker und Top seite
 
Zitat:

Zitat von peterbelow (Beitrag 1434677)
Zitat:

Zitat von EWeiss (Beitrag 1434670)
Habe mal einen Versuch gemacht.

Verstehe die Technik nicht ganz.
Was verhindert nun das die Rechte Seite nachzieht?
Alle Rects sind gleich sehe keinen unterschied.


Hmm.. glaube das kann man nicht verhindern das ist ein Windows Problem.

gruss

Es ist definitv ein Windows-Problem, und die einzig brauchbare Lösung, die mir dafür bisher eingefallen ist, ist WM_NCHITTEST zu verarbeiten und einfach einen Drag nur für die linke oder untere Kante des Fensters zu erlauben, d.h. für HTRIGHT, HTTOP und die entsprechenden Ecken den Hittest einfach auf HTNOWHERE zu setzen.

Denke das ist die beste Lösung habe mir auch schon etwas ähnliches überlegt wollte nur mit Result 0 rausspringen.. wäre ja das gleiche gewesen nur mit Korrekter Benennung ist das besser.
Aber deine Lösung scheint dafür geeigneter zu sein.

Danke..

So geht's..
Delphi-Quellcode:
          BORDER := GetSystemMetrics(32);
          if ((P.X >= xF - BORDER) and ((P.Y >= yF - BORDER))) then
          begin
            HITTEST := HTBOTTOMRIGHT;
          end
          else
          begin
            // Linke Seite
            if (P.X <= 8) then
            begin
              if (P.X <= BORDER) then
                HITTEST := HTNOWHERE; //HTLEFT;
              xSide := 1;
            end;
            // Rechte Seite
            if (P.X >= xF - 8) then
            begin
              if (P.X >= xF - BORDER) then
                HITTEST := HTRIGHT;
              xSide := 2;
            end;
            // Obere Seite
            if (P.Y <= BORDER) then
            begin
              HITTEST := HTNOWHERE; //HTTOP;
              if (xSide = 1) then
                HITTEST := HTNOWHERE //HTTOPLEFT
              else if (xSide = 2) then
                HITTEST := HTNOWHERE; //HTTOPRIGHT;
            end;
            // Untere Seite
            if (P.Y >= yF - BORDER) then
            begin
              if (xSide = 1) then
                HITTEST := HTNOWHERE //HTBOTTOMLEFT
              else
                HITTEST := HTBOTTOM;
            end;
          end;
Habe jetzt alles aus bis auf HTBOTTOM \ HTBOTTOMRIGHT \ HTRIGHT
Ist die Standard Bedienung und sollte reichen.

gruss

gast2019 15. Jun 2019 00:46

AW: Fenster flickert beim resize von Linker und Top seite
 
Zitat:

Zitat von peterbelow (Beitrag 1434677)
Zitat:

Zitat von EWeiss (Beitrag 1434670)
Habe mal einen Versuch gemacht.

Verstehe die Technik nicht ganz.
Was verhindert nun das die Rechte Seite nachzieht?
Alle Rects sind gleich sehe keinen unterschied.


Hmm.. glaube das kann man nicht verhindern das ist ein Windows Problem.

gruss

Es ist definitv ein Windows-Problem, und die einzig brauchbare Lösung, die mir dafür bisher eingefallen ist, ist WM_NCHITTEST zu verarbeiten und einfach einen Drag nur für die linke oder untere Kante des Fensters zu erlauben, d.h. für HTRIGHT, HTTOP und die entsprechenden Ecken den Hittest einfach auf HTNOWHERE zu setzen.

Definitiv wäre es ein windows-problem, wenn es auf allen pcs so wäre. Ich halte es aber eher für ein problem des grafikkartentreibers. Justmy2cents.

EWeiss 15. Jun 2019 00:54

AW: Fenster flickert beim resize von Linker und Top seite
 
Zitat:

Definitiv wäre es ein windows-problem, wenn es auf allen pcs so wäre. Ich halte es aber eher für ein problem des grafikkartentreibers. Justmy2cents.
Nein hat damit nichts zu tun und ja es wird auch bei dir so sein.

Lese dir das hier durch dann sollte auch dir das einleuchten:)
https://stackoverflow.com/questions/...specially-drag

Es gibt definitiv keinen vernünftigen weg das Problem zu fixen.
Wie schon gesagt selbst der Windows Explorer hat seine Schwierigkeiten damit.

Resize den von links achte auf die Scrollbars wie die in den Ordner springen (wenn sichtbar) oder von oben und ziehe ihn hoch achte dabei auf die Statusbar wie die da rum hüpft.
Ich habe einen guten Treiber und ne GeForce 1080 12GB Ram die rennt kannst du mir ruhig glauben.
Dazu einen Core I5 9600 3,7 GHZ 6 Core.

Wenn das für ein ach so wenig Ressourcen verwendetes Windows 10 nicht ausreicht dann wirft man es besser in die Tonne.

gruss

gast2019 15. Jun 2019 01:44

AW: Fenster flickert beim resize von Linker und Top seite
 
Ich benutze hier auf dem PC (W10 1809 B557) keine speziellen GraKa-Treiber, sondern nur die von Windows installierten.

Beim Ziehen an den Fensterrändern des Explorers flackert hier absolut nichts, die im Explorer angezeigten Elemente springen lediglich machmal gerastert herum.

Ob das nun an den oder meinen Systemeinstellungen von Windows liegt oder an den GraKa-Treibern, kann ich nicht wirklich beurteilen. Das überlasse ich den Leuten, die die besseren/neueren/schnelleren GraKa-Treiber installiert haben und die bei fünf Pixeln Fenstergrößenänderung sogar viermal Flackern bemerken.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:38 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