powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Господа, нужна реальная помощь!
16 сообщений из 16, страница 1 из 1
Господа, нужна реальная помощь!
    #33808228
el'f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
создаю ActiveX (+прил. VС++6). так вот об ActiveX:
делаю часы. первый ActiveX, поэтому маленько ещё не доганяю что к чему
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
void CMCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{ ...
char CurrentTime[ 30 ] ;
struct tm *newtime;
long Time1;     
time( &Time1);
newtime=localtime(&Time1);
strcpy(CurrentTime, asctime(newtime));
CurrentTime[ 24 ]=' '; 
CurrentTime[ 25 ] =  0 ;
pdc->ExtTextOut(rcBounds.left,rcBounds.top, ETO_CLIPPED, rcBounds, 
	CurrentTime, strlen(CurrentTime), NULL);
}
//---------------------------
int CMyClockCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
if (COleControl::OnCreate(lpCreateStruct) == - 1 ) return - 1 ;
SetTimer(  1 , (UINT)m_updateInterval, NULL );
return  0 ;
}
//----------------------------
void CMyClockCtrl::OnTimer(UINT nIDEvent) 
{
InvalidateControl();
COleControl::OnTimer(nIDEvent);
}
этот код работает прекрасно: он исходя из системного времени выводит на экран свое
НО: мне нужно чтобы не было привязки к системному времени. чтобы отсчет начинался с устаноленного в программе времени. в самом проекте на VC я получаю строку начального времени вида:
Код: plaintext
m_str=str;
где str соответственно например "12:34:56"
ВОПРОС: ГДЕ нужно изменить и ЧТО чтобы отсчет начался с этого значения и что бы не обращалось внимание на системное время?
нужно изменить только в OnDraw? или ещё где-то?
если кто знает, не откажите в помощи пажалуста!
Заранее спасибо всем откликнувшимся!
...
Рейтинг: 0 / 0
Господа, нужна реальная помощь!
    #33808624
Maksim UM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужно в OnCreate брать время time( &Time1) один раз,
затем увеличивать по таймеру.
А в OnDraw только выводить значение.
PS проблема только в том, что таймер необязательно будет срабатывать,
например, 1 раз в секунду, может 1.0001 с.
В таймере можно использовать различие между текущим и
предыдущим значениями, например под виндой можно использовать
GetTickСount
...
Рейтинг: 0 / 0
Господа, нужна реальная помощь!
    #33808730
el'f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а если можно, напишите конкретно что надо написать
...
Рейтинг: 0 / 0
Господа, нужна реальная помощь!
    #33809196
Maksim UM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что-то вроде (если по простому):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
void CMCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{ ...
char CurrentTime[ 30 ] ;
struct tm *newtime;
newtime=localtime(&Time1);
strcpy(CurrentTime, asctime(newtime));
CurrentTime[ 24 ]=' '; 
CurrentTime[ 25 ] =  0 ;
pdc->ExtTextOut(rcBounds.left,rcBounds.top, ETO_CLIPPED, rcBounds, 
	CurrentTime, strlen(CurrentTime), NULL);
}


int CMyClockCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
if (COleControl::OnCreate(lpCreateStruct) == - 1 ) return - 1 ;
time( &Time1); // Time1 - глобальный
SetTimer(  1 , (UINT)m_updateInterval, NULL );
SetTimer(  2 ,  1000 , NULL ); // раз в секунду срабатывает
return  0 ;
}

void CMyClockCtrl::OnTimer(UINT nIDEvent) 
{
if (nIDEvent== 2 ) {Time1++;}
InvalidateControl();
COleControl::OnTimer(nIDEvent);
}

...
Рейтинг: 0 / 0
Господа, нужна реальная помощь!
    #33809197
el'f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я не понял: как в OnCreate брать время time( &Time1) один раз, а
затем увеличивать по таймеру ?
...
Рейтинг: 0 / 0
Господа, нужна реальная помощь!
    #33809242
Maksim UM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, взять один раз время и увеличивать каждую секунду.
Тогда счетчик будет независим от системных часов.
Но гарантии, что OnTimer будет срабатывать 1 раз в с нет.
а что непонятно-то?
...
Рейтинг: 0 / 0
Господа, нужна реальная помощь!
    #33809245
el'f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ой, я не видел ответ, сейчас попробую...
...
Рейтинг: 0 / 0
Господа, нужна реальная помощь!
    #33809333
el'f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я всё это написал, при тестировании отдельно от проекта ActiveX работает так же - то есть показывает системное время.
у меня есть вопрос: как передать сформированную строку строкового типа из проекта в ActiveX?
...
Рейтинг: 0 / 0
Господа, нужна реальная помощь!
    #33809415
el'f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кажется понял, сейчас попробую сделать. если не получится, то можно ещё спрошу? :)
...
Рейтинг: 0 / 0
Господа, нужна реальная помощь!
    #33809616
el'f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сделал я что бы в моем ActiveX выводилась ещё и строка из VC (напр: "12:34:45")
сейчас пока мой метод OnDraw имеет вид:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
char CurrentTime[ 30 ] ;
struct tm *newtime;
time(&Time1);	 
newtime=localtime(&Time1);
strcpy(CurrentTime, asctime(newtime));
CurrentTime[ 24 ]=' ';
CurrentTime[ 25 ] =  0 ;     
pdc->ExtTextOut(rcBounds.left,rcBounds.top, ETO_CLIPPED, rcBounds, 
		CurrentTime, strlen(CurrentTime), NULL);
TEXTMETRIC tm;
CString strCaption = GetText();
pdc->GetTextMetrics(&tm);
pdc->ExtTextOut((rcBounds.left + rcBounds.right)/ 2 ,(rcBounds.top + rcBounds.bottom - tm.tmHeight)/ 2 ,ETO_CLIPPED, rcBounds, strCaption, strCaption.GetLength(),NULL);
сейчас всё выводится в кучу - тикает текущее системное время и рядом показывается строка которую по нормальному нужно использовать в качестве отсчета.
теперь вопрос. что нужно изменить в этом OnDraw (я так понимаю что имено в нем у меня загвоздка), что бы отсчитывалось начиная с этой строки и кстати, мне совсем не нужно что бы показывался год, месяц, дата. мне просто нужно время. как подреставрировать мой код?
...
Рейтинг: 0 / 0
Господа, нужна реальная помощь!
    #33809687
Maksim UM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Время можно получить, например, так
Код: plaintext
1.
sprintf(buf,"%02d:%02d:%02d",newtime->tm_hour,newtime->tm_min,newtime->tm_sec);
...
Рейтинг: 0 / 0
Господа, нужна реальная помощь!
    #33809698
el'f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
написал вместо:
Код: plaintext
strcpy(CurrentTime, asctime(newtime));
Код: plaintext
strcpy(CurrentTime, strCaption);
стало выводиться две одинаковые строки, только то что должно было работать часами, менять значение не хочет. что ещё куда нужно дописать что бы часы заработали?
...
Рейтинг: 0 / 0
Господа, нужна реальная помощь!
    #33809720
el'f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну это если просто на С++ пишешь. а мне то надо именно через activex и VC сделать
...
Рейтинг: 0 / 0
Господа, нужна реальная помощь!
    #33809826
el'f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так как мне сделать чтобы отсчет пошел с этой строки? и время менялось?
...
Рейтинг: 0 / 0
Господа, нужна реальная помощь!
    #33809852
Maksim UM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для получения времени из строки можно использовать функцию
strptime("2001-11-12 18:31:01", "%Y-%m-%d %H:%M:%S", &tm);
...
Рейтинг: 0 / 0
Господа, нужна реальная помощь!
    #33809916
el'f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну получу я это значение, а будет ли оно меняться каждую секунду? или что то все таки в обработчике переделывать нужно?

кстати, на строке
Код: plaintext
strptime("2001-11-12 18:31:01", "%Y-%m-%d %H:%M:%S", &tm);
error: strptime неизвестный идентификатор. библиотека time.h подключена
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Господа, нужна реальная помощь!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]