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

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

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


Starcom ©   (2005-05-22 20:08:00) 

Как мне сделать бегущую строку в StatusBar?
Помогите кто может!
С Уважением Starcom! :-( Плиз...


Andy BitOff   (2005-05-24 15:34:00) [1]


lmz ©   (24.05.05 14:58) [9]
А как сделать чтобы текст двигался не справва на лево, а сверху вниз?

Менять не х, а y. и проверять выход не по Width, а по Height.


lmz   (2005-05-24 14:58:00) [2]

А как сделать чтобы текст двигался не справва на лево, а сверху вниз?


Starcom   (2005-05-24 12:49:00) [3]

Das ist fantastish!

Спасибо всем кто откликнулся на мою просьбу...
А лично Ученику!
Но вариант от Andy BitOff ©, мне наиболее приемлим!

С Уважением Starcom! :-)


Andy BitOff   (2005-05-23 02:35:00) [4]

Вот, минут 15. Не оптимизировал ничего, на скорую руку, так что прошу не пинать. Я не писал универсальный компонент =)

var
 Form1: TForm1;
 x:integer=0;
 PanelIndex:integer=0;
 Str:string='My ScrollBar Text bla-bla-bla';

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
var
 I: Integer;
 bmp:TBitMap;
 a:integer;
begin
 if (StatusBar1.Panels.Count<>0) and (StatusBar1.Panels.Count>=PanelIndex) then begin
   bmp := TBitMap.Create;
   try
     bmp.Width:=StatusBar1.Panels.Items[PanelIndex].Width;
     bmp.Height:=StatusBar1.Height;
     bmp.Canvas.Brush.Color:=StatusBar1.Color;
     bmp.Canvas.Pen.Color:=StatusBar1.Font.Color;
     bmp.Canvas.FillRect(StatusBar1.Canvas.ClipRect);
     if x=-bmp.Canvas.TextWidth(str) then x:=StatusBar1.Panels.Items[PanelIndex].Width;
     bmp.Canvas.TextOut(x,1,Str);
     dec(x);
     a:=0;
     for I:=0 to PanelIndex-1 do begin
       a:=a+StatusBar1.Panels.Items[i].Width;
     end;
     bitblt(StatusBar1.Canvas.Handle,a+3,3,bmp.Width-4,bmp.Height-4,bmp.Canvas.Handle,0,0,SRCCOPY);
   finally
     bmp.Free;
   end;
 end;
end;


Andy BitOff   (2005-05-23 01:22:00) [5]

А я, кстати, и не говорил, что сложно. Я говорил, что красивее. Сложности тут вообще не вижу.


Eraser   (2005-05-23 00:49:00) [6]

Andy BitOff ©   (23.05.05 00:42) [4]

имхо не намного сложнее...

вот тут один товарисч просил сделать чтобы вообще плавный переход пикселей был... ;-)


Andy BitOff   (2005-05-23 00:42:00) [7]

Ну, это не красиво. Красиво попиксельно.


Ученик   (2005-05-22 21:37:00) [8]

>Starcom   (22.05.05 21:17) [2]
Label1.Caption := Copy(Label1.Caption, 2, MaxInt) + Copy(Label1.Caption, 1, 1)

Изначально добавить требуемое количество пробелов


Starcom   (2005-05-22 21:17:00) [9]

Спасибо!
Попробовал бежит!

procedure TForm1.Timer1Timer(Sender: TObject);
with StatusBar1 do
begin
 Panels[0].Text := Copy(Panels[0].Text,2,MaxInt);
end;

Но мне хотелось бы чтобы строка не прерывалась!

С Уважением Starcom! :-}


Ученик   (2005-05-22 20:20:00) [10]

>Starcom   (22.05.05 20:08)  

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Label1.Caption := Copy(Label1.Caption, 2, MaxInt)
end;


Наверх

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