Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
47 / 32 / 9
Регистрация: 05.01.2013
Сообщений: 307
1

Вывод данных в контрол, обновляемый таймером

10.09.2013, 19:03. Показов 2033. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Мне дали задание, в котором нужно сделать несколько Edit Control'ов с возможностью редактирования и таймера, который отсчитывает текущее время работы с программой. Все вроде нормально, но когда я обновляю таймер с помощью
C++
1
UpdateData(FALSE);
, невозможно изменять данные. а так как таймер обновляется каждую секунду, то вводить данные невозможно. Как бы это исправить?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.09.2013, 19:03
Ответы с готовыми решениями:

Вывод Unicode - данных в текстовый контрол.
Из базы данных читаются данные, написанные на разных языках - формат Unicode, ессно. Изначально...

В операции должен использоваться обновляемый запрос. Но он и так обновляемый
Здравствуйте, у кипит мозг. "... .CommandText = "Update ..." - это обновляемый запрос? Dim myC...

Почему запрос не обновляемый и как переделать в обновляемый
Уважаемые форумчане, Помогите переделать запрос в обновляемый UPDATE (SELECT P.ArtikID,...

Работа с таймером и вывод круга
Всем добрый день/вечер/утро! Может у кого-нить есть на примете какая-нить не очень сложная...

13
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
10.09.2013, 20:06 2
Уверены, что здесь точно нужен UpdateData ?
0
47 / 32 / 9
Регистрация: 05.01.2013
Сообщений: 307
10.09.2013, 20:18  [ТС] 3
Если можно как-то по другому, то я не против.

Добавлено через 7 минут
Просто как сделать иначе - я не знаю.
0
Ушел с форума
Эксперт С++
16473 / 7436 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
10.09.2013, 20:32 4
Лучший ответ Сообщение было отмечено tezaurismosis как решение

Решение

Обновить текст в элементе управления, который отображает значение таймера.
CWnd::SetWindowText, например, или отправкой сообщения WM_SETTEXT.
Для этого не нужно обновлять все элементы управления окна.
1
47 / 32 / 9
Регистрация: 05.01.2013
Сообщений: 307
10.09.2013, 20:46  [ТС] 5
Цитата Сообщение от Убежденный Посмотреть сообщение
Обновить текст в элементе управления, который отображает значение таймера.
CWnd::SetWindowText, например, или отправкой сообщения WM_SETTEXT.
Для этого не нужно обновлять все элементы управления окна.
А как это сделать? А то я не очень разбираюсь еще(
0
Заблокирован
Автор FAQ
11.09.2013, 02:46 6
Цитата Сообщение от Pepsy Посмотреть сообщение
невозможно изменять данные. а так как таймер обновляется каждую секунду, то вводить данные невозможно. Как бы это исправить?
- убивай таймер когда делаешь ввод, скажем в обработчике события WM_LBTN_CLICK пропиши KillTimer а после ввода снова запускай таймер, скажем обрабатывай нажате Enter, это как раз дефолтно делает CDialog::OnOK
0
47 / 32 / 9
Регистрация: 05.01.2013
Сообщений: 307
11.09.2013, 12:41  [ТС] 7
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- убивай таймер когда делаешь ввод, скажем в обработчике события WM_LBTN_CLICK пропиши KillTimer а после ввода снова запускай таймер, скажем обрабатывай нажате Enter, это как раз дефолтно делает CDialog::OnOK
Это означает просто останавливать таймер при клике по форме для ввода данных, а потом восстанавливать? Но ведь тогда во время редактирования таймер будет попросту не работать?
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
11.09.2013, 13:00 8
Не будет. Наиболее удачный способ тебе предложил Убежденный; ну а выбор, естественно, за тобой.
0
47 / 32 / 9
Регистрация: 05.01.2013
Сообщений: 307
11.09.2013, 13:10  [ТС] 9
Цитата Сообщение от CheshireCat Посмотреть сообщение
Не будет. Наиболее удачный способ тебе предложил Убежденный; ну а выбор, естественно, за тобой.
Мне тоже он понравился, но повторюсь :
Цитата Сообщение от Pepsy Посмотреть сообщение
А как это сделать? А то я не очень разбираюсь еще(
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
11.09.2013, 13:34 10
Лучший ответ Сообщение было отмечено tezaurismosis как решение

Решение

Дык, эта..... Где-то так:
C++
1
2
3
4
5
6
7
8
9
КлассТвоегоОкна::OnTimer(UINT_PTR ip)
{
    // вычисляешь, скока времени прошло с момента старта чего-либо...
    CTime tm = .....
 
    CString s = tm.Format("HH:MM:SS");
 
    ТвойЭлементОтображения.SetWindowText(s);   // вуаля!
}
1
47 / 32 / 9
Регистрация: 05.01.2013
Сообщений: 307
11.09.2013, 14:02  [ТС] 11
Цитата Сообщение от CheshireCat Посмотреть сообщение
Дык, эта..... Где-то так:
C++
1
2
3
4
5
6
7
8
9
КлассТвоегоОкна::OnTimer(UINT_PTR ip)
{
    // вычисляешь, скока времени прошло с момента старта чего-либо...
    CTime tm = .....
 
    CString s = tm.Format("HH:MM:SS");
 
    ТвойЭлементОтображения.SetWindowText(s);   // вуаля!
}
У меня он должен отображатся в Edit Control'е. Т.е. вместо "ТвойЭлементОтображения" мне вписывать что-то такого типа "IDC_EDIT6" или как?
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
11.09.2013, 14:21 12
Или как. Если КлассТвоегоОкна - наследник CDialog, то GetDlgItem(IDC_EDIT6)->SetWindowText(...);
1
47 / 32 / 9
Регистрация: 05.01.2013
Сообщений: 307
11.09.2013, 14:46  [ТС] 13
Цитата Сообщение от CheshireCat Посмотреть сообщение
Или как. Если КлассТвоегоОкна - наследник CDialog, то GetDlgItem(IDC_EDIT6)->SetWindowText(...);
Спасибо, что разжевали вопрос
0
Заблокирован
Автор FAQ
11.09.2013, 21:43 14
Цитата Сообщение от Pepsy Посмотреть сообщение
Это означает просто останавливать таймер при клике по форме для ввода данных, а потом восстанавливать? Но ведь тогда во время редактирования таймер будет попросту не работать?
- останавливай вывод тогда - заведи флаг и если кликнул мышкой флаг сбросился и UpdateData не будет выдывать данные в контролы. Get/SetDlgItem/indowText довольно тупая реализация как по мне

Добавлено через 1 минуту
C++
1
2
3
4
5
6
if( IsTimer )
    UpdateData(false);
OnMouseClick(...)
{
     IsTimer = false;
}
Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от Pepsy Посмотреть сообщение
Спасибо, что разжевали вопрос
- особенно если у тебя следует выводить какой нибудь инт а не строку в эдит SetWindowText просто глупость

0
11.09.2013, 21:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.09.2013, 21:43
Помогаю со студенческими работами здесь

Вывод времени таймером TextOut
Всем привет! Мне нужно, чтобы программа выводила время(::TextOut) с помощью таймера. Написал код,...

Рандомнный вывод текста с таймером на лэйбл
Подскажите, как сделать так, что бы на лэйбл1 выводились рандомные слова. С таймером, что бы менять...

Вывод B-дерева в контрол TreeView
Уважаемые форумчане, мне очень нужна ваша помощь, помогите пожалуйста организовать вывод B-tree в...

Вывод графика на контрол Chart
всем привет) в VS 2010 есть такой волшебный просто компонент как chart :) мне нужно построить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru