AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Fenster flickert beim resize von Linker und Top seite

Fenster flickert beim resize von Linker und Top seite

Ein Thema von EWeiss · begonnen am 13. Jun 2019 · letzter Beitrag vom 15. Jun 2019
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

Fenster flickert beim resize von Linker und Top seite

  Alt 13. Jun 2019, 20:02
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
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: Fenster flickert beim resize von Linker und Top seite

  Alt 13. Jun 2019, 22:06
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.

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

Geändert von EWeiss (14. Jun 2019 um 15:53 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: Fenster flickert beim resize von Linker und Top seite

  Alt 14. Jun 2019, 22:28
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

Geändert von EWeiss (14. Jun 2019 um 22:52 Uhr)
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
669 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Fenster flickert beim resize von Linker und Top seite

  Alt 15. Jun 2019, 00:20
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.
Peter Below
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Fenster flickert beim resize von Linker und Top seite

  Alt 15. Jun 2019, 00:27
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

Geändert von EWeiss (15. Jun 2019 um 00:55 Uhr)
  Mit Zitat antworten Zitat
gast2019
(Gast)

n/a Beiträge
 
#6

AW: Fenster flickert beim resize von Linker und Top seite

  Alt 15. Jun 2019, 01:46
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.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Fenster flickert beim resize von Linker und Top seite

  Alt 15. Jun 2019, 01:54
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

Geändert von EWeiss (15. Jun 2019 um 02:02 Uhr)
  Mit Zitat antworten Zitat
gast2019
(Gast)

n/a Beiträge
 
#8

AW: Fenster flickert beim resize von Linker und Top seite

  Alt 15. Jun 2019, 02:44
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.

Geändert von gast2019 (15. Jun 2019 um 02:47 Uhr) Grund: typo
  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 09:21 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