Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Neuzeichnen von TStatusbar (https://www.delphipraxis.net/35080-neuzeichnen-von-tstatusbar.html)

Sourcemaker 2. Dez 2004 11:49

Re: Neuzeichnen von TStatusbar
 
Hi,

Ich würde empfehlen die Methode Update aufzurufen Application ProcessMessages geht auch ist aber unter Umständen mit Nebenwirkungen behaftet.

Zitat:

Die Methode Update bearbeitet alle anstehenden Zeichenbotschaften.

Delphi-Syntax:

procedure Update; virtual;

C++ Syntax:

virtual void __fastcall Update(void);

Beschreibung

Mit Update können Sie das sofortige Neuzeichnen des Steuerelements veranlassen, bevor weitere, möglicherweise zeitaufwendige Bearbeitungen durchgeführt werden. Mit Hilfe dieser Methode können Sie dem Benutzer eine sofortige Rückmeldung zukommen lassen.

Update ruft nicht die Methode Invalidate des Steuerelements auf, sondern veranlasst nur das Neuzeichnen von Bildschirmbereichen, die bereits aktualisiert wurden. Wenn auch das Steuerelement erneut gezeichnet werden soll, rufen Sie stattdessen Repaint auf.
Grüße

Frank

Neelix 2. Dez 2004 12:27

Re: Neuzeichnen von TStatusbar
 
Die Methode Update hat auch nichts gebracht. Teste gerade den Vorschlag von Luckie mit dem sleep. Welche Nebenwirkungen hat den Application.ProcessMesages?

Sourcemaker 2. Dez 2004 12:54

Re: Neuzeichnen von TStatusbar
 
Beispiel für Nebenwirkung:

Wenn Du eine Form erzeugts und sie in einer SetUp-Routine mit Daten füllst die dann zügig angezeigt werden sollen während weitere Initialisierung ablaufen führt ein Application Processmessage zwar zur direkten Anzeige der Form sorgt aber auch dafür das Events ablaufen bzw. auf Events reagiert wird die erst nach vollständigen SetUp behandelt werden können und das führt zu schönen Knalleffekten. Update hingegen zeichnet hingegen nur die bereits gefüllten Controls neu.

Grüße

Frank

Neelix 2. Dez 2004 13:01

Re: Neuzeichnen von TStatusbar
 
Sleep (2000) hat leider auch nichts gebracht. :wall:

Muetze1 2. Dez 2004 13:17

Re: Neuzeichnen von TStatusbar
 
Moin!

Noch 2 Vorschlägen:

1. Vor dem Update noch ein Invalidate aufrufen
2. per Hand:
Delphi-Quellcode:
Var
  lRect : TRect;
Begin
  ...

  lRect := StatusBar.ClientRect;
  InvalidateRect(Handle, @lRect, False);
  UpdateWindow(Handle);

  ...
End;
MfG
Muetze1

bigg 2. Dez 2004 13:17

Re: Neuzeichnen von TStatusbar
 
Code:
Application.ProcessMessages
:)

franktron 2. Dez 2004 13:19

Re: Neuzeichnen von TStatusbar
 
Machs mal so

Zitat:

Zitat von Neelix
Hallo,

in einem Programm werden nacheinander mehrere Query's
Delphi-Quellcode:
     
      StatusBar1.SimpleText := 'Erstelle tmp_blabla_1';
      Application.ProcessMessages;
      dmCopyVertrag.qu_CreateDropTable.SQL.Clear;
      dmCopyVertrag.qu_CreateDropTable.SQL.Add('CREATE TEMP TABLE tmp_blabla1 (');
      dmCopyVertrag.qu_CreateDropTable.SQL.Add('bla_1 CHAR(20) NOT NULL,');
      dmCopyVertrag.qu_CreateDropTable.SQL.Add('bla_2 INTEGER NOT NULL)');
      dmCopyVertrag.qu_CreateDropTable.ExecSQL;
      dmCopyVertrag.qu_tmp_blabla_1.ExecSQL;

      StatusBar1.SimpleText := 'Erstelle tmp_blabla_11';
      Application.ProcessMessages;
      dmCopyVertrag.qu_CreateDropTable.SQL.Clear;
      dmCopyVertrag.qu_CreateDropTable.SQL.Add('CREATE TEMP TABLE tmp_blabla_11 (');
      dmCopyVertrag.qu_CreateDropTable.SQL.Add('bla_11 INTEGER NOT NULL,');
      dmCopyVertrag.qu_CreateDropTable.SQL.Add('bla_12 CHAR(21) NOT NULL)');
      dmCopyVertrag.qu_CreateDropTable.ExecSQL;
      dmCopyVertrag.qu_tmp_blabla_11.ExecSQL;


Muetze1 2. Dez 2004 13:21

Re: Neuzeichnen von TStatusbar
 
Moin!

Und für die letzten beiden nochmals dieses hier. Application.ProcessMessages ist an dieser Stelle wirklich kein guter Weg und wirkt eh wie eine Holzhammermethode.

MfG
Muetze1

Neelix 2. Dez 2004 13:31

Re: Neuzeichnen von TStatusbar
 
Hallo Muetze1,

Test läuft.

Neelix 2. Dez 2004 13:51

Re: Neuzeichnen von TStatusbar
 
Hat auch nichts gebracht. In meiner Verzweiflung versuche ich nun doch Application.ProcessMessages. :x


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:59 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz