Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.02.12;
Скачать: [xml.tar.bz2];

Вниз

Бегущая строка   Найти похожие ветки 

 
Dead.MorozZ   (2006-01-21 22:03) [0]

У меня такая ситуация строка полностью не влазет в метку, поэтому решил сделать ее бегущей.
Как можно сделать бегущую строку по типу как в WinAmp"e. Чтоб после того, как последняя часть строки выползла процесс пошел в другую сторону(строка побежала обратно) а добежав до другого конца снова поворачивала и т.д. ...
Только, чтоб это обязательно происходило в Лейбле


 
Кефир87 ©   (2006-01-21 23:02) [1]

В моем винампе 2,91 строка просто цикоическая. Там все просто:
Сохраняем первый знак в C
Удаляем первый знак
Ставим в конец строки C

если пораскинуть мозгой, то все получится 8)


 
з. танька   (2006-01-21 23:04) [2]

плюхаешь на форму таймер, в обработчике OnTimer пишеш:
 label1.Caption := Copy(Label1.Caption, 2, MAXINT) + Copy(Label1.Caption, 1, 1);


 
Dead.MorozZ   (2006-01-21 23:07) [3]

Это я сам умею не могу придумать как сделать чтоб строка когда уже полностью вылезла ползла обратно, т.е. сначала как ты сказал, а когда вылезет послндний символ от первоначальной строки удалялся первый символ а вместо него вставлялся последний


 
RunningString   (2006-01-22 19:39) [4]


VAR I:WORD;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 IF I>2*Length(Label1.Caption) THEN I:=0;
 IF (I>Length(Label1.Caption)) {AND (I<Length(Label1.Caption))} THEN
 BEGIN
   label1.Caption := Copy(Label1.Caption, 2, Length(Label1.Caption)-1) + Copy(Label1.Caption, 1, 1);

   I:=I+1;
 END
 ELSE
 BEGIN
   label1.Caption := Copy(Label1.Caption, Length(Label1.Caption), 1)+Copy(Label1.Caption, 1, Length(Label1.Caption)-1);
   I:=I+1;
 END;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
I:=0;
Label1.Caption:="12345 ";
Timer1.Interval:=1000;
end;


 
RunningString   (2006-01-22 19:56) [5]

Corrected:

VAR I:WORD;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 IF I>2*Length(Label1.Caption)-1 THEN I:=0;
 IF (I>=Length(Label1.Caption)) THEN
   label1.Caption := Copy(Label1.Caption, 2, Length(Label1.Caption)-1) + Copy(Label1.Caption, 1, 1)
 ELSE
   label1.Caption := Copy(Label1.Caption, Length(Label1.Caption), 1)+Copy(Label1.Caption, 1, Length(Label1.Caption)-1);
 I:=I+1;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 I:=0;
 Label1.Caption:="Test   ";
 Timer1.Interval:=500;
end;


 
Dead.MorozZ   (2006-01-22 20:39) [6]

Большой Сенкс!!!


 
Dead.MorozZ   (2006-01-22 21:18) [7]

А как сделать так что:
если в видимой части Метки еще есть место для символов забивать это место пробелами, а потом наоборот убирать пробелы так чтобы получился эффект перемещения строки от одного края Метки к другому??


 
Dead.MorozZ   (2006-01-22 21:40) [8]

ЗЫ: Первая прога работала лучше:)


 
RunningString   (2006-01-22 22:37) [9]


procedure TForm1.Timer1Timer(Sender: TObject);
begin
 IF I>P*2-1 then i:=0;
 IF I<p  THEN
 label1.Caption := Copy(Label1.Caption, Length(Label1.Caption), 1)+Copy(Label1.Caption, 1, Length(Label1.Caption)-1)
 ELSE
 label1.Caption := Copy(Label1.Caption, 2, Length(Label1.Caption)-1) + Copy(Label1.Caption, 1, 1);
 I:=I+1;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
I:=0;
Label1.Caption:="Test     ";
IF pos(" ",Label1.Caption)=0 THEN Label1.Caption:=Label1.Caption+" ";
P:=Length(Label1.Caption)+1-pos(" ",Label1.Caption);
Timer1.Interval:=500;
end;


 
Dead.MorozZ   (2006-01-22 23:14) [10]

Что здесь означает р и где указывается длина метки??
И еще как на Паскале написать
если длина строки (Label1.Caption) больше 10 символов то.....  ?????


 
RunningString   (2006-01-23 00:09) [11]

p-это кол-во  пробелов в конце строки.

Corrected:

VAR I,P:WORD;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 IF I>P*2-1 then i:=0;
 IF I<p  THEN
 label1.Caption := Copy(Label1.Caption, Length(Label1.Caption), 1)+Copy(Label1.Caption, 1, Length(Label1.Caption)-1)
 ELSE
 label1.Caption := Copy(Label1.Caption, 2, Length(Label1.Caption)-1) + Copy(Label1.Caption, 1, 1);
 I:=I+1;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Label1.Caption:="1 2 3 4 5                    ";
FOR i:=Length(Label1.Caption) DOWNTO 1 DO
IF Label1.Caption[i]<>" " THEN
BEGIN
  P:=Length(Label1.Caption)-i;
  BREAK;
END;
 Timer1.Interval:=100;
 I:=0;
end;


>И еще как на Паскале написать
>если длина строки (Label1.Caption) больше 10 символов то.

IF Length(Label1.Caption) > 10 THEN BEEP;


 
Dead.MorozZ   (2006-01-23 01:20) [12]


> procedure TForm1.Timer1Timer(Sender: TObject);
> begin
>  IF I>2*Length(Label1.Caption)-1 THEN I:=0;
>  IF (I>=Length(Label1.Caption)) THEN
>    label1.Caption := Copy(Label1.Caption, 2, Length(Label1.
> Caption)-1) + Copy(Label1.Caption, 1, 1)
>  ELSE
>    label1.Caption := Copy(Label1.Caption, Length(Label1.
> Caption), 1)+Copy(Label1.Caption, 1, Length(Label1.Caption)-
> 1);
>  I:=I+1;
> end;
>
> procedure TForm1.FormCreate(Sender: TObject);
> begin
>  I:=0;
>  Label1.Caption:="Test   ";
>  Timer1.Interval:=500;
> end;

тут еще один баг:
если кепшон присвоить 123 то результаты после каждого интервала Таймера:
123
312
231
123
312
123<<<<сдесь упускается 231

и лучше бы выглядело еслиб строка бежала вперед т.е:
123
231
312
123
312
231
помоги PlzZ


 
RunningString   (2006-01-23 02:11) [13]

Так ?

VAR I:WORD;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
IF I<Length(Label1.Caption) THEN
  label1.Caption := Copy(Label1.Caption, 2, Length(Label1.Caption)-0) + Copy(Label1.Caption, 1, 1)
ELSE IF I>=Length(Label1.Caption) THEN
 label1.Caption := Copy(Label1.Caption, Length(Label1.Caption), 1)+Copy(Label1.Caption, 1, Length(Label1.Caption)-1);
I:=I+1;
IF I>=2*Length(Label1.Caption) THEN I:=0;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Label1.Caption:="123";
I:=0;
Timer1.Interval:=1000;
end;


 
Dead.MorozZ   (2006-01-23 11:52) [14]

А как удалить из строки последние 4 символа??
(навсегда удалить:)


 
Dead.MorozZ   (2006-01-23 13:07) [15]

Как написать на Паскале:
Если длина строки, присваиваемой Label1.Caption < 10,
то дополнять эту строку пробелами до тех пор пока ее длина строки не станет = 10 ???


 
Ega23 ©   (2006-01-23 13:27) [16]

На, не жалко. Как в пакет собрать, надеюсь, разберёшься.

unit ScrLabel;

interface

uses
 Windows, Classes,
 Controls, StdCtrls;

{$R TSCROLLABLELABEL.DCR}

type
 TCustomScrollableLabel=class(TLabel)
 private
   fCaptureX: Integer;
   fOffset: Integer;
   fScrolling: Boolean;
 protected
   procedure SetOffset(Value: Integer); virtual;
   procedure DoDrawText(var Rect: TRect; Flags: Longint); override;
   procedure DblClick; override;
   procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
   procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
   procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
 public
   constructor Create(AOwner: TComponent); override;
   property Offset: Integer read fOffset write SetOffset;
   property Scrolling: Boolean read fScrolling;
 end;

 TScrollableLabel=class(TCustomScrollableLabel);

procedure Register;

implementation

procedure Register;
begin
 RegisterComponents("Additional", [TScrollableLabel]);
end;

{ TCustomScrollableLabel }

constructor TCustomScrollableLabel.Create(AOwner: TComponent);
begin
 inherited;
 fOffset:=0;
 fScrolling:=False;
end;

procedure TCustomScrollableLabel.DblClick;
begin
 inherited;
 Offset:=0;
end;

procedure TCustomScrollableLabel.DoDrawText(var Rect: TRect; Flags: Integer);
begin
 Rect.Left:=Rect.Left+fOffset;
 inherited;
end;

procedure TCustomScrollableLabel.MouseDown(Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 inherited;
 fScrolling:=Button=mbLeft;
 fCaptureX:=X-Offset;
end;

procedure TCustomScrollableLabel.MouseMove(Shift: TShiftState; X,
 Y: Integer);
begin
 inherited;
 if not fScrolling then
   Exit;
 Offset:=X-fCaptureX;
end;

procedure TCustomScrollableLabel.MouseUp(Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 fScrolling:=False;
 inherited;
end;

procedure TCustomScrollableLabel.SetOffset(Value: Integer);
var
 CanvasLeft, CanvasWidth, CaptionLeft, CaptionWidth: Integer;
begin
 if Value=fOffset then
   Exit;
 with Canvas do
 begin
   CanvasLeft:=ClipRect.Left;
   CanvasWidth:=ClipRect.Right-CanvasLeft;
   CaptionWidth:=TextWidth(Caption);
 end;
 case Alignment of
   taRightJustify:
     CaptionLeft:=(CanvasWidth-CanvasLeft)-CaptionWidth;
   taCenter:
     CaptionLeft:=((CanvasWidth-CanvasLeft)-CaptionWidth) div 2;
   else
     CaptionLeft:=CanvasLeft;
 end;
 if Value<(CanvasLeft+CanvasWidth)-(CaptionLeft+CaptionWidth) then
   Value:=(CanvasLeft+CanvasWidth)-(CaptionLeft+CaptionWidth);
 if Value>CanvasLeft-CaptionLeft then
   Value:=CanvasLeft-CaptionLeft;
 fOffset:=Value;
 Repaint;
end;

end.


 
Dead.MorozZ   (2006-01-23 14:34) [17]

Зачем мне целый компонент???
Мне все казалось гораздо проще:)
В цикле прибавлять к строке (если она меньше 10) пробелы до тех пор пока она не станет равной 10:)

Я просто с Паскалем не очень, а нам надо проект скоро сдавать на Делфи.
Помогите PlzZ


 
RunningString   (2006-01-23 15:42) [18]

>А как удалить из строки последние 4 символа??
>(навсегда удалить:)


procedure TForm1.FormCreate(Sender: TObject);
VAR s:string;
begin
 s:="12345678901234";
 DELETE(s,Length(s)-3,4);
 Caption:=s;
end;


>Как написать на Паскале:
>Если длина строки, присваиваемой Label1.Caption < 10,
>то дополнять эту строку пробелами до тех пор пока ее длина строки не станет = 10 ???


procedure TForm1.FormCreate(Sender: TObject);
VAR s:string;
begin
 s:="1234";
 WHILE Length(s)<10 DO s:=s+" ";
 Caption:=s+"  "+inttostr(Length(s));
end;


 
Ega23 ©   (2006-01-23 15:51) [19]

А если размер фонта поменялся, тогда что?


 
Dead.MorozZ   (2006-01-24 14:12) [20]


> procedure TForm1.FormCreate(Sender: TObject);
> VAR s:string;
> begin
>  s:="1234";
>  WHILE Length(s)<10 DO s:=s+" ";
>  Caption:=s+"  "+inttostr(Length(s));
> end;



> VAR I:WORD;
>
> procedure TForm1.Timer1Timer(Sender: TObject);
> begin
> IF I<Length(Label1.Caption) THEN
>   label1.Caption := Copy(Label1.Caption, 2, Length(Label1.
> Caption)-0) + Copy(Label1.Caption, 1, 1)
> ELSE IF I>=Length(Label1.Caption) THEN
>  label1.Caption := Copy(Label1.Caption, Length(Label1.Caption),
>  1)+Copy(Label1.Caption, 1, Length(Label1.Caption)-1);
> I:=I+1;
> IF I>=2*Length(Label1.Caption) THEN I:=0;
> end;
>
> procedure TForm1.FormCreate(Sender: TObject);
> begin
> Label1.Caption:="123";
> I:=0;
> Timer1.Interval:=1000;
> end;


Как можно объеденить два куска программы в одно:
Сначала забить до конца строки пробелами а потом
Перемещать? А то когда я их объединял получилось совсем не то что я ожидал:) Помогите PlzZ


 
Shirson ©   (2006-01-24 14:52) [21]

>Dead.MorozZ  
>Мне все казалось гораздо проще:)
>В цикле прибавлять к строке (если она меньше 10) пробелы до тех пор >пока она не станет равной 10:)

uses StrUtils;
procedure TForm1.FormCreate(Sender: TObject);
var s:string;
begin
s:="1234";
Caption:=s+DupeString(" ",10-length(s));
end;



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.02.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.055 c
6-1130963292
xman
2005-11-02 23:28
2006.02.12
PING


1-1137167360
ахмед
2006-01-13 18:49
2006.02.12
как узнать размер текста в memo


1-1137068572
oleg__
2006-01-12 15:22
2006.02.12
Формат даты


3-1134258885
orbal
2005-12-11 02:54
2006.02.12
DBGridEh - PickList


4-1133045302
Volf_555
2005-11-27 01:48
2006.02.12
Как завершить процесс, зная откуда он запущен?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский