G
B правой части каждого сообщения есть стрелки ⇧ и ⇩. Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок ✔ в правой части сообщения.
Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе
#include <windows.h>
#include <stdio.h>
#include <conio.h>
int main( void )
{
int i, n;
char ch;
char * str = "я вождь бегущий ручей";
n = strlen( str );
printf( "\n" );
while ( !kbhit() ) {
printf( "\r%s", str );
fflush( stdout );
Sleep( 100 );
ch = str[n - 1];
for ( i = n - 1; i > 0; i-- ) str[i] = str[i - 1];
str[0] = ch;
}
return 0;
}
#include <windows.h>
#include <iostream>
#include <conio.h>
using namespace std;
void main (void)
{
setlocale(LC_ALL,"Russian");
HANDLE Console = GetStdHandle(STD_OUTPUT_HANDLE); //Получим HANDLE стандартного вывода
DWORD dw;
COORD Pos;
Pos.X = 0; Pos.Y = 0;
char *Text = " В этом месте могла бы быть ВАША РЕКЛАМА (codeby.net)"; //Искомый текс
char *ptr = Text; //Указатель на текст что бы с индексами дела не иметь
bool reverse = true; //Флаг для реверса
while(!kbhit())
{
SetConsoleCursorPosition(Console,Pos); //Для позиции курсора в консоле
for (int i=0; i<80; i++) // Отчистка консоли
{
cout<<" ";
}
SetConsoleCursorPosition(Console,Pos);
SetConsoleTextAttribute(Console,0x74); //Для цвета в консоли
cout<<ptr; //Вывод указателя на текст
if (reverse) //Если верес то текст движится с права на лево
ptr++; //Сдвиним казатель на 1 байт (убрав сивол из начала)
else ptr--; //Если текст движется в обратном напровлении указатель свигаем в обратную сторону (увеличивая на символ с конца)
if (strlen(ptr)==0) //Если указатель стал указывать на строку равную 0
reverse = false; //Изменим реверс
else if (strlen(ptr) == strlen(Text)) //Если указатель указывает на искомый тест
reverse = true; //Изменим реверс
Sleep(300); //Задержка
}
}
Зато я могу!DarkKnight125 +1 за юмор=) Поднять репу не могу, потому что уже поднимал)
Только если в понедельник....Спасибо за варианты а можно ли еще вариант для билдера?
Спасибо большое за вашу помощь,буду ждать. Плюсанул бы да не могу.Только если в понедельник....
--------------------
Мне просто интересно... Почему? (Я даже себя не беру в расчет... просто интересно..)Плюсанул бы да не могу.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "frmMain.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
AnsiString RunText = ""; //Исходный текст изменяемый
AnsiString RunText2 = "CodeByNet. Лучший форум по программированию... [A в этом месте могла бы быть ваша реклама]"; //Исходный текст Не изменяемый
AnsiString RunText3 = ""; //Это то что будет писаться в конец, если начало уже зашло за границу
AnsiString Buffer = ""; //Буфер... Пробелами будем заполнять
bool all = false; //Переменная когда RunText == RunText2 и находится в самой дальней точке
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
TCanvas *Canva = StatusBar1->Canvas; //Для удобства заведем указатель на Canvas
//А то код и так слишком длинный, я за это Builder и не люблю
Canva->Font = StatusBar1->Font; //На всякий указжем канвасу визуальный шрифт StatusBarа
Buffer = ""; //Обнулим буферную переменную (в которой наши пробелы промежуточные)
if (!all)//Если флаг False, то заполним RunText пробелами от начала
{
//Пока шинина текска RunText < Клиенской области СтатусБара
while (Canva->TextWidth(RunText) < StatusBar1->ClientWidth)
{
//То дополняем пробелами от начала
RunText = " " + RunText;
}
all = true; //Выставим флаг
}
//Теперь Оконцовка строки
//Пока ширина текста RunText+Buffer+RunText3 < Клиенской области, то
while ((Canva->TextWidth(RunText) + Canva->TextWidth(Buffer)+ Canva->TextWidth(RunText3)) < StatusBar1->ClientWidth)
{
//Добавляем Buffer пробелами (Буфер у нас в середине стоит)
Buffer+=" ";
}
//Это просто в лаблу запишим.. Для визуальности
Label1->Caption = RunText;
StatusBar1->Repaint(); //Скажим что StatusBar следует перерисовать
//Уберем первый символ и RunText
RunText = RunText.SubString(2,RunText.Length());
//Если длина RunText стала 0, то
if (RunText.Length() == 0)
{
all = false; //Выставим флаг
RunText = RunText2; //Присвоим исходный текст
RunText3 = ""; //Обнулим RunText3
}
//Если длина RunText < Исходного текста, то нужно записать RunText3
if (RunText.Length() < RunText2.Length())
{
//Запишим в RunText3 количество символов из исх. текста равная разницы дли RunText2 и RunText
RunText3 = RunText2.SubString(0,RunText2.Length()- RunText.Length());
}
//Можно и без этого
//Application->ProcessMessages();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StatusBar1DrawPanel(TStatusBar *StatusBar,
TStatusPanel *Panel, const TRect &Rect)
{
//Отрисуем на канве
StatusBar->Canvas->TextOutA(0,10,RunText+Buffer+RunText3);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
StatusBar1->DoubleBuffered = true;
Form1->StatusBar1->ControlStyle << csOpaque;
RunText = RunText2; //По умолчанию
}
//---------------------------------------------------------------------------
Да и если надо в конце начало текста (того который отрезан в левой стороне)Правильно ли я понял , используется вызов пробелов ,а потом текст обновляется и по новой?
Обучение наступательной кибербезопасности в игровой форме. Начать игру!