Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Бегущая строка [D7, WinXP]


Демидрол ©   (2005-08-19 16:06:00) 

Подскажите где ошибка.. Заранее спасибо.
[Error] Unit1.pas(38): Left side cannot be assigned to

procedure TForm1.Timer1Timer(Sender: TObject);
const
 LengthGoString = 10;
 Gostring = 'Этот код был взят с проекта Delphi World'+
 ' Выпуск 2002 - 2003! Этот код б';
 // Повторить столько символов - сколько в LengthGoString
const
 i: Integer = 1;
begin
 Label1.Caption := Copy(GoString, i, LengthGoString);
 Inc(i);
 if Length(GoString) - LengthGostring < i then
   i:=1;
end;


TStas   (2005-08-19 18:56:00) [1]

Реально работает
unit RunningText;

interface

uses
 SysUtils, Classes, Controls, StdCtrls, ExtCtrls;

type
 TRunningText = class(TCustomLabel)
 private
   { Private declarations }
    FTimer:TTimer;
   FText: String;  //Текст, который и будет бежать
   FTextLength: Byte; //Длинна бегущего текста
   FTextVelosity: Byte; //Букв в секунду
   procedure SetText(const Value: String);
   procedure SetTextLength(const Value: Byte);
   procedure SetTextVelosity(const Value: Byte);
   procedure Move(Sender:TObject);
 protected
   { Protected declarations }

 public
   { Public declarations }
   constructor Create(AOwner:TComponent); override;
   destructor Destroy; override;
   procedure RunText; //Запускает бег текста
   procedure StopText; //Останавливает текст
   published
   { Published declarations }
     property Color;
     property Font;
     property ParentColor;
     property ParentFont;
     property ParentShowHint;
     property Transparent;
     property Visible;

     property Text:String read FText write SetText;
     property TextLength:Byte read FTextLength write SetTextLength;
     property TextVelosity:Byte read FTextVelosity write SetTextVelosity;
 end;

procedure Register;

implementation

procedure Register;
begin
 RegisterComponents('mine', [TRunningText]);
end;

constructor TRunningText.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Self.AutoSize:=true;
FTimer:=TTimer.Create(Self);
FTimer.Enabled:=false;
FTimer.Tag:=0;
FTimer.OnTimer:=Move;
FText:='RunningText';
FTextLength:=5;
TextVelosity:=5;

end;

destructor TRunningText.Destroy;
begin
FTimer.Free;
inherited Destroy;
end;

procedure TRunningText.Move(Sender:TObject);
var
 str:String;
 n1, n2:Integer;
begin
n1:=FTimer.Tag;
inc(n1);
n1:=n1 mod Length(Text);
FTimer.Tag:=n1; //Делаю так, чтобы в теге хранился нужный n1
inc(n1); //Но использую на единицу увеличенный
n2:=n1+FTextLength;
str:=Text;
while Length(str)<n2 do str:=str+' '+Text; //Приписываю нужное количество раз повторенный текст
Self.Caption:=Copy(str, n1, FTextLength);
end;

procedure TRunningText.RunText;
begin
FTimer.Enabled:=true;
end;

procedure TRunningText.SetText(const Value: String);
begin
FTimer.Tag:=0; //При записи обнуляю тег
FText := Value;
If FText='' then FText:='*';
end;

procedure TRunningText.SetTextLength(const Value: Byte);
begin
FTextLength := Value;
if FTextLength<5 then FTextLength:=5; //Меньше 5 символов не бежать
end;

procedure TRunningText.SetTextVelosity(const Value: Byte);
begin
FTextVelosity := Value;
if FTextVelosity<1 then FTextVelosity:=1;
if FTextVelosity>20 then FTextVelosity:=20;
FTImer.Interval:=round(1000/FTextVelosity); //Устанавливаю интервал таймера
end;

procedure TRunningText.StopText;
begin
FTimer.Enabled:=false;
end;

end.


Savek   (2005-08-19 17:01:00) [2]

По-моему переменную I надо объявить не в процедуре а в модуле, чтобы она сохраняла предыдущее значение после выхода из процедуры


Демидрол   (2005-08-19 16:26:00) [3]

Eraser ©   (19.08.05 16:22) [5]
const убери!
{-----------------------------}
Действительно нужно было убрать, но строка не бегает :(


Eraser   (2005-08-19 16:26:00) [4]

Демидрол   (19.08.05 16:26) [6]

Ну тут уж алгоритм дорабатывать надо...


Eraser   (2005-08-19 16:22:00) [5]

Демидрол   (19.08.05 16:20) [4]

const убери!
Константы менять нельзя, на то они и константы.


Демидрол   (2005-08-19 16:20:00) [6]

По разному пробывал не получается. Подскажите как ее написать
чтобы реально работала.


Джо   (2005-08-19 16:16:00) [7]


>  [2] Демидрол   (19.08.05 16:10)
> Подскажите если не трудно, где именно ошибка.

В 2-х местах:
Inc(i);
и
i:=1;


Демидрол   (2005-08-19 16:10:00) [8]

Подскажите если не трудно, где именно ошибка.


Eraser   (2005-08-19 16:07:00) [9]

Демидрол   (19.08.05 16:06)
Подскажите где ошибка


В 38 строке.


Наверх

Титульная страница Поиск, карта сайта Написать письмо