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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 5 211

Раздел: Delphi » Прочее
/ вопрос открыт /

Здравствуйте, уважаемые эксперты! Не подскажите, как решить 2 небольших вопроса?

1) Как нажатием клавиши "вперед"/"назад" (аля стрелочки) осуществить функцию Button1.Click?

2) Как лучше сделать следующее: есть GIF анимация, которая проигрывается 1 раз. Как сделать, чтобы при наведении курсора на определенную область (например PNGButton1.MouseEnter) загружалось GIF в какой-то компонент TImage, проигрывалась до конца и исчезала. Но затем снова при наведении мыши на PNGButton1 появлялась и просматривалась с начала. Просто думал сделать все это с бесконечной анимацией и через таймер, но не доверяю я таймеру что-то, всякий раз от него можно ждать что угодно - то раньше убирает, то позже...

Большое Спасибо!

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

Вопрос задал: A000Y (статус: Посетитель)
Вопрос отправлен: 19 апреля 2011, 08:40
Состояние вопроса: открыт, ответов: 0.


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

Всего сообщений: 23; последнее сообщение — 20 апреля 2011, 12:09; участников в обсуждении: 4.

Страницы: [1] [2] [Следующая »]

min@y™

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

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™

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

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™

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

A000Y (статус: Посетитель), 19 апреля 2011, 20:29 [#7]:

min@y™, 7я

Егор, спасибо) Но меня сейчас больше анимация волнует) Кнопки косо криво, но появляются, а вот анимация должным образом работать не хочет!
min@y™

min@y™ (статус: Доктор наук), 19 апреля 2011, 20:53 [#8]:

Цитата (A000Y):


Тогда не вижу проблем с установкой RxLib. Там в архиве идёт подробная инструкция по установке.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
A000Y

A000Y (статус: Посетитель), 19 апреля 2011, 20:56 [#9]:

min@y™, можно ссылку на архив?
min@y™

min@y™ (статус: Доктор наук), 19 апреля 2011, 21:02 [#10]:

Цитата (A000Y):

можно ссылку на архив?

Искать влом, щас выложу на файлопомойку.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 19 апреля 2011, 21:04 [#11]:

Вот тебе ссылка, качай.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
A000Y

A000Y (статус: Посетитель), 19 апреля 2011, 21:08 [#12]:

min@y™, спс) Погнал пробовать ставить)
A000Y

A000Y (статус: Посетитель), 19 апреля 2011, 21:27 [#13]:

В общем не судьба мне установить это... Если через TImage это никак не сделать, то я по другому не сделаю. А тратить свое и ваше время не вижу больше смысла. Еще раз спасибо за помощь)
min@y™

min@y™ (статус: Доктор наук), 19 апреля 2011, 21:48 [#14]:

Попробуй почитать вот это.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
A000Y

A000Y (статус: Посетитель), 19 апреля 2011, 23:33 [#15]:

Да что я только не читал - для меня это только не причитал - для меня все равно это сплошной космос) Еще раз большое спасибо - может на свежую голову завтра все получится)
A000Y

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™

min@y™ (статус: Доктор наук), 20 апреля 2011, 11:24 [#18]:

Цитата (Вадим К):

можно вместо RxLib использовать JVCL. Более новое и более приспособленное для работы.

Если нужен только один компонент, стоит ли ставить 100500 компонентов?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

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

A000Y (статус: Посетитель), 20 апреля 2011, 11:42 [#20]:

Идеально! min@y™, благодарен)

Страницы: [1] [2] [Следующая »]

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

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