![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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)
| ||