AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Flackern bei vielen Komponenten

Ein Thema von CeKa · begonnen am 31. Mär 2020 · letzter Beitrag vom 31. Mär 2020
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.557 Beiträge
 
Delphi 12 Athens
 
#1

AW: Flackern bei vielen Komponenten

  Alt 31. Mär 2020, 11:42
Es betrifft alle "Windows", also Fenster und auch die Controls darauf. (in Windows ist alles ein Window, drum heißt es ja Windows)

Statt Left+Top und/oder Width+Height einzeln zu setzen, kann man in Delphi auch Delphi-Referenz durchsuchenTControl.BoundsRect verwenden, um beide alle Werte gleichzeitig zu ändern.

Und genauso gibt es in Windows diese Methode, um das auch für mehrere Fenster/Komponenten vorzudefinieren und anschließend gemeinsam ändern zu lassen.


könnte in etwa so aussehn.
Delphi-Quellcode:
var H: HDWP;

H := BeginDeferWindowPos(3);
try
  DeferWindowPos(H, Edit1.Handle, 0, x1, y1, 0, 0, SWP_NOACTIVATE or SWP_NOZORDER or SWP_NOSIZE);
  DeferWindowPos(H, Edit2.Handle, 0, x2, y2, 0, 0, SWP_NOACTIVATE or SWP_NOZORDER or SWP_NOSIZE);
  DeferWindowPos(H, Edit3.Handle, 0, x3, y3, 0, 0, SWP_NOACTIVATE or SWP_NOZORDER or SWP_NOSIZE);
finally
  EndDeferWindowPos(H);
end;
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.757 Beiträge
 
Delphi 12 Athens
 
#2

AW: Flackern bei vielen Komponenten

  Alt 31. Mär 2020, 12:09
@Himitsu: Hast du die Douk zum Return-Value von DeferWindowPos gelesen?
Zitat:
The return value identifies the updated multiple-window – position structure. The handle returned by this function may differ from the handle passed to the function. The new handle that this function returns should be passed during the next call to the DeferWindowPos or EndDeferWindowPos function.
Müsste es demnach nicht eher so aussehen?
Delphi-Quellcode:
H := BeginDeferWindowPos(3);
try
  H := DeferWindowPos(H, Edit1.Handle, 0, x1, y1, 0, 0, SWP_NOACTIVATE or SWP_NOZORDER or SWP_NOSIZE);
  H := DeferWindowPos(H, Edit2.Handle, 0, x2, y2, 0, 0, SWP_NOACTIVATE or SWP_NOZORDER or SWP_NOSIZE);
  H := DeferWindowPos(H, Edit3.Handle, 0, x3, y3, 0, 0, SWP_NOACTIVATE or SWP_NOZORDER or SWP_NOSIZE);
finally
  EndDeferWindowPos(H);
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.557 Beiträge
 
Delphi 12 Athens
 
#3

AW: Flackern bei vielen Komponenten

  Alt 31. Mär 2020, 12:20
Bei deiner Variante würde ich mich fragen wer eigentlich all die vielen Handles freigibt.

Joar, aber ich glaub das klingt mehr hiernach.
EndDeferWindowPos müsste doch das Handle vom BeginDeferWindowPos bekommen.
Delphi-Quellcode:
{ H := BeginDeferWindowPos(3);
try
  H2 := DeferWindowPos(H, Edit1.Handle, 0, x1, y1, 0, 0, SWP_NOACTIVATE or SWP_NOZORDER or SWP_NOSIZE);
  H2 := DeferWindowPos(H2, Edit2.Handle, 0, x2, y2, 0, 0, SWP_NOACTIVATE or SWP_NOZORDER or SWP_NOSIZE);
  DeferWindowPos(H2, Edit3.Handle, 0, x3, y3, 0, 0, SWP_NOACTIVATE or SWP_NOZORDER or SWP_NOSIZE);
finally
  EndDeferWindowPos(H);
end; }


H := BeginDeferWindowPos(3);
try
  H2 := H;
  H2 := DeferWindowPos(H2, Edit1.Handle, 0, x1, y1, 0, 0, SWP_NOACTIVATE or SWP_NOZORDER or SWP_NOSIZE);
  H2 := DeferWindowPos(H2, Edit2.Handle, 0, x2, y2, 0, 0, SWP_NOACTIVATE or SWP_NOZORDER or SWP_NOSIZE);
  H2 := DeferWindowPos(H2, Edit3.Handle, 0, x3, y3, 0, 0, SWP_NOACTIVATE or SWP_NOZORDER or SWP_NOSIZE);
  if H2 = 0 then ; // wegen Warnung, dass letztes H2 nicht genutzt wird
finally
  EndDeferWindowPos(H);
end;
(könnte innen so aussehn, als wenn das Handle ein Pointer auf ein Array ist und die Returned-Handles dann darauf rumrutschen)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.757 Beiträge
 
Delphi 12 Athens
 
#4

AW: Flackern bei vielen Komponenten

  Alt 31. Mär 2020, 14:16
EndDeferWindowPos müsste doch das Handle vom BeginDeferWindowPos bekommen.
Die Doku sagt aber explizit was anderes.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.557 Beiträge
 
Delphi 12 Athens
 
#5

AW: Flackern bei vielen Komponenten

  Alt 31. Mär 2020, 14:39
Joar, stimmt. (fast halb explizit)

Zitat:
This internal structure is returned by the BeginDeferWindowPos function or by the most recent call to the DeferWindowPos function.
OK, also nehmen wir Deines.

Und überlegen vielleicht nochmal ob das OR heißt immer vom Letzen, oder "Begin oder das lette Defer",
dann ginge mein Letztes auch.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
CeKa

Registriert seit: 31. Mär 2020
3 Beiträge
 
#6

AW: Flackern bei vielen Komponenten

  Alt 31. Mär 2020, 21:49
DeferWindowPos ist die Lösung.
Auch der Tipp mit der Message WM_SETREDRAW war hilfreich.
Wieder ein Stückchen schlauer.

Vielen Dank!
  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 03:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz