| Autor |
Beitrag |
moloch
      
Beiträge: 451
Win 2000
D5 Prof
|
Verfasst: Mi 01.09.04 16:04
Hallo,
also ich habe jetzt versucht mit "StringGrid.Perform(WM_SETREDRAW, 0, 0);" das flackern in den Griff zu bekommen. Ich muss sagen es ist besser geworden.
Ich verstehe aber nicht ganz was diese funktion macht, gibt es vielleicht auch noch was besseres?
beginupdate und endupdate gibt es nicht bei stringgrids.
mfg
moloch
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Do 02.09.04 09:14
Hallo,
ich vermute, dass das mit Deinem anderen Problem zusammen hängt (stringgrid1.OnDraw). Ich habe hier bei mir auch mal was ähnliches gebastelt. Es flackert nicht aber nicht. Wahrscheinlich müssen zu viele Dinge im Grid neu gezeichnet werden, so dass Dein Rechner einfach nicht mehr damit klar kommt. Poste doch mal Deinen Source vielleicht sieht ja jemand eine Möglichkeit zur Optimierung.
|
|
moloch 
      
Beiträge: 451
Win 2000
D5 Prof
|
Verfasst: Do 02.09.04 09:51
hey,
also ist so.Ich habe einmal eine funktion in ondraw die den zelleninhalt zentriert und die erste zeile des grids fett schreibt. wenn ich da StringGrid.Perform(WM_SETREDRAW, 0, 0); einbaue dann wird das schon besser mit dem Flackern.
So jetzt habe ich aber noch eine funktion in Formresize. Diese optimiert die spaltenbreite und zellenhöhe des grids auf die Formulargröße. also da wird schon gerechnet.ich denke ich brauch noch was dafür, für formresize.
mfg
moloch
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Do 02.09.04 10:54
Mit dem StringGrid.Perform(WM_SETREDRAW, 0, 0) wird vermutlich nur die Standard-Draw-Routine vom Stringgrid unterbunden. Das OnDrawCell-Ereignis möglicherweise nicht. Ich habe gerade keine Möglichkeit zum Testen.
Zwei Ideen, die Du mal testen solltest:
1. Deaktiviere mal das OnDrawCell-Ereignis
Sollte das helfen kannst Du folgendes prüfen:
2. Im FormCanResize-Ereignis eine boolsche Variable setzen (z.B. GridNeuZeichnen). Dieses Ereignis wird abgerufen, bevor neu gezeichnet wird. Diese Variable fragst Du dann im OnDrawCell ab und brichst die Routine entsprechend ab. Vergiss aber nicht die Variable zurückzusetzen.
|
|
moloch 
      
Beiträge: 451
Win 2000
D5 Prof
|
Verfasst: Do 02.09.04 12:17
meinst du damit, dass dann solange nichts in drawcell gemacht wird bis die formresize-routine fertig ist?
mfg
moloch
|
|
moloch 
      
Beiträge: 451
Win 2000
D5 Prof
|
Verfasst: Do 02.09.04 12:21
ich seh gerad es gibt ja onresize und oncanresize.
kannst du mir mit deinen worten mal beschreiben wo da der unterschied liegt.
welches soll ich nun nehmen?
mfg
moloch
|
|
moloch 
      
Beiträge: 451
Win 2000
D5 Prof
|
Verfasst: Do 02.09.04 12:28
also folgendes:
wenn ich die routine in formresize rufe dann flackert es nicht so doll als wenn ich sie in canresize rufe.
mit dem flag versteh ich nicht richtig,da erst das jeweilige formresize-ereignis gerufen wird und dann das ondrawcell.dann ist ja das flag unsinnig oder?
mfg
moloch
|
|
.Chef
      
Beiträge: 1112
|
Verfasst: Do 02.09.04 12:34
Schonmal DoubleBuffered:=True probiert? 
_________________ Die Antworten auf die 5 häufigsten Fragen:
1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Do 02.09.04 12:36
1. Es soll damit tatsächlich erreicht werden, dass DrawCell nichts macht.
2. OnResize und OnCanResize
Also, OnCanResize wird aufgerufen, bevor die Größe verändert wird. Dort kannst Du sogar mitteilen, dass die Größe nicht verändert werden darf. On Resize wird aufgerufen, wenn die Größe verändert wurde.
Deswegen musst Du die Variable im CanResize setzen. Bevor alles neu gezeichnet wird. Ansonsten macht es keinen Sinn.
Die Variable muss dann im DrawCell zurückgesetzt werden, da ich vermute, dass OnResize während der gesamten Zeit der Größenänderung aufgerufen wird.
Da ich hier aber gerade keine Test-Möglichkeit habe, musst Du wohl mal ein bisschen experimentieren. Vielleicht liest ja einer mit und kann Dir schon mehr sagen.
|
|