![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Доброго времени суток всем.
Есть такой вопрос. К примеру, есть батон на форме, когда на нее нажимаешь - воспроизводиться файл, когда отпускаешь - воспроизведение прекращается. Это в общем не проблема, мышкой я сделал это через события OnMouseDown и OnMouseUp, сделать управление кнопкой через стрелочку на клавиатуре не выходит. Вот пример кода, который почемуто работает при нажатии Ctrl. Код:
procedure TForm1.Button1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if GetKeyState(VK_LEFT) <> 0 then MediaPlayer1.FileName:='1.mp3'; MediaPlayer1.Open; MediaPlayer1.Play; end; Windows 7, Delphi 7. Заранее благодарю за помощь. "Если бы выборы и голосование приводили к положительному результату и радующим население переменам, их давно уже объявили бы противозаконными!" Лайэм Галлахер |
#2
|
||||
|
||||
![]() Цитата:
|
#3
|
||||
|
||||
![]() Цитата:
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, MPlayer, StdCtrls; type TForm1 = class(TForm) Button1: TButton; MediaPlayer1: TMediaPlayer; procedure Button1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Button1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Button1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure Button1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin MediaPlayer1.FileName:='1.mp3'; MediaPlayer1.Open; MediaPlayer1.Play; end; procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin MediaPlayer1.Stop; end; procedure TForm1.Button1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if GetKeyState(VK_LEFT) <> 0 then begin; MediaPlayer1.FileName:='1.mp3'; MediaPlayer1.Open; MediaPlayer1.Play; end; end; procedure TForm1.Button1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin MediaPlayer1.Stop; end; end. "Если бы выборы и голосование приводили к положительному результату и радующим население переменам, их давно уже объявили бы противозаконными!" Лайэм Галлахер |
#4
|
||||
|
||||
![]() Похоже здесь всё дело в повторах нажатия клавиши - даже при отпускании из буфера клавы идёт повтор на запуск, попробуйте вот так
Код:
var flg: boolean = true; procedure TForm1.Button1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if GetKeyState(VK_LEFT) <> 0 then flg:= true; end; procedure TForm1.Button1KeyPress(Sender: TObject; var Key: Char); begin if flg then begin MediaPlayer1.FileName:='1.mp3'; MediaPlayer1.Open; MediaPlayer1.Play; end; end; procedure TForm1.Button1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin flg:= false; MediaPlayer1.Stop; end; З.Ы. Косяк только сейчас заметил - вместо Код:
if GetKeyState(VK_LEFT) <> 0 then flg:= true; Код:
if Key = VK_LEFT then flg:= true; Я не понял Вашего вопроса, но всё же Вам на него отвечу! Последний раз редактировалось Alegun, 06.01.2014 в 02:08. |
#5
|
||||
|
||||
![]() Цитата:
Код:
procedure TForm1.Button1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin flg:= false; MediaPlayer1.Stop; end; "Если бы выборы и голосование приводили к положительному результату и радующим население переменам, их давно уже объявили бы противозаконными!" Лайэм Галлахер |
#6
|
||||
|
||||
![]() Извнт за ляп, тогда отмена, попробуйте вот так
Код:
procedure TForm1.Button1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_LEFT then begin MediaPlayer1.FileName:='1.mp3'; MediaPlayer1.Open; MediaPlayer1.Play; end; end; procedure TForm1.Button1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_LEFT then MediaPlayer1.Stop; end; З.Ы. Тяжело без делфи код под неё собирать, извнт :-) Я не понял Вашего вопроса, но всё же Вам на него отвечу! Последний раз редактировалось Alegun, 06.01.2014 в 02:25. |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
casperock (06.01.2014)
|
#7
|
||||
|
||||
![]() Цитата:
Сейчас заметил такую штуку, если запустить программу и сразу нажимать стрелочки - вылазит "No MCI device open", а если нажать мышкой, а потом стрелочки - ошибки уже нет. Но и воспроизведения тоже. Это не может быть из-за того что у меня Window 7? "Если бы выборы и голосование приводили к положительному результату и радующим население переменам, их давно уже объявили бы противозаконными!" Лайэм Галлахер |
#8
|
||||
|
||||
![]() Вот ещё вариант
Код:
procedure mpc (ds: boolean); begin if ds then begin; Form1.MediaPlayer1.FileName:='1.mp3'; Form1.MediaPlayer1.Open; Form1.MediaPlayer1.Play; end else begin Form1.MediaPlayer1.Stop; Form1.MediaPlayer1.Close; end; end; procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin mpc(true) end; procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin mpc(false); end; procedure TForm1.Button1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_LEFT then mpc(true); end; procedure TForm1.Button1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_LEFT then mpc(false); end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#9
|
||||
|
||||
![]() Цитата:
"Если бы выборы и голосование приводили к положительному результату и радующим население переменам, их давно уже объявили бы противозаконными!" Лайэм Галлахер |
#10
|
||||
|
||||
![]() Возможное решение
1. Не используйте TButton, лучше напр. ТSpeedButton т.к. у него нет фокуса (по умолчанию Tab и стрелки переключают фокус между визуальными компонентами его имеющими) 2. Используйте процедуры Key/Mouse/Down/App у самой формы, код будет примерно такой Код:
var flg: boolean = true; procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_LEFT then begin if flg then begin MediaPlayer1.FileName:='1.mp3'; MediaPlayer1.Open; flg:=false; end; MediaPlayer1.Play; end; end; procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_LEFT then begin MediaPlayer1.Close; flg:=true; end; end; procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin MediaPlayer1.FileName:='1.mp3'; MediaPlayer1.Open; MediaPlayer1.Play; end; procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin MediaPlayer1.Close; end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
casperock (06.01.2014)
|
#11
|
||||
|
||||
![]() Огромное спасибо!) Отлично помогло, буквально за 20 минут уже готовое решение.
"Если бы выборы и голосование приводили к положительному результату и радующим население переменам, их давно уже объявили бы противозаконными!" Лайэм Галлахер |