Экспертная система 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] [Следующая »]

min@y™

min@y™ (статус: Доктор наук), 6 октября 2010, 10:52 [#1]:

Цитата (min@y™):

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

Ты, хоть, мой вариант смотрел? Я имею в виду исходник. Там учитывается размер шрифта. Если препод тебя попросит изменить шрифт, ты с 5-ю TLabel словишь нехилый геморрой. Ну, дело твой, конечно...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Вадим К

Вадим К (статус: Академик), 6 октября 2010, 10:57 [#2]:

почему проблемы? кладем эти label'ы на панель (Panel) и изменяя шрифт панели, мы меняем шрифт дочерних элементов (конечно, нужно будет проконтролировать, что бы свойство UseParensFont было true).
Галочка "подтверждения прочтения" - вселенское зло.
Byte

Byte (статус: Посетитель), 6 октября 2010, 11:09 [#3]:

Конечно смотрел. И пусть даже придётся у 5-ти label'ов менять шрифт, я не расстроюсь. Ведь если препод узнает что это не моих рук работа, не видать мне зачета как муравья с высоты птичьего полета.
min@y™

min@y™ (статус: Доктор наук), 6 октября 2010, 11:15 [#4]:

Цитата (Вадим К):

почему проблемы? кладем эти label'ы на панель (Panel) и изменяя шрифт панели, мы меняем шрифт дочерних элементов (конечно, нужно будет проконтролировать, что бы свойство UseParensFont было true).


Ога. Сменим шрифт с Tahoma, 8 на Times New Roman, 16 и все элементы наедут друг на друга.

Цитата (Byte):

Конечно смотрел.


Ну и как?

Цитата (Byte):

Ведь если препод узнает что это не моих рук работа, не видать мне зачета как муравья с высоты птичьего полета.


А откуда препод узнает, если ему грамотно всё объяснить?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Byte

Byte (статус: Посетитель), 6 октября 2010, 11:31 [#5]:

А как я ему это все грамотно объясню если я в этом ничерта не понимаю?
Малость переделав вариант Егора я смогу грамотно все объяснить. Но до вашего, min@y™, уровня мне ещё далеко.
min@y™

min@y™ (статус: Доктор наук), 6 октября 2010, 11:36 [#6]:

Цитата (Byte):

А как я ему это все грамотно объясню если я в этом ничерта не понимаю?

А ты спрашивай, я объясню. Заодно бесплатно ума наберёшься, потом в следующих лабах, а, может и в жизни пригодится.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Byte

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

Понимаешь, дело в том что я даже и вопрос сформулировать не смогу, ибо я совсем ничего не понимаю.
Мой стаж работы в Delphi 7 исчисляется наверное даже не сутками, а часами...
Вадим К

Вадим К (статус: Академик), 6 октября 2010, 12:22 [#8]:

Цитата (min@y™):

Ога. Сменим шрифт с Tahoma, 8 на Times New Roman, 16 и все элементы наедут друг на друга.

ну так. дополнительно нужно ещё парочку свойств выставить. Например можно поиграться с Align. Было бы только желание:)
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 6 октября 2010, 13:50 [#9]:

Цитата (Byte):

Мой стаж работы в Delphi 7 исчисляется наверное даже не сутками, а часами...

Во народ пошёл! Начинают изучение языка программирования не с книжек и/или лекций, а с заявы на форум в интернете: "Напишите мне лабу, плиз".
Куда катится наш Мир??!!11
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 6 октября 2010, 13:52 [#10]:

Цитата (Вадим К):

Например можно поиграться с Align. Было бы только желание:)

Ога, а ещё AutoSize у панели и т.д... Можно ещё таких новоротов наворотить - препод зачот аффтаматом поставит. :)
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Byte

Byte (статус: Посетитель), 6 октября 2010, 14:15 [#11]:

Да нет, не в этом дело) Просто недавно проходил конкурс видеороликов, на котором я умудрился занять первое место,
исходя из чего преподаватель по Объектно-ориентированному программированию (Которое началось у нас с сентября) решила что я такой "классный", и сказала: "на милок задачку посложнее, докажи что я правильно подумала!",
а объяснений, как понимаете, я никаких не получил.
Порывшись около часа в скачанных из интернета книгах, за отсутствием таковых в домашней библиотеке, дельного нарыл мало, а тут раз и, мать его, ЭКСПЕРТЫ ответы раздают O_o!
Потерев руки отправил этот вопрос сюда.
min@y™

min@y™ (статус: Доктор наук), 6 октября 2010, 14:29 [#12]:

Не вижу связи конкурса видеороликов с объектно-ориентированным программированием.
Что-то тут не так...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Byte

Byte (статус: Посетитель), 6 октября 2010, 14:37 [#13]:

На все 100 согласен, связи никакой, но видимо у преподавателей складывается мнение что человеку сделавшему видеоролик в Vegas'е, написать программу в дельфи будет несложно..
Вадим К

Вадим К (статус: Академик), 6 октября 2010, 14:43 [#14]:

Абсолютно ожидаемое поведение. Ещё такой человек должен знать, как заправить катридж принтера и где его купить. А также знать ответ на вопрос "почему мой компьютер не работает???" без каких то дополнительных сведений.
Ну и уметь управлять МКС, а почему бы и нет:))))
Галочка "подтверждения прочтения" - вселенское зло.
Byte

Byte (статус: Посетитель), 6 октября 2010, 14:53 [#15]:

Хахаха да уж... Вопрос "почему мой компьютер не работает?" действительно популярен, и не редко причина - кока-кола на пилоте)
Лично с таким случаем сталкивался у знакомого дома :)
min@y™

min@y™ (статус: Доктор наук), 6 октября 2010, 14:56 [#16]:

Цитата (Вадим К):

Ещё такой человек должен знать, как заправить катридж принтера и где его купить. А также знать ответ на вопрос "почему мой компьютер не работает???" без каких то дополнительных сведений.

Именно этим я на работе и занимаюсь. Сослуживцы, знакомые, знакомые знакомых, сослуживцы знакомых и т.п. почему-то считают меня компьютерным гением и хакером и уверены, что я могу чинить компы по телефону и даже по фотографии.
Осталось научиться управлять МКС и большущим адронным коллайдером...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Byte

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

Чинить компьютеры по фотографии? O_o Такой способностью, я думаю,
Сможет похвастаться не каждый даже "Эдгар Кейси + Линус Бенедикт Торвальдс" :D
Byte

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

Если кому интересно, вот действия преподавателя после того как я ей показал задачу:
1. Сказала "Молодец"
2. Сказала "Но я бы сделала вот так:" (ниже вставлен код)
3. Поднялась, подмигнула и ушла...

unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, DateUtils;
 
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure yy(l:TLabel);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
procedure TForm1.yy(l:TLabel);
begin
 
case l.Font.Color of
clRed: l.Font.Color:=clBlue;
clBlue: l.Font.Color:=clWhite;
clWhite: l.Font.Color:=clred;
 
end;
end;
 procedure TForm1.Timer1Timer(Sender: TObject);
 
 begin
 yy(Label1);
 yy(Label3);
 yy(Label5);
 
 Label1.Caption := IntToStr(HourOf(Now)); 
 if Length(Label1.Caption) < 2 then 
 Label1.Caption := '0' + Label1.Caption; 
 
 Label3.Caption := IntToStr(MinuteOf(Now)); 
 if Length(Label3.Caption) < 2 then 
 Label3.Caption := '0' + Label3.Caption; 
 
 
 Label5.Caption := IntToStr(SecondOf(Now)); 
 if Length(Label5.Caption) < 2 then 
 Label5.Caption := '0' + Label5.Caption; 
 end;
end.
min@y™

min@y™ (статус: Доктор наук), 7 октября 2010, 17:08 [#19]:

Цитата (Byte):

Сказала "Но я бы сделала вот так:" (ниже вставлен код)

А теперь ты ей покажи мой код и скажи: "а вот так сделал бы min@y™ и получил бы 4 балла!".
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Вадим К

Вадим К (статус: Академик), 7 октября 2010, 17:28 [#20]:

Оригинально. что бы поменять цвет, применятся метод. а вот что бы выставить число в label, где просто бросается в глаза троекратное повторение кода, в один метод не зажала...
Строки вида
Length(Label3.Caption) < 2
это шедевр индусокода:)
красиво - это сделать так
Label1.caption := format('%2.2d, [HourOf(Now)]);
вместо трех строк
Label1.Caption := IntToStr(HourOf(Now)); 
 if Length(Label1.Caption) < 2 then 
 Label1.Caption := '0' + Label1.Caption;
Естественно, показав это, нужно подмигнуть и развернуться:)
Галочка "подтверждения прочтения" - вселенское зло.

Страницы: [1] [2] [Следующая »]

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

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:56
Выполнено за 0.03 сек.