Sanftes Panel Verschieben, nur unter Windows

Rund um die LCL und andere Komponenten
Antworten
Mathias
Beiträge: 7219
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Sanftes Panel Verschieben, nur unter Windows

Beitrag von Mathias »

Wen ich folgen Code unter Windows laufen lassen, dann geht das Panel Sanft nach rechts.
Unter Linux passiert eine Zeit lang nichts und auf einmal ist da Panel rechts.

Wieso ist dies so ?

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  for i:= 1 to 300 do begin
    Sleep(10);
    Panel1.Left:=i;
  end;
end;
Zuletzt geändert von Mathias am Di 28. Jul 2015, 19:57, insgesamt 1-mal geändert.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Warf
Beiträge: 2270
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Sanftes Panel Verschieben, nur unter Windows

Beitrag von Warf »

Mathias hat geschrieben:Wen ich folgen Code unter Windows laufen lassen, dann geht das Panel Sanft nach rechts.
Unter Linux passiert eine Zeit lang nichts und auf einmal ist da Panel rechts.

Wieso ist dies so ?

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  for i:= 1 to 300 do begin
    Sleep(10);
    Panel1.Left:=i;
  end;
end;[/quote]
Windows Forms aktualisieren nicht von selbst, sondern nur wenn dein main Prozess grade am Idlen (warten) ist. Verwende entweder Panel1.Refresh oder Self.Refresh oder Application.ProcessMessages, das "zwingt" die Form zum aktualisieren

Mathias
Beiträge: 7219
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Sanftes Panel Verschieben, nur unter Windows

Beitrag von Mathias »

Windows Forms aktualisieren nicht von selbst, sondern nur wenn dein main Prozess grade am Idlen (warten) ist.
Es ist genau umgekehrt, unter Linux bewegt sich nichts. Unter Windows hat man eine Bewegung gesehen, aber es wurde ein Schatten mitgezogen.

Mit Application.ProcessMessages; nach Sleep(10); geht es nun unter Windows un Linux ohne Fehler. :)

Danke für den Tip !
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten