| 
| 
 | Вопрос # 3 456/ вопрос открыт / | 
 |  Здравствуйте, уважаемые эксперты! Я хотел спросить ВАС. Вообщем имеется много Label-ов около 20 или больше. Теперь можно ли сделать с помощью таймера так чтобы эти  Label-ы показывались один за одним, как в karaoke. 
|  |   Вопрос задал: Beknur (статус: Посетитель)Вопрос отправлен: 28 ноября 2009, 18:37
 Состояние вопроса: открыт, ответов: 1.
 |  Ответ #1. Отвечает эксперт: monah Здравствуйте, Beknur!В данном примере, смотрите приложение, подразумевается что label0 уже видима.
 
|  | Ответ отправил: monah (статус: 1-ый класс)Время отправки: 5 декабря 2009, 13:16
 
 |  
 Мини-форум вопросаВсего сообщений: 13; последнее сообщение — 5 декабря 2009, 12:53; участников в обсуждении: 5. 
|   | 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 (статус: Посетитель), 28 ноября 2009, 19:13 [#2]:Извините я новичок в Делфи.Если ВАМ не заставитьтруда не могли бы ВЫ покоментировать этот код. Заранее спасибо |  
|   | Вадим К (статус: Академик), 28 ноября 2009, 20:11 [#3]:Вибросите и забудьте этот код. Галочка "подтверждения прочтения" - вселенское зло. |  
|   | unl0K (статус: Посетитель), 28 ноября 2009, 20:17 [#4]:Вадим К:Ну если вы знаете другой способ перебрать существующие контролы на форме, то покажите... Относись к людям так, как хотел бы, чтобы они к тебе относились! |  
|   | Егор (статус: 10-ый класс), 28 ноября 2009, 20:19 [#5]:Beknur: а зачем такое понадобилось? задача какая?
 может, другой способ есть - мы подскажем.
 Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.— Donald E. Knuth.
 |  
|   | unl0K (статус: Посетитель), 28 ноября 2009, 20:23 [#6]:Мне кажется, что можно было бы создавать TLabel динамически и добавлять указатель на только что созданный контрол в список и потом с ними работать, но контролы уже на форме и я деже не знаю как тут быть... Относись к людям так, как хотел бы, чтобы они к тебе относились! |  
|   | Вадим К (статус: Академик), 28 ноября 2009, 20:53 [#7]:Проблема не в переборе компонентов. проблема в sleep. Я бы эту задачу решал другим методом - я просто бы рисовал по верх формы или какой там будет компонент.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | unl0K (статус: Посетитель), 28 ноября 2009, 20:58 [#8]:sleep я использовал для демонстрации, в дальнейшем я так понял это будет использоватся в TTimer и там спокойно можно избавится от sleep. Относись к людям так, как хотел бы, чтобы они к тебе относились! |  
|   | Beknur (статус: Посетитель), 30 ноября 2009, 06:58 [#9]:Здраствкйте ВСЕМ. Меня попросили сделать видео ролик с karaoke. Скачал программы для создания Karaoke, но все без ключа не работает, а некоторых непонял как работать и подумал можно ли сделать это на Делфи. |  
|   | unl0K (статус: Посетитель), 30 ноября 2009, 11:33 [#10]:И как же вы хотите это реализовать? Написать на делфи приложение, потом программой для захвата видео сделат ролик?))
 --
 Скажу вам одно - не стоит заниматься в делфи таким делом, найдите бесплатную программу для создания karaoke. Ну потратите вы часик на то, чтобы разобраться с программой, но оно того будет стоить...
 Относись к людям так, как хотел бы, чтобы они к тебе относились! |  
|   | Beknur (статус: Посетитель), 30 ноября 2009, 12:30 [#11]:С помощью TMedyaPlayer проиграть видео на Panel1. И снизу Label-ы. Мне только один такой видео ролик сделать надо. Вот с Label-ами проблема. |  
|   | unl0K (статус: Посетитель), 30 ноября 2009, 18:15 [#12]:"Вот с Label-ами проблема." Какая проблема, вы можете объяснить?Я вам предоставил работающий пример с TLabel. O чем вы?
 Эта ваша идея с TMedyaPlayer не к чему хорошему не приведет...
 Относись к людям так, как хотел бы, чтобы они к тебе относились! |  
|   | monah (статус: 1-ый класс), 5 декабря 2009, 12:53 [#13]:Вообще то можно, а менять сам текст не проще ли будет? |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |