AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Update des Fensters für eine Zeit unterbinden

Update des Fensters für eine Zeit unterbinden

Ein Thema von loirad · begonnen am 17. Mai 2012 · letzter Beitrag vom 17. Mai 2012
Antwort Antwort
Seite 1 von 2  1 2   
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#1

AW: Update des Fensters für eine Zeit unterbinden

  Alt 17. Mai 2012, 16:03
Du kannst WM_SETREDRAW nutzen. Beispiel findest Du dort: StackOverflow
Lars
  Mit Zitat antworten Zitat
loirad

Registriert seit: 25. Nov 2009
135 Beiträge
 
Delphi 6 Professional
 
#2

AW: Update des Fensters für eine Zeit unterbinden

  Alt 17. Mai 2012, 16:24
Hallo, Danke für deine Idee daywalker9, aber es funktioniert immmernoch nicht.
Es flackert zwar nicht, aber es erzeugt auch nichts (siehe Bild im Anhang).
Delphi-Quellcode:
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);
   end;
  end;
Eigentlich sieht es wie auf dem 2. Bild aus!

Hat noch jemand eine weitere Idee oder habe ich etwas übersehen? Danke für weitere Antworten
Angehängte Grafiken
Dateityp: jpg 2012-05-17_172129.jpg (9,2 KB, 4x aufgerufen)
Dateityp: jpg 2012-05-17_172242.jpg (30,5 KB, 4x aufgerufen)
Wer Fehler findet darf sie behalten!
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#3

AW: Update des Fensters für eine Zeit unterbinden

  Alt 17. Mai 2012, 16:35

Hat noch jemand eine weitere Idee oder habe ich etwas übersehen? Danke für weitere Antworten
Du musst noch Invalidate oder RedrawWindow(Handle, nil, 0, RDW_ERASE or RDW_FRAME or RDW_INVALIDATE or RDW_ALLCHILDREN) aufrufen
Lars
  Mit Zitat antworten Zitat
loirad

Registriert seit: 25. Nov 2009
135 Beiträge
 
Delphi 6 Professional
 
#4

AW: Update des Fensters für eine Zeit unterbinden

  Alt 17. Mai 2012, 16:44
Du musst noch Invalidate oder RedrawWindow(Handle, nil, 0, RDW_ERASE or RDW_FRAME or RDW_INVALIDATE or RDW_ALLCHILDREN) aufrufen
So:
Delphi-Quellcode:
 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;
geht es leider auch nicht - ist eine Mischung aus flackern und nicht zeichnen es ist das gleiche Bild wie bei meinem vorherigen Post, nur das es noch flackert!

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!
Wer Fehler findet darf sie behalten!
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#5

AW: Update des Fensters für eine Zeit unterbinden

  Alt 17. Mai 2012, 16:46
Mach das setzen des WM_SETREDRAW und RedrawWindow nicht innerhalb der schleife, sondern vorher bzw nachher
Lars
  Mit Zitat antworten Zitat
loirad

Registriert seit: 25. Nov 2009
135 Beiträge
 
Delphi 6 Professional
 
#6

AW: Update des Fensters für eine Zeit unterbinden

  Alt 17. Mai 2012, 16:48
@daywalker9: macht keinen Unterschied!

Hat jemand eine andere Lösung?
Wer Fehler findet darf sie behalten!
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#7

AW: Update des Fensters für eine Zeit unterbinden

  Alt 17. Mai 2012, 16:55
@daywalker9: macht keinen Unterschied!

Hat jemand eine andere Lösung?
Ersetze mal SendMEssage durch  Self.Perform(WM_SETREDRAW, WPARAM(false), 0);
Lars
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.989 Beiträge
 
Delphi 12 Athens
 
#8

AW: Update des Fensters für eine Zeit unterbinden

  Alt 17. Mai 2012, 16:51
Oh, das mit dem DoubleBuffered hatte ich übersehen.

Mit dem neuen Erzeugen macht es sich am einfachsten!
Erstens kommt dir das nur so vor, zweitens musst du eben selbst entscheiden was du willst:
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...
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
loirad

Registriert seit: 25. Nov 2009
135 Beiträge
 
Delphi 6 Professional
 
#9

AW: Update des Fensters für eine Zeit unterbinden

  Alt 17. Mai 2012, 17:08
@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?
Wer Fehler findet darf sie behalten!
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#10

AW: Update des Fensters für eine Zeit unterbinden

  Alt 17. Mai 2012, 17:13
Im OnPaint?

Du erzeugst bei jedem Malen der Form die ListBoxen erneut? Dann ist es klar, das es flackert, reicht es nicht im FormCreate?
Lars
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

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 15:04 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