2016-09-07 2 views
2

Je veux créer deux boutons adjacents les uns aux autres dans le coin inférieur gauche de toutes les pages comme rechargé.Comment faire des boutons Arrêter et Pause/Reprendre/Jouer de la musique dans Inno Setup

Le premier bouton affiche la Pause et la commande Reprendre (si je clique Pause, le bouton passe à CV automatiquement).

L'autre bouton affiche la commande d'arrêt (si je clique Arrêter, le bouton suivant passera à Lecture du début automatiquement)

Ce code ajoute que Pause/Reprise/Play de * commencer à bouton et arrêt bouton

le problème est le suivant: Si j'appuyez sur le bouton Arrêter , la musique st ops en permanence et le bouton Play form start ne s'affiche jamais.

[Setup] 
AppName=Bass Audio Project 
AppVersion=1.0 
DefaultDirName={pf}\Bass Audio Project 

[Files] 
Source: Bass.dll; Flags: dontcopy 
Source: AudioFile.mp3; Flags: dontcopy 


[Code] 
const 
    BASS_SAMPLE_LOOP = 4; 
    BASS_ACTIVE_STOPPED = 0; 
    BASS_ACTIVE_PLAYING = 1; 
    BASS_ACTIVE_STALLED = 2; 
    BASS_ACTIVE_PAUSED = 3; 
    BASS_UNICODE = $80000000; 
    BASS_CONFIG_GVOL_STREAM = 5; 
const 
    #ifndef UNICODE 
    EncodingFlag = 0; 
    #else 
    EncodingFlag = BASS_UNICODE; 
    #endif 
type 
    HSTREAM = DWORD; 

function BASS_Init(device: LongInt; freq, flags: DWORD; 
    win: HWND; clsid: Cardinal): BOOL; 
    external '[email protected]:bass.dll stdcall'; 
function BASS_StreamCreateFile(mem: BOOL; f: string; offset1: DWORD; 
    offset2: DWORD; length1: DWORD; length2: DWORD; flags: DWORD): HSTREAM; 
    external '[email protected]:bass.dll stdcall'; 
function BASS_Start: BOOL; 
    external '[email protected]:bass.dll stdcall'; 
function BASS_Pause: BOOL; 
    external '[email protected]:bass.dll stdcall'; 
function BASS_Stop(): Boolean; 
    external '[email protected]:BASS.dll stdcall delayload'; 
function BASS_ChannelPlay(handle: DWORD; restart: BOOL): BOOL; 
    external '[email protected]:bass.dll stdcall'; 
function BASS_SetConfig(option: DWORD; value: DWORD): BOOL; 
    external '[email protected]:bass.dll stdcall'; 
function BASS_ChannelIsActive(handle: DWORD): DWORD; 
    external '[email protected]:bass.dll stdcall'; 
function BASS_Free: BOOL; 
    external '[email protected]:bass.dll stdcall'; 

var 
    SoundStream: HSTREAM; 
    PauseResumePlayButton: TNewButton; 
    StopButton: TNewButton; 

procedure ResumeButtonClick(Sender: TObject); forward; 

procedure PauseButtonClick(Sender: TObject); 
begin 
    if BASS_Pause then 
    begin 
    PauseResumePlayButton.Caption := 'Resume'; 
    PauseResumePlayButton.OnClick := @ResumeButtonClick; 
    end; 
end; 

procedure ResumeButtonClick(Sender: TObject); 
begin 
    if BASS_start then 
    begin 
    PauseResumePlayButton.Caption := 'Pause'; 
    PauseResumePlayButton.OnClick := @PauseButtonClick; 
    end; 
end; 

procedure PlayButtonClick(Sender: TObject); 
begin 
    if BASS_Start then 
    begin 
    PauseResumePlayButton.Caption := 'Pause'; 
    PauseResumePlayButton.OnClick := @PauseButtonClick; 
    end; 
end; 


procedure StopButtonClick(Sender: TObject); 
begin 
    if BASS_Stop then 
    begin 
    PauseResumePlayButton.Caption := 'Play'; 
    PauseResumePlayButton.OnClick := @PlayButtonClick; 
    end; 
     begin 
     BASS_Free; 
     end; 
end; 

procedure InitializeWizard(); 
begin 
    ExtractTemporaryFile('AudioFile.mp3'); 
    if BASS_Init(-1, 44100, 0, 0, 0) then 
    begin 
    SoundStream := 
     BASS_StreamCreateFile(
     False, ExpandConstant('{tmp}\AudioFile.mp3'), 0, 0, 0, 0, 
     EncodingFlag or BASS_SAMPLE_LOOP); 
    BASS_SetConfig(BASS_CONFIG_GVOL_STREAM, 2500); 
    BASS_ChannelPlay(SoundStream, False); 

    StopButton := TNewButton.Create(WizardForm); 
    StopButton.Parent := WizardForm; 
    StopButton.Left := 
     WizardForm.ClientWidth - 
     WizardForm.CancelButton.Left - WizardForm.CancelButton.Width; 
    StopButton.Top := WizardForm.CancelButton.Top; 
    StopButton.Width := WizardForm.CancelButton.Width; 
    StopButton.Height := WizardForm.CancelButton.Height; 
    StopButton.Caption := 'Stop'; 
    StopButton.OnClick := @StopButtonClick; 

    PauseResumePlayButton := TNewButton.Create(WizardForm); 
    PauseResumePlayButton.Parent := WizardForm; 
    PauseResumePlayButton.Left := 
     WizardForm.ClientWidth - 
     WizardForm.NextButton.Left - WizardForm.NextButton.Width; 
    PauseResumePlayButton.Top := WizardForm.CancelButton.Top; 
    PauseResumePlayButton.Width := WizardForm.CancelButton.Width; 
    PauseResumePlayButton.Height := WizardForm.CancelButton.Height; 
    PauseResumePlayButton.Caption := 'Pause'; 
    PauseResumePlayButton.OnClick := @PauseButtonClick; 
    end; 
end; 

procedure DeinitializeSetup; 
begin 
    BASS_Free; 
end; 
+0

Avez-vous essayé quoi que ce soit de votre côté. S'il vous plaît fournir les codes que vous avez essayé. Merci – Biswas

+0

le code est fourni ci-dessus désolé de ne pas poster le code plus tôt –

+0

@TLama pouvez-vous m'aider s'il vous plaît –

Répondre

1

Ce n'est pas une bonne idée de mettre en œuvre cette aide d'un seul gestionnaire OnClick.

Modifiez le gestionnaire OnClick à la volée, au besoin, pour le code plus simple:

const 
    BASS_SAMPLE_LOOP = 4; 
    BASS_ACTIVE_STOPPED = 0; 
    BASS_ACTIVE_PLAYING = 1; 
    BASS_ACTIVE_STALLED = 2; 
    BASS_ACTIVE_PAUSED = 3; 
    BASS_UNICODE = $80000000; 
    BASS_CONFIG_GVOL_STREAM = 5; 
const 
    #ifndef UNICODE 
    EncodingFlag = 0; 
    #else 
    EncodingFlag = BASS_UNICODE; 
    #endif 
type 
    HSTREAM = DWORD; 

function BASS_Init(device: LongInt; freq, flags: DWORD; 
    win: HWND; clsid: Cardinal): Boolean; 
    external '[email protected]:bass.dll stdcall'; 
function BASS_StreamCreateFile(mem: Boolean; f: string; offset1: DWORD; 
    offset2: DWORD; length1: DWORD; length2: DWORD; flags: DWORD): HSTREAM; 
    external '[email protected]:bass.dll stdcall'; 
function BASS_ChannelPlay(handle: DWORD; restart: Boolean): Boolean; 
    external '[email protected]:bass.dll stdcall'; 
function BASS_ChannelPause(handle: DWORD): Boolean; 
    external '[email protected]:bass.dll stdcall'; 
function BASS_SetConfig(option: DWORD; value: DWORD): Boolean; 
    external '[email protected]:bass.dll stdcall'; 
function BASS_ChannelIsActive(handle: DWORD): DWORD; 
    external '[email protected]:bass.dll stdcall'; 

var 
    SoundStream: HSTREAM; 
    PauseResumePlayButton: TNewButton; 
    StopButton: TNewButton; 

procedure ResumeButtonClick(Sender: TObject); forward; 

procedure PauseButtonClick(Sender: TObject); 
begin 
    if BASS_ChannelPause(SoundStream) then 
    begin 
    PauseResumePlayButton.Caption := 'Resume'; 
    PauseResumePlayButton.OnClick := @ResumeButtonClick; 
    end; 
end; 

procedure ResumeButtonClick(Sender: TObject); 
begin 
    if BASS_ChannelPlay(SoundStream, False) then 
    begin 
    PauseResumePlayButton.Caption := 'Pause'; 
    PauseResumePlayButton.OnClick := @PauseButtonClick; 
    end; 
end; 

procedure PlayButtonClick(Sender: TObject); 
begin 
    if BASS_ChannelPlay(SoundStream, True) then 
    begin 
    PauseResumePlayButton.Caption := 'Pause'; 
    PauseResumePlayButton.OnClick := @PauseButtonClick; 
    end; 
end; 

procedure StopButtonClick(Sender: TObject); 
begin 
    if (BASS_ChannelIsActive(SoundStream) = BASS_ACTIVE_PAUSED) or 
    BASS_ChannelPause(SoundStream) then 
    begin 
    PauseResumePlayButton.Caption := 'Play'; 
    PauseResumePlayButton.OnClick := @PlayButtonClick; 
    end; 
end; 

procedure InitializeWizard(); 
begin 
    ExtractTemporaryFile('AudioFile.mp3'); 

    if BASS_Init(-1, 44100, 0, 0, 0) then 
    begin 
    SoundStream := 
     BASS_StreamCreateFile(
     False, ExpandConstant('{tmp}\AudioFile.mp3'), 0, 0, 0, 0, 
     EncodingFlag or BASS_SAMPLE_LOOP); 

    if SoundStream <> 0 then 
    begin 
     BASS_SetConfig(BASS_CONFIG_GVOL_STREAM, 2500); 

     if BASS_ChannelPlay(SoundStream, False) then 
     begin 
     StopButton := TNewButton.Create(WizardForm); 
     StopButton.Parent := WizardForm; 
     StopButton.Left := 
      WizardForm.ClientWidth - 
      WizardForm.CancelButton.Left - WizardForm.CancelButton.Width; 
     StopButton.Top := WizardForm.CancelButton.Top; 
     StopButton.Width := WizardForm.CancelButton.Width; 
     StopButton.Height := WizardForm.CancelButton.Height; 
     StopButton.Caption := 'Stop'; 
     StopButton.OnClick := @StopButtonClick; 

     PauseResumePlayButton := TNewButton.Create(WizardForm); 
     PauseResumePlayButton.Parent := WizardForm; 
     PauseResumePlayButton.Left := 
      WizardForm.ClientWidth - 
      WizardForm.NextButton.Left - WizardForm.NextButton.Width; 
     PauseResumePlayButton.Top := WizardForm.CancelButton.Top; 
     PauseResumePlayButton.Width := WizardForm.CancelButton.Width; 
     PauseResumePlayButton.Height := WizardForm.CancelButton.Height; 
     PauseResumePlayButton.Caption := 'Pause'; 
     PauseResumePlayButton.OnClick := @PauseButtonClick; 
     end; 
    end; 
    end; 
end; 
  • Notez que vous avez appelé la BASS_StreamCreateFile, BASS_SetConfig et BASS_ChannelPlay deux fois avec les mêmes arguments. Cela n'a aucun sens. J'ai enlevé le deuxième ensemble.
  • J'ai également modifié le placement des boutons.

Music control buttons

+0

pouvez-vous me fournir le code complet s'il vous plaît? –

+0

Voir ma réponse mise à jour. –

+0

le ResumeButtonClick n'est pas le problème, il est StopButtonClick si je clique sur le bouton d'arrêt, les arrêts de musique et puis exécute instantanément whiteout en cliquant sur le bouton de lecture ** voir mon code mis à jour ** –