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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 3 456

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

Здравствуйте, уважаемые эксперты! Я хотел спросить ВАС. Вообщем имеется много Label-ов около 20 или больше. Теперь можно ли сделать с помощью таймера так чтобы эти Label-ы показывались один за одним, как в karaoke.

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

Вопрос задал: Beknur (статус: Посетитель)
Вопрос отправлен: 28 ноября 2009, 18:37
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: monah

Здравствуйте, Beknur!
В данном примере, смотрите приложение, подразумевается что label0 уже видима.

Приложение:
  1. var
  2. o:Tlabel;
  3. for i:=0 to 20 do
  4. begin
  5.  
  6.  
  7.  
  8.  
  9. end;


Ответ отправил: monah (статус: 1-ый класс)
Время отправки: 5 декабря 2009, 13:16


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

Всего сообщений: 13; последнее сообщение — 5 декабря 2009, 12:53; участников в обсуждении: 5.
unl0K

unl0K (статус: Посетитель), 28 ноября 2009, 18:54 [#1]:

Так можно перебрать все контролы типа TLabel - это подходит под ваш запрос.
var
  i:integer;
begin
  for i:=0 to ControlCount-1 do begin //цикл от нуля до кол-ва всех элементов - 2 расположенных на форме.
     if Controls[i] is TLabel then begin //Проверяем является ли текущий контрол TLabel
        Controls[i].Visible:=false; // Обращаемся к текущему элементу управления, тобишь TLabel, и изменяем его свойство
"Visible" в false, тоесть скрываем объект.
        Sleep(100); // задержка в мс для того, чтобы можно было заметить пред. операцию.
        Application.ProcessMessages; //Позволяет выполнить все задачи которые накопились в данный момент
     end;
  end;
// второй цикл - почти аналогично.
  for i:=0 to ControlCount-1 do begin
     if Controls[i] is TLabel then begin
        Controls[i].Visible:=true; // Изменяем свойство Visible в true, то есть отображаем элемент.
        Sleep(100);
        Application.ProcessMessages;
     end;
  end;
Думаю не составит труда внедрить это все в таймер.
----
Но если вы хотите заморочится с кучей компонентов, для караоке, то у вас в итоге ничего не получится...
Вот этот пример думаю подойдет вам:
Допустим имеется файл(текст песни) -
--kino.txt--
Белый снег, серый лед,
На растрескавшейся земле.
Одеялом лоскутным на ней -
Город в дорожной петле.
А над городом плывут облака,
Закрывая небесный свет.
А над городом - желтый дым,
Городу две тысячи лет,
Прожитых под светом Звезды
По имени Солнце...
--
Тогда на много удобнее считывать по строчно с листа в компонент TLable строки песни.
Размещаем на форме TTimer,TLabel,TButton,
у Timer1 свойство Enadled ставим в false, интервал на усмотрение.
Размещаем код в обработчиках...
...
var
  Form1: TForm1;
  TextList:TStringList;
 
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
   TextList:=TStringList.Create; // Создаем объект
   TextList.LoadFromFile('C:\kino.txt'); // Загружаем текст песни
   Timer1.Enabled:=True; // Включаем таймер
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
   if Timer1.Tag = TextList.Count then Timer1.Tag:=0; // Проверяем - если прошли все строки то начинаем с начала
   Label1.Caption:=TextList[Timer1.Tag]; // Выводим строку
   Timer1.Tag := Timer1.Tag +1; // Увеличиваем Timer1.Tag на 1 для получения следующей строки
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 TextList.Free; // Уничтожаем объект
end;
Это небольшой пример для понимания, что кучу компонентов использовать не выгодно, да и вообще...
Относись к людям так, как хотел бы, чтобы они к тебе относились!
Beknur

Beknur (статус: Посетитель), 28 ноября 2009, 19:13 [#2]:

Извините я новичок в Делфи.Если ВАМ не заставитьтруда не могли бы ВЫ покоментировать этот код. Заранее спасибо
Вадим К

Вадим К (статус: Академик), 28 ноября 2009, 20:11 [#3]:

Вибросите и забудьте этот код.
Галочка "подтверждения прочтения" - вселенское зло.
unl0K

unl0K (статус: Посетитель), 28 ноября 2009, 20:17 [#4]:

Вадим К:Ну если вы знаете другой способ перебрать существующие контролы на форме, то покажите...
Относись к людям так, как хотел бы, чтобы они к тебе относились!
Егор

Егор (статус: 10-ый класс), 28 ноября 2009, 20:19 [#5]:

Beknur:
а зачем такое понадобилось? задача какая?
может, другой способ есть - мы подскажем.
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
unl0K

unl0K (статус: Посетитель), 28 ноября 2009, 20:23 [#6]:

Мне кажется, что можно было бы создавать TLabel динамически и добавлять указатель на только что созданный контрол в список и потом с ними работать, но контролы уже на форме и я деже не знаю как тут быть...
Относись к людям так, как хотел бы, чтобы они к тебе относились!
Вадим К

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

Проблема не в переборе компонентов. проблема в sleep.
Я бы эту задачу решал другим методом - я просто бы рисовал по верх формы или какой там будет компонент.
Галочка "подтверждения прочтения" - вселенское зло.
unl0K

unl0K (статус: Посетитель), 28 ноября 2009, 20:58 [#8]:

sleep я использовал для демонстрации, в дальнейшем я так понял это будет использоватся в TTimer и там спокойно можно избавится от sleep.
Относись к людям так, как хотел бы, чтобы они к тебе относились!
Beknur

Beknur (статус: Посетитель), 30 ноября 2009, 06:58 [#9]:

Здраствкйте ВСЕМ. Меня попросили сделать видео ролик с karaoke. Скачал программы для создания Karaoke, но все без ключа не работает, а некоторых непонял как работать и подумал можно ли сделать это на Делфи.
unl0K

unl0K (статус: Посетитель), 30 ноября 2009, 11:33 [#10]:

И как же вы хотите это реализовать?
Написать на делфи приложение, потом программой для захвата видео сделат ролик?))
--
Скажу вам одно - не стоит заниматься в делфи таким делом, найдите бесплатную программу для создания karaoke. Ну потратите вы часик на то, чтобы разобраться с программой, но оно того будет стоить...
Относись к людям так, как хотел бы, чтобы они к тебе относились!
Beknur

Beknur (статус: Посетитель), 30 ноября 2009, 12:30 [#11]:

С помощью TMedyaPlayer проиграть видео на Panel1. И снизу Label-ы. Мне только один такой видео ролик сделать надо. Вот с Label-ами проблема.
unl0K

unl0K (статус: Посетитель), 30 ноября 2009, 18:15 [#12]:

"Вот с Label-ами проблема."
Какая проблема, вы можете объяснить?Я вам предоставил работающий пример с TLabel. O чем вы?
Эта ваша идея с TMedyaPlayer не к чему хорошему не приведет...
Относись к людям так, как хотел бы, чтобы они к тебе относились!
monah

monah (статус: 1-ый класс), 5 декабря 2009, 12:53 [#13]:

Вообще то можно, а менять сам текст не проще ли будет?

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

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