![]() |
AW: Update des Fensters für eine Zeit unterbinden
Zitat:
MfG Dalai |
AW: Update des Fensters für eine Zeit unterbinden
Zitat:
Delphi-Quellcode:
oder
Invalidate
Delphi-Quellcode:
aufrufen
RedrawWindow(Handle, nil, 0, RDW_ERASE or RDW_FRAME or RDW_INVALIDATE or RDW_ALLCHILDREN)
|
AW: Update des Fensters für eine Zeit unterbinden
@loirad: Warum erstellst du nicht eine ListBox, die du je nach Auswahl mit anderen Daten füllst? Ich könnte ja noch nachvollziehen, dass es evtl, einfacher ist, für jeden Monat eine ListBox zu erzeugen, aber für jeden Tag eine?! Das verstehe ich nicht.
Ach, noch etwas, das WM_SETREDRAW wird - so meine Vermutung - nur das Neuzeichnen ein-/ausschalten, aber nicht das Neuzeichnen selbst auslösen/ausführen. Daher musst du wohl nach dem Reaktivieren ein Update/Repaint/Refresh/Invalidate auslösen. MfG Dalai |
AW: Update des Fensters für eine Zeit unterbinden
Am wichtigsten wäre erst einmal beim Formular und den anderen Komponenten DoubleBuffered auf True zu setzen. Das reduziert das Flackern etwas.
Zudem sieht es so aus, als ob du jedesmal alle Komponenten neu erzeugst. :shock: Das macht keinen Sinn. Wenn du schon so viele Komponenten benutzt, dann solltest du sie zumindest wiederverwenden. Und die sinnvollste Variante ist, dass du gar nicht erst so viele einzelne Komponenten benutzt. Ein Beispiel findest du z.B. hier: ![]() Das ist ein Periodensystem und zwar nicht ganz das selbe, aber vom Prinzip her genau was du machen kannst. Einfach den Inhalt selbst zeichnen und auf einer TPaintBox darstellen. |
AW: Update des Fensters für eine Zeit unterbinden
Zitat:
Delphi-Quellcode:
geht es leider auch nicht - ist eine Mischung aus flackern und nicht zeichnen :arrow: es ist das gleiche Bild wie bei meinem vorherigen Post, nur das es noch flackert!
for i:=0 to length(Tage)-1 do
begin Tage[i]:=TListbox.Create(Kalender); Tage[i].Parent:=Kalender; SendMessage(Handle, WM_SETREDRAW, WPARAM(False), 0); try Tage[i].Width:=Kalender.DefaultColWidth; Tage[i].Height:=Kalender.DefaultRowHeight; Tage[i].Left:=((i+Wochentag-1) mod 7)*(Kalender.DefaultColWidth+1); Tage[i].Top:=((i+Wochentag-1) div 7)*(Kalender.DefaultRowHeight+1)+40; Tage[i].Style:=lbOwnerDrawFixed; Tage[i].Font.Size:=10; Tage[i].Items.Add(Zentriere(inttostr(i+1)+'.'+inttostr(m)+'.'+inttostr(y),Tage[i].ClientWidth,Tage[i].Font)); finally SendMessage(Handle, WM_SETREDRAW, WPARAM(True), 0); RedrawWindow(Handle, nil, 0, RDW_ERASE or RDW_FRAME or RDW_INVALIDATE or RDW_ALLCHILDREN); end; end; Liebe Grüße loirad PS.: Es steht im OnPaint drin - liegt da der Fehler? @Dalai: Ich möchte eine Gesamtübersicht über den Monat mit To-Do's haben! @jaenicke: DoubleBuffered ist an (hatte ich schon erwähnt)! Mit dem neuen Erzeugen macht es sich am einfachsten! |
AW: Update des Fensters für eine Zeit unterbinden
Mach das setzen des WM_SETREDRAW und RedrawWindow nicht innerhalb der schleife, sondern vorher bzw nachher
|
AW: Update des Fensters für eine Zeit unterbinden
@daywalker9: macht keinen Unterschied!
Hat jemand eine andere Lösung? |
AW: Update des Fensters für eine Zeit unterbinden
Oh, das mit dem DoubleBuffered hatte ich übersehen.
Zitat:
Eine gute Lösung oder eine, die dir einfach erscheint, aber dafür eben deutliche Schwächen hat... Viel verbessern lässt sich da nicht... Das ist so schlicht nicht vorgesehen. Klar, selbst zeichnen ist schwerer, aber dafür am Ende auch viel besser vom Ergebnis her. Aber schon das Wiederverwenden bringt viel und ist eher einfacher als deine jetzige Lösung... |
AW: Update des Fensters für eine Zeit unterbinden
Zitat:
Delphi-Quellcode:
Self.Perform(WM_SETREDRAW, WPARAM(false), 0);
|
AW: Update des Fensters für eine Zeit unterbinden
@jaenicke: Es flackert immernoch und dazu noch irgendwelche Exceptions (das liegt aber wahrscheinlich an mir)!
@daywalker9: Gleiches Resultat! Liegt es daran, dass es im OnPaint ist und damit eine Endlosschleife erzeugt? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:28 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