|
Вопрос # 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]:
Вообще то можно, а менять сам текст не проще ли будет?
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|