Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Прокрутка текста


Автор: taxir 10.5.2007, 23:35
Добрый вечер Ребята! Нужна ваша помощь в написании проги. Я тока начинаю на С++ нужна квалифицированая помощь, кто чем может плиз.Суть проги в том что она должна висеть постоянно в инете и скачивать через определенное время скажем каждые 5 минут контент с одной и тойже вебстраницы и перелопатив ее превратить в нужный текст. А этот текст нужно какимто образом вывести на экран крупным шрифтом и прокручивать пока не истечет 5 минут и потом опять по новой уже новый текст итд постоянно. Направление, Размер шрифта и скорость прокрутки чтобы можно было менять.Вот привожу код первой части, которая получает контент с вебстраницы в текстовое поле. 

void CHTTPDlg::OnButton1() 
{
    // TODO: Add your control notification handler code here
    CInternetSession *pInternetSession;
    pInternetSession=new CInternetSession();
    if (!pInternetSession)
    {
        AfxMessageBox("Internet none",MB_OK);
        return;
    }
    CStdioFile *pFile = NULL;
    char *buffer;
    buffer=new char[100000];
    pFile=pInternetSession->OpenURL(CString("http://www.livescore.com"));
    pFile->Read(buffer,100000);
    m_text=CString(buffer,100000);
    UpdateData(false);
    pFile->Close();
    pInternetSession->Close();    
}

Пожалуста помогите продолджить написание проги. Эсть вопросы!
1) как мне сделать чтобы этот код получал контент с вебстраницы скажем постоянно автоматически через определенное время?
2) как прокручивать этот текст на весь экран?

Заранее благодарен всем кто поможет ответить на эти вопросы....плиз с примерами пожалуста!

Автор: Earnest 11.5.2007, 07:29
Цитата(taxir @  11.5.2007,  00:35 Найти цитируемый пост)
1) как мне сделать чтобы этот код получал контент с вебстраницы скажем постоянно автоматически через определенное время?

Поставь таймер и запускай этот код при получении сообщения от таймера

Цитата(taxir @  11.5.2007,  00:35 Найти цитируемый пост)
2) как прокручивать этот текст на весь экран?

Хоть убейте, не пойму, что значит "прокручивать текст на весь экран"
Какой экран? Ты же вроде не в консоли. А если выведешь техт в обычный EDIT, то он сам тебе все покажет и прокрутит, только поставь нужные флаги.

Автор: taxir 11.5.2007, 08:17
Earnest спасибо за ответ!
Цитата

Поставь таймер и запускай этот код при получении сообщения от таймера

А можно примером показать как это сделать.....пожалуста!
Цитата

Хоть убейте, не пойму, что значит "прокручивать текст на весь экран"
Какой экран? Ты же вроде не в консоли. А если выведешь техт в обычный EDIT, то он сам тебе все покажет и прокрутит, только поставь нужные флаги.

Щас попробую объяснить,что имел ввиду под "прокручивать текст на весь экран"....
значит после того как получим контент и возьмем нужную инфу из него нада этот текст как бы построчно прокручивать сверху вниз или наоборот и это должно быть автоматом....это примерно как "бегущая строка" тока сверху вниз или снизу вверх....поэтому нужно сделать регулятор скорости прокрутки и размер шрифта....

Автор: taxir 11.5.2007, 08:57
Немогу найти на панели "Controls" таймера smile 

Автор: ama_kid 11.5.2007, 09:00
Цитата(taxir @  11.5.2007,  08:57 Найти цитируемый пост)
Немогу найти на панели "Controls" таймера

http://msdn2.microsoft.com/en-us/library/ms644901.aspx
http://msdn2.microsoft.com/en-us/library/ms644906.aspx

Автор: taxir 11.5.2007, 09:36
Цитата

Using Timers
SetTimer 

Спасибо конечно.......но не все пока понятно......прошу вас как этот таймер с моим кодом связать на примере плииииииз....вот допустим этот код.....
Цитата

CInternetSession *pInternetSession;
    pInternetSession=new CInternetSession();
    if (!pInternetSession)
    {
        AfxMessageBox("Internet none",MB_OK);
        return;
    }
    CStdioFile *pFile = NULL;
    char *buffer;
    buffer=new char[100000];
    pFile=pInternetSession->OpenURL(CString("http://www.livescore.com"));
    pFile->Read(buffer,100000);
    m_text=CString(buffer,100000);
    UpdateData(false);
    pFile->Close();
    pInternetSession->Close(); 

Автор: zkv 11.5.2007, 11:49
taxir, ты в МСДН этот пример видел:
Цитата

This example uses CWnd::SetTimer, CWnd::OnTimer, and CWnd::KillTimer to handle WM_TIMER messages. A timer is set up to send a WM_TIMER message to the main frame window every 2 seconds in OnStartTimer. OnStopTimer will stop the timer by calling CWnd::KillTimer. OnTimer was set up to handle WM_TIMER messages for the main frame window. In this example, the PC speaker will beep every 2 seconds.

Код

void CMainFrame::OnStartTimer() 
{
   m_nTimer = SetTimer(1, 2000, 0);
}

void CMainFrame::OnStopTimer() 
{
   KillTimer(m_nTimer);   
}

void CMainFrame::OnTimer(UINT nIDEvent) 
{
   MessageBeep(0xFFFFFFFF);   // Beep

   // Call base class handler.
   CMDIFrameWnd::OnTimer(nIDEvent);
}

 тебе надо лишь MessageBeep(0xFFFFFFFF);  на нужные действия заменить, и интервал другой поставить. 
Удачи!

Автор: taxir 11.5.2007, 12:14
zkv, спасибо за объяснение и код.....щас попробую!!!!!Ребята всем спасибооооо!!!практически можно сказать с таймером все ясно!!!!А как быть со второй частью моей программы?Нужно чтобы полученный текст выводился на весь экран построчно (я имею ввиду у меня разрешение экрана 800*600) и автоматом крутился до следующего обращения к вебстраничке итд до бесконечности......буду благодарен за любые сообщения относительно этого!!!

Автор: zkv 11.5.2007, 12:36
Цитата(taxir @  11.5.2007,  12:14 Найти цитируемый пост)
Нужно чтобы полученный текст выводился на весь экран построчно (я имею ввиду у меня разрешение экрана 800*600)

те типа полноэкранного режима надо что то организовать? Никаких фреймов, элементов управления и прочего не будет, а будет только текст?

Автор: taxir 11.5.2007, 12:55
ДА ИМЕННО ТОЛЬКО ТЕКСТ!

Автор: zkv 11.5.2007, 13:04
taxir, посмотри в http://www.codeproject.com/dialog/Viewsinfullscreenmode.asp

Автор: taxir 11.5.2007, 14:09
zkv, спасибо за интересную ссылку!Скачал и протестил код!Супер именно так как надо полноэкранный режим!Остается всего 1 вопрос.....как мне прокрутить таки этот текст, который будет помещен в это окно?????это должно быть автоматом, с определенным размером шрифта, скоростью и направлением прокрутки (снизу вверх или наоборот по желанию) и прокрутка должна быть как в ТЕЛЕТЕКСТЕ...то есть она должна идти постоянно....текст какбы должен бесконечно двигатся снизу вверх или наоборот и когда будет конец текста он должен повторится опять образуя бесконечный цикл пока таймер не примет новый контент с вебстранички....хотелось бы узнать как мона это сделать на примере!

Автор: SenkraD 11.5.2007, 14:19
Ну посылай сообщений скрол бару и обрабатывай его и если уже конец документа и нету новых данных то переходи на начало документа и повторяй процедуру

Автор: zkv 11.5.2007, 14:28
Цитата(taxir @  11.5.2007,  14:09 Найти цитируемый пост)
это должно быть автоматом,

автопрокрутку вешаем на таймер
Цитата(taxir @  11.5.2007,  14:09 Найти цитируемый пост)
он должен повторится опять образуя бесконечный цикл

ну тут надо применить фантазию ;-) 
Цитата(taxir @  11.5.2007,  14:09 Найти цитируемый пост)
цикл пока таймер не примет новый контент с вебстранички....

а куда вставлять принятый текст? В текущую позицию прокрутки?

Автор: taxir 11.5.2007, 14:37
SenkraD-у 
Цитата

Ну посылай сообщений скрол бару и обрабатывай его и если уже конец документа и нету новых данных то переходи на начало документа и повторяй процедуру 
 можешь набрасать примерный код или ссылку дать как это организовать....плиз

zkv, 
Цитата

а куда вставлять принятый текст? В текущую позицию прокрутки? 

нет....нужно предыдущий текст полностью удалить и вместо него новый принятый....

Автор: SenkraD 11.5.2007, 14:49
так щас не брошу - занят, а вот примерно делается так
1. ну наследуеш от CScrollView
2. Устанавливаеш таймер
3. в обработке события WM_TIMER вызываеш SetScrollPos
4. Перегружаеш OnVScroll

Вообщем кажись так

Автор: taxir 11.5.2007, 14:56
Ок...Спасиибоооо!Попробую!

Автор: taxir 12.5.2007, 09:10
Доброе утро! Есть проблема....как можно в EDIT выводить текст начиная снизу и чтобы при добавлении новой строки первая строка и последующие поднимались снизу вверх?

Автор: Earnest 13.5.2007, 08:11
Никак, разве что навставляешь пустых строк в начало.
Чтобы добавить новую строку, не переписывая весь текст, можно поступить так: поставить Selection в конце и сделать его пустым. А потом вызвать ReplaceSel с новой строкой.
Чтобы текст прокрутился, если превысл размеры эдита, просто постаь текущую позицию в самом конце.

Автор: taxir 13.5.2007, 11:00
Спасибо за ответ! smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)