Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 637

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
Есть компонент label, в нем текст: "00:00:00" (ЧЧ:ММ:СС), есть так-же time. А нужно чтобы через единицу времени (скорее всего секунду) изменялся цвет шрифта часов, минут, и секунд чередуя красный, синий и белый цвета соответственно. То есть сначала ЧЧ - красный, ММ - синий, СС - Белый, потом ЧЧ- белый, ММ - красный, СС - синий и т.д. И вообще возможно ли это без использования циклов и дополнительных timer'ов?
Я совсем ещё нубик в этом деле, помогите пожалуйста, иначе следующая встреча с преподом грозит мне отчислением... :D

Byte Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Byte (статус: Посетитель)
Вопрос отправлен: 5 октября 2010, 23:44
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Егор

Здравствуйте, Byte!
Таймер нужен. Один. Поместить весь текст в одну метку (label) не получится, т.к. для метки можно указать лишь один цвет - для всего текста сразу, а не для отдельных частей. Можно использовать какие-либо другие компоненты (например, RichEdit), которые допускают использование разных цветов для шрифта, но в данном случае самый простой выход - использовать пять меток: "чч" ":", "мм", ":" и "сс". Для каждой метки задаётся свой цвет по отдельности. Весь код будет в одном обработчике таймера.
И чего вы так боитесь циклов? Пишите программы - побольше. И перестанете бояться циклов. Да и других конструкций тоже.

Код программы ниже. На форме нужны будут компоненты: пять меток (первая должна быть белой, третья - красной, пятая - синей). Должен быть таймер. И в список используемых моделей нужно добавить модуль DateUtils (7-я строчка, последнее слово).

Приложение:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, ExtCtrls, StdCtrls, DateUtils;
  8.  
  9. type
  10. TForm1 = class(TForm)
  11. Label1: TLabel;
  12. Label2: TLabel;
  13. Label3: TLabel;
  14. Label5: TLabel;
  15. Label4: TLabel;
  16. Timer1: TTimer;
  17. procedure Timer1Timer(Sender: TObject);
  18. private
  19. { Private declarations }
  20. public
  21. { Public declarations }
  22. end;
  23.  
  24. var
  25. Form1: TForm1;
  26.  
  27. implementation
  28.  
  29. {$R *.dfm}
  30.  
  31. procedure TForm1.Timer1Timer(Sender: TObject);
  32. var
  33.  
  34.  
  35. begin
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67. end;
  68.  
  69. end.
  70.  


Ответ отправил: Егор (статус: 10-ый класс)
Время отправки: 6 октября 2010, 04:59
Оценка за ответ: 5

Комментарий к оценке: Спасибо огромное. То что нужно! Циклов я не боюсь, преподаватель требовала без циклов другие задачи делать и я подумал что эту тоже, но ежели не возможно - пусть так принимает.

Ответ #2. Отвечает эксперт: min@y™

А можно обойтись вообще без Label и рисовать текст прямо на Canvas чего-либо.
Я тоже написал рабочий пример, прицепляю к ответу.
К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 6 октября 2010, 08:52
Оценка за ответ: 4

Комментарий к оценке: Спасибо, вариант хороший, но это мы не проходили, это нам не задавали, парам-пам-пам :)
Возьму на будущее.

Мини-форум вопроса

Всего сообщений: 22; последнее сообщение — 7 октября 2010, 17:38; участников в обсуждении: 3.

Страницы: [« Предыдущая] [1] [2]

Byte

Byte (статус: Посетитель), 7 октября 2010, 17:36 [#21]:

min@y™: :) Дело в том что четырьмя баллами я оценил не код, а ответ на мой вопрос)
Byte

Byte (статус: Посетитель), 7 октября 2010, 17:38 [#22]:

Вадим К: Видимо она просто не заметила... Спасибо, возьму на заметку :)

Страницы: [« Предыдущая] [1] [2]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 26 апреля 2026, 00:12
Выполнено за 0.02 сек.