|
Вопрос # 5 211/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты! Не подскажите, как решить 2 небольших вопроса?
1) Как нажатием клавиши "вперед"/"назад" (аля стрелочки) осуществить функцию Button1.Click?
2) Как лучше сделать следующее: есть GIF анимация, которая проигрывается 1 раз. Как сделать, чтобы при наведении курсора на определенную область (например PNGButton1.MouseEnter) загружалось GIF в какой-то компонент TImage, проигрывалась до конца и исчезала. Но затем снова при наведении мыши на PNGButton1 появлялась и просматривалась с начала. Просто думал сделать все это с бесконечной анимацией и через таймер, но не доверяю я таймеру что-то, всякий раз от него можно ждать что угодно - то раньше убирает, то позже...
Большое Спасибо!
 |
Вопрос задал: A000Y (статус: Посетитель)
Вопрос отправлен: 19 апреля 2011, 08:40
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 23; последнее сообщение — 20 апреля 2011, 12:09; участников в обсуждении: 4.
Страницы: [1] [2] [Следующая »]
|
min@y™ (статус: Доктор наук), 19 апреля 2011, 08:49 [#1]:
Цитата (A000Y):
1) Как нажатием клавиши "вперед"/"назад" (аля стрелочки) осуществить функцию Button1.Click?
Поставь у форму, на которой лежит кнопка, свойство KeyPreview:= True; затем напиши обработчик OnKeyDown этой формы. В него передаётся параметр Key: Word. Когда он будет равен VK_LEFT или VK_RIGHT, то это значит, что юзер нажал стрелку "влево" или "вправо" соответственно.
На второй вопрос пока ответить не могу, не хватает информации:
1) какая версия Delphi? У меня в Delphi 7 TImage формат gif не поддерживает;
2) почему тебе не нравится таймер?
3) почему не воспользоваться готовым компонентом для проигрывания gif-анимации?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
A000Y (статус: Посетитель), 19 апреля 2011, 15:44 [#2]:
Спасибо! Маленький вопросик по первому пункту: что нужно вписать в строку
if Key = VK_RIGHT then
чтобы выполнить процедуру
procedure TForm1.PNGButton1MouseDown
--
на счет второго
1) 7я - TImage поддерживает GIF благодаря компоненту GIFImage.
2) Никакой личной неприязни) Просто стоит на FormCreate (с выдержкой в 6 сек [пока играет мелодия]) и затем показывает кнопку. Но зачастую кнопка появляется куда раньше)
3) Если подскажите каким и как - с радостью воспользуюсь)
|
|
min@y™ (статус: Доктор наук), 19 апреля 2011, 15:55 [#3]:
Цитата (A000Y):
Маленький вопросик по первому пункту: что нужно вписать в строку
if Key = VK_RIGHT then
чтобы выполнить процедуру
procedure TForm1.PNGButton1MouseDown
Дык, так и пиши:
if Key = VK_RIGHT
then PNGButton1MouseDown(PNGButton1, { и другие параметры });
Только зачем на OnMouseDown? OnClick чем не подходит?
Цитата (A000Y):
2) Никакой личной неприязни) Просто стоит на FormCreate (с выдержкой в 6 сек [пока играет мелодия]) и затем показывает кнопку. Но зачастую кнопка появляется куда раньше)
А нахрена тут таймер вообще? Музон кончился - показывай кнопку.
Цитата (A000Y):
3) Если подскажите каким и как - с радостью воспользуюсь)
Да хотя бы TRxGifAnimator.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
A000Y (статус: Посетитель), 19 апреля 2011, 19:19 [#4]:
- Только зачем на OnMouseDown? OnClick чем не подходит?
Движение кнопки Hot - Press - Hot быстрее проходит)
- А нахрена тут таймер вообще? Музон кончился - показывай кнопку.
ХЗ. Но на FormCreate не работает
MediaPlayer1.FileName := ExtractFilePath(Application.ExeName)+'Audio\1.mp3';
MediaPlayer1.Open;
MediaPlayer1.Play;
if mediaPlayer1.position = mediaPlayer1.length Then PNGButton3.Visible:=true;
А больше некуда ставить... остальные все аля onClick функции. Через Notify пробовал - тоже не получилось. Хоть есть большая вероятность того, что криво я что-то делал...
- Да хотя бы TRxGifAnimator.
Если бы для меня было просто установить RX Library, я б им с радостью воспользовался...
|
|
min@y™ (статус: Доктор наук), 19 апреля 2011, 20:02 [#5]:
Цитата (A000Y):
Движение кнопки Hot - Press - Hot быстрее проходит)
Не понял.
Цитата (A000Y):
ХЗ. Но на FormCreate не работает
Ясен пень, не работает, ты сам-то понял, что написал? TMediaPlayer работает в асинхронном режиме, поэтому кнопка появляется сразу, а не после проигрывания. Тут надо юзать событие TMediaPlayer.OnNotify.
Цитата (A000Y):
Через Notify пробовал - тоже не получилось. Хоть есть большая вероятность того, что криво я что-то делал...
Эта вероятность равна единице (или 100%).
Цитата (A000Y):
Если бы для меня было просто установить RX Library, я б им с радостью воспользовался...
А в чём проблема? Какая у тебя версия Delphi?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Егор (статус: 10-ый класс), 19 апреля 2011, 20:03 [#6]:
Цитата (A000Y):
MediaPlayer1.Open;
MediaPlayer1.Play;
if mediaPlayer1.position = mediaPlayer1.length Then PNGButton3.Visible:=true;
а зачем так-то? тут просходит следующее - включаем музыку и ТУТ ЖЕ проверяем, а не дошли ли до конца. неужели музыка на пару микросекунд?
прописывать код, который должен сработать на остановку, надо в обработчике onNotify.
поставил я на форму медиаплеера. нажал на нём f1. появилась справка. в ней выбрал Events, затем - OnNotify. а потом увидел изумительную ссылку "Delphi examplе". АГА!
const
ModeStr: array[TMPModes] of string = ('Not ready', 'Stopped', 'Playing', 'Recording', 'Seeking', 'Paused', 'Open');
procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
with Sender as TMediaPlayer do
begin
Form1.Caption := ModeStr[Mode];
{ Note we must reset the Notify property to True }
{ so that we are notified the next time the }
{ mode changes }
Notify := True;
end;
end;
отсюда пишем свой обработчик:
procedure TForm1.MediaPlayer1Notify(Sender: TObject);
begin
// если медиаплеер невидим, то даже не надо проверять состояние медиаплеера - сюда попадаем
// только если музыка сама остановилась (медиаплеер невидим, на нём никто мышой не щёлкает)
PNGButton3.Visible:=true;
end;
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
A000Y (статус: Посетитель), 19 апреля 2011, 20:29 [#7]:
min@y™, 7я
Егор, спасибо) Но меня сейчас больше анимация волнует) Кнопки косо криво, но появляются, а вот анимация должным образом работать не хочет!
|
|
min@y™ (статус: Доктор наук), 19 апреля 2011, 20:53 [#8]:
Цитата (A000Y):
7я
Тогда не вижу проблем с установкой RxLib. Там в архиве идёт подробная инструкция по установке.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
A000Y (статус: Посетитель), 19 апреля 2011, 20:56 [#9]:
min@y™, можно ссылку на архив?
|
|
min@y™ (статус: Доктор наук), 19 апреля 2011, 21:02 [#10]:
Цитата (A000Y):
можно ссылку на архив?
Искать влом, щас выложу на файлопомойку.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
min@y™ (статус: Доктор наук), 19 апреля 2011, 21:04 [#11]:
Вот тебе ссылка, качай.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
A000Y (статус: Посетитель), 19 апреля 2011, 21:08 [#12]:
min@y™, спс) Погнал пробовать ставить)
|
|
A000Y (статус: Посетитель), 19 апреля 2011, 21:27 [#13]:
В общем не судьба мне установить это... Если через TImage это никак не сделать, то я по другому не сделаю. А тратить свое и ваше время не вижу больше смысла. Еще раз спасибо за помощь)
|
|
min@y™ (статус: Доктор наук), 19 апреля 2011, 21:48 [#14]:
Попробуй почитать вот это.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
A000Y (статус: Посетитель), 19 апреля 2011, 23:33 [#15]:
Да что я только не читал - для меня это только не причитал - для меня все равно это сплошной космос) Еще раз большое спасибо - может на свежую голову завтра все получится)
|
|
A000Y (статус: Посетитель), 20 апреля 2011, 11:11 [#16]:
Эх, не прошло и пол года, но мне удалось установить RX Lib!
Но вопрос с анимацией все еще открыт) Как я вижу RxGIFAnimator проигрывает анимацию снова с нова, вне зависимости от того, надо это или нет) Так можно его как-то заставить остановиться проиграв анимацию 1 раз? Например, изначально задав RxGIFAnimator1.Animate:=false; при нажатии на Button1 присваиваем RxGIFAnimator1.Animate:=true; - проиграло анимацию один раз и снова RxGIFAnimator1.Animate:=false
|
|
Вадим К (статус: Академик), 20 апреля 2011, 11:20 [#17]:
можно вместо RxLib использовать JVCL. Более новое и более приспособленное для работы.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
min@y™ (статус: Доктор наук), 20 апреля 2011, 11:24 [#18]:
Цитата (Вадим К):
можно вместо RxLib использовать JVCL. Более новое и более приспособленное для работы.
Если нужен только один компонент, стоит ли ставить 100500 компонентов?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
min@y™ (статус: Доктор наук), 20 апреля 2011, 11:27 [#19]:
Цитата (A000Y):
Например, изначально задав RxGIFAnimator1.Animate:=false; при нажатии на Button1 присваиваем RxGIFAnimator1.Animate:=true; - проиграло анимацию один раз и снова RxGIFAnimator1.Animate:=false
Свойства TRxGifAnimator смотрел или вместо этого ходил пиво пить?
Цитата:
Declaration
property Loop: Boolean;
Description
Свойство определяет, будет ли циклически повторяться последовательность кадров анимации, сохраненной в формате GIF. Если свойство установлено в значение True (по умолчанию), то после того, как свойство FrameIndex достигнет максимально возможного значения, оно будет сброшено в значение 0, и анимация будет продолжена. Если Loop=False, то после прохождения полного цикла анимации свойство Animate будет установлено в значение False (с вызовом события OnStop).
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
A000Y (статус: Посетитель), 20 апреля 2011, 11:42 [#20]:
Идеально! min@y™, благодарен)
|
Страницы: [1] [2] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|