Delphi-PRAXiS

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 Formular aktualisieren (https://www.delphipraxis.net/149528-formular-aktualisieren.html)

wallwriht 23. Mär 2010 15:34


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

AbesCid 23. Mär 2010 15:37

Re: Formular aktualisieren
 
Hallo!

Das ist relativ einfach!

Delphi-Quellcode:
Application.ProcessMessages;
löst dein Problem.

Soweit ich weiß müsstest du es dann so einbinden:

Delphi-Quellcode:
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;
Probiers mal aus und wenns nicht geht, dann melde dich einfach noch einmal!

abescid

wallwriht 23. Mär 2010 15:48

Re: Formular aktualisieren
 
der befehl funktioniert allerdings flackert es jetzt.

kann man da was dagegen tun?

AbesCid 23. Mär 2010 15:54

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:
begin
Image1.Left:= i;
Application.ProcessMessages;
sleep(20);
end;
Also nur die zwei Befehle verdreht.
Du musst kreativ sein und alle Anweisungen mal verändern und gucken, wie es dann aussieht :-D

Sir Rufo 23. Mär 2010 16:01

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.

runningsoft 23. Mär 2010 16:09

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 11:36 Uhr.

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