Geschwindigkeit MSFlexGrid-Tabelle

Hallo VB-Programmer,

habe ein MSFlexGrid-Tabelle (12x31) angelegt und lege mit den Befehlen

Tabelle.Row = Zeile
Tabelle.Col = Spalte
Tabelle.CellBackColor = BackCol&

die Hintergrundfarbe jeder Zelle fest. Sie verändert sich abhängig vom Tabelleninhalt, muss also nach Veränderung der Tabelle neu gesetzt werden.

Jetzt folgendes Problem:
Rufe ich das Beschreiben der Tabelle „call FillTabelle(Datum)“ zum ersten Mal über „Sub Form_Load“ auf, steht die Tabelle blitzartig auf dem Bildschirm, rufe ich „Call FillTabelle(Datum)“ später, z.B. über ein Command auf, kann ich beim Tabellenaufbau zuschauen.

also erstmaliger Aufruf:

Sub Form_Load()
call FillTabelle(Datum)
end sub

… geht blitzartig

anschließender Aufruf:

sub CmdRedraw
Call FillTabelle(Datum)
end sub

… läuft sehr langsam.

Dabei sind die Befehle zum bestimmen der Hintergrundfarbe

Tabelle.Row = Zeile
Tabelle.Col = Spalte

die Bremser.

Gib es eine Möglichkeit, dieses Phänomen zu umgehen.
Mit ständigem
unload Tabelle
und
Tabelle.Show

wird es zwar schnell, aber die Lösung ist unbefriedigend.

MfG
Lothar

Hallo,

FillTabelle(Datum)" später, z.B. über ein Command auf, kann
ich beim Tabellenaufbau zuschauen.

… zuschauen? Also ist es sichtbar. … Das ist langsam.

also erstmaliger Aufruf:

Sub Form_Load()
call FillTabelle(Datum)
end sub

… geht blitzartig

Da ist es auch noch unsichtbar, wenn davor kein Form1.show steht.

anschließender Aufruf:

sub CmdRedraw
Call FillTabelle(Datum)
end sub

… läuft sehr langsam.

dann schalt mal Visible auf False, während das Felxgrid bearbeitet wird.

Gruß, Rainer

Hallo Rainer,

ja. so funkt es, Anzeige während der Bearbeitung ausschalten !
(Klar hätte ich auch drauf kommen müssen … (bin halt noch VB-Azubi)

Aber trotzdem, beim 1. Aufruf über Form_Load geht es blitzartig,
obwohl ich die Form „TabelleForm“ mit TabelleForm.Show aufrufe und
im Sub „FillTabelle“ das FlexGrid vorher auf Visible = True gesetzt habe.

Vielleicht wird bei Form_Load die Anzeige von „Haus aus“ erst zum Schluss freigegeben ??

Gruss und vielen Dank

Lothar

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

Aber trotzdem, beim 1. Aufruf über Form_Load geht es
blitzartig,
obwohl ich die Form „TabelleForm“ mit TabelleForm.Show aufrufe
und
im Sub „FillTabelle“ das FlexGrid vorher auf Visible = True
gesetzt habe.

Vielleicht wird bei Form_Load die Anzeige von „Haus aus“ erst
zum Schluss freigegeben ??

Du hast vermutlich hinter Form.Show kein DoEvents, deshalb wird erst der Code ausgeführt. Die Anzeige macht dann Windows, aber erst, wenn es Events verarbeiten darf.
Wenn Du ‚Visible‘ auf ‚False‘ stellst und kein Doevents einfügst, bleibt das Flexgrid sichtbar, einfach nur, weil der Computer keine Zeit bekommt, die Anzeige zu verändern. Die einzelnen Änderungen werden dann aber nicht direkt angezeigt, deshalb wird das Programm schneller.

Gruß, Rainer

Hallo

Das Form_load beinhaltet nicht das zeigen des Flexgrids. Wird Form_load verlassen ist der nächste durchlauf Form_show. Deshalb geht das laden am Anfang so schnell. Also beim reload des Grids, solltest du das visible auf false setzen und danach wieder auf true setzen. Bei größeren tabellen solltest du zwischen der aktualisierung ab und zu das visible auf true setzen danach einen Reload der Form und danach gleich wieder auf visible auf false setzen. (Verhindert damit eine nicht fertig geladene Oberfläche) Der wartende Anwender wird es dir danken. Evtl. noch die Sanduhr anzeigen. DoEvents sollten auf jeden Fall gesetzt werden. Somit blockierst du nicht den ganzen Rechner. vielleicht bei jeder 10 zeile. Kommt darauf an was noch alles gemacht werden muss.

Gruß Sven

Vielen Dank Sven & Rainer,

… es funktioniert, ich habe es verstanden und etwas dazugelernt :wink:

was will man mehr.

Gruesse von VB-Azubi Lothar

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Lothar.

Versuche es doch mal Redraw = False vor und Redraw = True nach den Formatierungen.

Viele Grüße
Carsten