Witajcie. Planuje zrobic pasek tekstu cos w stylu "newsow", ktory bedzie przewijal sie w poziomie od prawej do lewej strony. Probujac go zrobic natknolem na dwa dosc wnerwiajace problemy. Zeby calosc zrobic dosc szybko najpierw do wyswietlania kolejnych tektow uzylem konponentu Label ale ten pomimo ustawienia wlasciwosci DoubleBuffered formy na True caly czas migal podczas przewijania wiec zrezygnowalem z niego i uzylem komponentu StaticText. Ten juz nie miga :) ale jest kolejny problem. Podczas przwijania tzn co 10 ms pozycja tekstu zmienia sie o 1 piksel tekst nie przesuwa sie plynnie tylko czasami skacze. Dodam ze czas 10 ms odlicza Timer a zmiana dokonuje sie w obsludze jego przerwania. Probowalem tez zrobic to z wykorzystaniem watku ale z nim jest jeszcze gorzej a chyba powinno byc lepiej. Chcialbym wiec zapytac co jest nie tak i jak ten problem rozwiazac.
Ponizej zamieszczam prosty kod na ktorym testuje ten temat.
Bede wdzieczny za kade info.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Buttons, StdCtrls;
type
TForm1 = class(TForm)
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
Text1: TStaticText;
procedure FormCreate(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TWatek = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
end;
var
Form1: TForm1;
Watek: TWatek;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Watek:=TWatek.Create(true);
Watek.Priority := tpNormal;
Text1.Left:=Form1.Width;
end;
procedure TWatek.Execute;
begin
while not Terminated Do
begin
if (Form1.Text1.Width+Form1.Text1.Left)<0 then Form1.Text1.Left:=Form1.Width else Form1.Text1.Left:=Form1.Text1.Left-1;
sleep(10);
end;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
Watek.Resume;
end;
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
Watek.Suspend;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Watek.Terminate;
Watek.Free;
end;
end.