Jeden rodzaj procedury do kilku różnych przycisków

1

Witam. Mam pytanie - czy dałoby się jakoś zoptymalizować taki kod:

procedure TForm1.SpeedButton1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  with MediaPlayer1 do
    begin
      FileName:=ExtractFilePath(ParamStr(0)) + 'C1.mp3';
      Open;
      Play;
    end;
end;

procedure TForm1.SpeedButton1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  MediaPlayer1.Stop;
end;

procedure TForm1.SpeedButton2MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  with MediaPlayer2 do
    begin
      FileName:=ExtractFilePath(ParamStr(0)) + 'Dis1.mp3';
      Open;
      Play;
    end;
end;

procedure TForm1.SpeedButton2MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  MediaPlayer2.Stop;
end;

itd... przycisków jest 24. Czy da się stworzyć jakieś np 2 procedury MouseDown i MouseUp i tylko w zależności od danego przycisku wywołają one odpowiedni dźwięk bądź go zatrzymają?

Proszę o poradę
I przepraszam za problem

0

da sie. poczytaj o sender'ze, to powinno Cie naprowadzic na rozwiazanie problemu:
http://www.lukas-home-page.ovh.org/artykuly/delphi-parametr_sender.php
http://delphi.about.com/od/objectpascalide/a/sender.htm

0

Tak, z RTTI.

if Sender is Butten1 then
  ...
else if Sender is Button2 then
   ...
;
1
vt napisał(a)

Tak, z RTTI.

if Sender is Butten1 then
  ...
else if Sender is Button2 then
   ...
;

Tak i jeszcze w sumie tak 24 razy. Bez sensu. Dla tejkiej ilosći przyciski należy stworzyć oczywiście dynamicznie w pętli. Nadać im
na przykład przy tworzeniu własnośc liczbową Tag oraz współne procedury dla zdarzen, w ktorych sprawdzić należy Tag Sendera.

1

W końcu wczoraj rozwiązałem to tak:

procedure TForm1.SpeedButton1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  with MediaPlayer1 do
    begin
      FileName:=IntToStr(TSpeedButton(Sender).Tag)+'.wav';
      Open;
      Play;
    end;
end; 

i każdy SpeedButton miał przypisany inny tag, natomiast pliki nazywały się odpowiednio 1.wav, 2.wav, 3.wav itd.

I działa :)
Dzięki wszystkim za pomoc.

0

PlaySound-a sobie używaj do zwykłych "łejwów", jak to cimak zrobił.

1 użytkowników online, w tym zalogowanych: 0, gości: 1