![]() |
Formular aktualisieren
Hi Leute ich habe folgendes Problem:
Habe dieses Programm geschrieben procedure TForm1.Button1Click(Sender: TObject); var i: integer; begin for i := 21 to 100 do begin Image1.Left:= i; sleep(20) end; end; jetzt will ich aber das das bild für den Nutzer erkennbar nach und nach verschoben wird. Bei der Anzeige passiert dies aber auf einmal. Wie kann ich das lösen? Ich erinnere mich das e s einen Befehl gab mit dem man das Formular aktualisieren konnte aber welcher? MfG Wallwriht |
Re: Formular aktualisieren
Hallo!
Das ist relativ einfach!
Delphi-Quellcode:
löst dein Problem.
Application.ProcessMessages;
Soweit ich weiß müsstest du es dann so einbinden:
Delphi-Quellcode:
Probiers mal aus und wenns nicht geht, dann melde dich einfach noch einmal!
procedure TForm1.Button1Click(Sender: TObject);
var i: integer; begin for i := 21 to 100 do begin Image1.Left:= i; sleep(20) Application.ProcessMessages; end; end; abescid |
Re: Formular aktualisieren
der befehl funktioniert allerdings flackert es jetzt.
kann man da was dagegen tun? |
Re: Formular aktualisieren
Was flackert?? Das Bild?
Du musst auch bedenken, dass sleep(20) eine sehr kurze Zeit ist! Auch hier wird die Zeit in Millisekunden angegeben! Probiers mal mit einer höheren Zahl und schreib mal das hier:
Delphi-Quellcode:
Also nur die zwei Befehle verdreht.
begin
Image1.Left:= i; Application.ProcessMessages; sleep(20); end; Du musst kreativ sein und alle Anweisungen mal verändern und gucken, wie es dann aussieht :-D |
Re: Formular aktualisieren
:warn: Application.ProcessMessages aktualisiert nicht das Formular (wenigstens nicht direkt)
Innherhalb des Formulars kann man mit Self.Repaint ein Neuzeichnen erzwingen. Image1.Repaint zeichnet nur die Bildkomponente neu. Application.ProcessMessages veranlasst die Anwendung alle anstehenden Nachrichten abzuarbeiten u.a. wird dabei das Formual neu gezeichnet. Es passiert aber auch noch eine ganze Menge mehr. (Übersetzen von englisch-deutsch der Begriffe ist hilfreich) Es kommt immer darauf an, was man erreichen möchte. Um einiges besser sollte die Bewegung mit einem Timer laufen. |
Re: Formular aktualisieren
Wenn Du für das Formular im Objektinspektor noch "DoubleBuffered" True einstellst, flackert das Bild auch nicht mehr.
Ich weiß allerdings nicht mehr, ab welcher Delphi-Version diese Eigenschaft erst verfügbar ist. Steffen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz