Announcement

Collapse
No announcement yet.

Zu langsamer Formularaufbau

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zu langsamer Formularaufbau

    Hallo,

    ich habe ein nervendes und unschönes Problem.

    Bei einigen meiner Formulare, welche gleichzeitig auch einige Tabellen in Interbase 5.5 (D5 Enterprise) öffnen, wird das Formular störend langsam und in Teilstücken aufgebaut. Dies ist ein äußerst unschöner Effekt.

    Gibt es keine Möglichkeit, den Formularaufbau sofort und rasch abzuschliessen, während man sich in Form.Activate befindet. Danach können in Ruhe die restlichen zeitaufwendigen Dinge (öffnen der Tabellen) usw. erledigt werden.

    Vielen Dank für eine rasche Hilfe!

    Helmut

  • #2
    Hallo,

    es gibt hier 2 Möglichkeiten: <br>
    1. Beim Compilieren sind alle Datenquellen (TTable/TQuery etc.) geschlossen, erst nach dem Anzeigen des Formulars werden sie geöffnet. In diesem Fall bleibt jedoch die Wartezeit für den Anwender ("Formular blockiert...") <br>
    2. Das Formular spaltet in <b>OnCreate</b> einen eigenen Thread ab, in dem die Datenquellen geöffnet und erst am Ende über Synchronize an die TDataSource-Instanzen im Formular übergeben werden. In diesem Fall wird das Formular zu keinem Zeitpunkt blockiert

    Comment


    • #3
      Hallo,

      vielen Dank Hr.Kosch.

      zu Punkt 1)<p>Ich öffne die Datenquellen erst im Ereignis OnActivate des Formulares. Der optische Formularaufbau wird aber anscheinend erst bei Beenden dieses Ereignisses abgeschlossen. Optimal wäre ein Ereignis, welches erst nach OnActivate auftritt und zum Öffnen der Tabellen verwendet werden könnte.

      zu Punkt 2)<p>Klingt verlockend. Ich habe aber keine Kenntnisse über Thread-Programmierung. Wenn es nicht zu umfangreich ist, möchte ich Sie um ein Beispiel bitten.

      Helmu

      Comment


      • #4
        Hallo,

        zu Punkt 1: <br>
        In diesem Fall kann sich das Formular über <b>PostMessage</b> eine eigenen private Botschaft zuschicken. Da PostMessage diese Botschaft an das Ende der Botschaftswarteschlange anfügt, wird die eigene Botschaftsbehandlungsmethode erst dann abgearbeitet, wenn nichts mehr zu tun ist (d.h. das Formular ist komplett fertig). Innerhalb dieser Botschaftsbehandlungsmethode wird dann die Datenquelle geöffnet.

        zu Punkt 2: <br>
        Mehrere Beispielprojekte zum Auslagern in einen externen Thread sind in meinem Buch <i>Client/Server Datenbankentwicklung mit Delphi</i> zu finden. Das Thema ist zu komplex, um es in wenigen Zeilen vernünftig abhandeln zu können

        Comment

        Working...
        X