Stringgrid(?) häufiger Zeichnen

Rund um die LCL und andere Komponenten
Antworten
Ta152
Beiträge: 10
Registriert: Mi 13. Feb 2013, 11:58

Stringgrid(?) häufiger Zeichnen

Beitrag von Ta152 »

Ich habe mal wieder eine Frage die vermutlich einfach zu lösen ist wenn man die passenden stichworte kennt.

Ich habe ein Programm geschrieben was ein Stringgrid mit diversen Datenbankabfragen füllt, das dauert ein paar Sekunden. Während dieser Wartezeit wird die Programmoberfläche nicht neu gezeichnet. Wie kann ich Lazarus dazu bringen die Oberfläche regelmäßig zu aktualisieren? (Das das die Performance reduziert ist mir klar)

Danke im vorraus.

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Stringgrid(?) häufiger Zeichnen

Beitrag von Michl »

Eine Möglichkeit wäre es evtl., diese Abfrage in einen eigenen Thread zu stecken: http://wiki.freepascal.org/Multithreade ... utorial/de

Andererseits frage ich mich, ob Abfragen in einer Datenbank im Sekundenbereich nicht etwas zu optimieren wären (z.B. Multiselect)?!

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Ta152
Beiträge: 10
Registriert: Mi 13. Feb 2013, 11:58

Re: Stringgrid(?) häufiger Zeichnen

Beitrag von Ta152 »

Danke, Problem gelöst. In dem Multitheading beispiel war der hinweis auf "Application.ProcessMessages" was das Problem löst.

Das Programm ist nicht wirklich Zeitkritisch. Die Datenbanbankabfragen dauern so lange weil es sehe viele sind, nicht die komplexität der Abfrage an sich.

Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

Re: Stringgrid(?) häufiger Zeichnen

Beitrag von Bauer321 »

Kleiner Tipp: nutze BeginUpdate und EndUpdate für das befüllen des StringGrids

Das verhindert das das String bei einfügen jedes Eintrages neu gezeichnet wird und beschleunigt das ganze dadurch extrem.

Kann man anhand einer ListBox sehr gut sehen, was für gigantische Unterschiede das machen kann (ohne BeginUpdate u. Endupdate siehst du wie diese sich langsam befüllt mit ist der Vorgang sofort fertig (ich weiß leider nicht mehr mit wie vielen Zeilen ich das getrdtet habe aber 10000+ und der effekt dürfte beim StringGrid ähnlich sein))
ich weiß, das entspricht nicht genau dem was du gesucht hast, es könnte aber evtl das komplette Problem beseitigen.
www.mcpatcher.net | www.hoeper.me

Antworten