|
Вопрос # 4 637/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
Есть компонент label, в нем текст: "00:00:00" (ЧЧ:ММ:СС), есть так-же time. А нужно чтобы через единицу времени (скорее всего секунду) изменялся цвет шрифта часов, минут, и секунд чередуя красный, синий и белый цвета соответственно. То есть сначала ЧЧ - красный, ММ - синий, СС - Белый, потом ЧЧ- белый, ММ - красный, СС - синий и т.д. И вообще возможно ли это без использования циклов и дополнительных timer'ов?
Я совсем ещё нубик в этом деле, помогите пожалуйста, иначе следующая встреча с преподом грозит мне отчислением... :D
 |
Вопрос задал: Byte (статус: Посетитель)
Вопрос отправлен: 5 октября 2010, 23:44
Состояние вопроса: открыт, ответов: 2.
|
Ответ #1. Отвечает эксперт: Егор
Здравствуйте, Byte!
Таймер нужен. Один. Поместить весь текст в одну метку (label) не получится, т.к. для метки можно указать лишь один цвет - для всего текста сразу, а не для отдельных частей. Можно использовать какие-либо другие компоненты (например, RichEdit), которые допускают использование разных цветов для шрифта, но в данном случае самый простой выход - использовать пять меток: "чч" ":", "мм", ":" и "сс". Для каждой метки задаётся свой цвет по отдельности. Весь код будет в одном обработчике таймера.
И чего вы так боитесь циклов? Пишите программы - побольше. И перестанете бояться циклов. Да и других конструкций тоже.
Код программы ниже. На форме нужны будут компоненты: пять меток (первая должна быть белой, третья - красной, пятая - синей). Должен быть таймер. И в список используемых моделей нужно добавить модуль DateUtils (7-я строчка, последнее слово).
Приложение: Переключить в обычный режим- 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;
- Label5: TLabel;
- Label4: TLabel;
- Timer1: TTimer;
- procedure Timer1Timer(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- {$R *.dfm}
-
- procedure TForm1.Timer1Timer(Sender: TObject);
- var
-
-
- begin
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- end;
-
- end.
-
 |
Ответ отправил: Егор (статус: 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™ (статус: Доктор наук), 6 октября 2010, 10:52 [#1]:
Цитата (min@y™):
Спасибо, вариант хороший, но это мы не проходили, это нам не задавали, парам-пам-пам  Возьму на будущее.
Ты, хоть, мой вариант смотрел? Я имею в виду исходник. Там учитывается размер шрифта. Если препод тебя попросит изменить шрифт, ты с 5-ю TLabel словишь нехилый геморрой. Ну, дело твой, конечно...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Вадим К (статус: Академик), 6 октября 2010, 10:57 [#2]:
почему проблемы? кладем эти label'ы на панель (Panel) и изменяя шрифт панели, мы меняем шрифт дочерних элементов (конечно, нужно будет проконтролировать, что бы свойство UseParensFont было true).
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Byte (статус: Посетитель), 6 октября 2010, 11:09 [#3]:
Конечно смотрел. И пусть даже придётся у 5-ти label'ов менять шрифт, я не расстроюсь. Ведь если препод узнает что это не моих рук работа, не видать мне зачета как муравья с высоты птичьего полета.
|
|
min@y™ (статус: Доктор наук), 6 октября 2010, 11:15 [#4]:
Цитата (Вадим К):
почему проблемы? кладем эти label'ы на панель (Panel) и изменяя шрифт панели, мы меняем шрифт дочерних элементов (конечно, нужно будет проконтролировать, что бы свойство UseParensFont было true).
Ога. Сменим шрифт с Tahoma, 8 на Times New Roman, 16 и все элементы наедут друг на друга.
Цитата (Byte):
Конечно смотрел.
Ну и как?
Цитата (Byte):
Ведь если препод узнает что это не моих рук работа, не видать мне зачета как муравья с высоты птичьего полета.
А откуда препод узнает, если ему грамотно всё объяснить?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Byte (статус: Посетитель), 6 октября 2010, 11:31 [#5]:
А как я ему это все грамотно объясню если я в этом ничерта не понимаю?
Малость переделав вариант Егора я смогу грамотно все объяснить. Но до вашего, min@y™, уровня мне ещё далеко.
|
|
min@y™ (статус: Доктор наук), 6 октября 2010, 11:36 [#6]:
Цитата (Byte):
А как я ему это все грамотно объясню если я в этом ничерта не понимаю?
А ты спрашивай, я объясню. Заодно бесплатно ума наберёшься, потом в следующих лабах, а, может и в жизни пригодится.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Byte (статус: Посетитель), 6 октября 2010, 12:11 [#7]:
Понимаешь, дело в том что я даже и вопрос сформулировать не смогу, ибо я совсем ничего не понимаю.
Мой стаж работы в Delphi 7 исчисляется наверное даже не сутками, а часами...
|
|
Вадим К (статус: Академик), 6 октября 2010, 12:22 [#8]:
Цитата (min@y™):
Ога. Сменим шрифт с Tahoma, 8 на Times New Roman, 16 и все элементы наедут друг на друга.
ну так. дополнительно нужно ещё парочку свойств выставить. Например можно поиграться с Align. Было бы только желание
Галочка "подтверждения прочтения" - вселенское зло.
|
|
min@y™ (статус: Доктор наук), 6 октября 2010, 13:50 [#9]:
Цитата (Byte):
Мой стаж работы в Delphi 7 исчисляется наверное даже не сутками, а часами...
Во народ пошёл! Начинают изучение языка программирования не с книжек и/или лекций, а с заявы на форум в интернете: "Напишите мне лабу, плиз".
Куда катится наш Мир??!!11
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
min@y™ (статус: Доктор наук), 6 октября 2010, 13:52 [#10]:
Цитата (Вадим К):
Например можно поиграться с Align. Было бы только желание
Ога, а ещё AutoSize у панели и т.д... Можно ещё таких новоротов наворотить - препод зачот аффтаматом поставит.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Byte (статус: Посетитель), 6 октября 2010, 14:15 [#11]:
Да нет, не в этом дело) Просто недавно проходил конкурс видеороликов, на котором я умудрился занять первое место,
исходя из чего преподаватель по Объектно-ориентированному программированию (Которое началось у нас с сентября) решила что я такой "классный", и сказала: "на милок задачку посложнее, докажи что я правильно подумала!",
а объяснений, как понимаете, я никаких не получил.
Порывшись около часа в скачанных из интернета книгах, за отсутствием таковых в домашней библиотеке, дельного нарыл мало, а тут раз и, мать его, ЭКСПЕРТЫ ответы раздают !
Потерев руки отправил этот вопрос сюда.
|
|
min@y™ (статус: Доктор наук), 6 октября 2010, 14:29 [#12]:
Не вижу связи конкурса видеороликов с объектно-ориентированным программированием.
Что-то тут не так...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Byte (статус: Посетитель), 6 октября 2010, 14:37 [#13]:
На все 100 согласен, связи никакой, но видимо у преподавателей складывается мнение что человеку сделавшему видеоролик в Vegas'е, написать программу в дельфи будет несложно..
|
|
Вадим К (статус: Академик), 6 октября 2010, 14:43 [#14]:
Абсолютно ожидаемое поведение. Ещё такой человек должен знать, как заправить катридж принтера и где его купить. А также знать ответ на вопрос "почему мой компьютер не работает???" без каких то дополнительных сведений.
Ну и уметь управлять МКС, а почему бы и нет )))
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Byte (статус: Посетитель), 6 октября 2010, 14:53 [#15]:
Хахаха да уж... Вопрос "почему мой компьютер не работает?" действительно популярен, и не редко причина - кока-кола на пилоте)
Лично с таким случаем сталкивался у знакомого дома
|
|
min@y™ (статус: Доктор наук), 6 октября 2010, 14:56 [#16]:
Цитата (Вадим К):
Ещё такой человек должен знать, как заправить катридж принтера и где его купить. А также знать ответ на вопрос "почему мой компьютер не работает???" без каких то дополнительных сведений.
Именно этим я на работе и занимаюсь. Сослуживцы, знакомые, знакомые знакомых, сослуживцы знакомых и т.п. почему-то считают меня компьютерным гением и хакером и уверены, что я могу чинить компы по телефону и даже по фотографии.
Осталось научиться управлять МКС и большущим адронным коллайдером...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
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™ (статус: Доктор наук), 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] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|