Tema: puntero
Ver Mensaje Individual
  #8  
Antiguo 31-01-2008
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Reputación: 24
seoane Va por buen camino
Vamos a ver, tu tienes este procedure:
Código Delphi [-]
procedure TfrmMain.BufferFinished(var Msg: TMessage);
var
  hdr: PWaveHdr;
  i: integer;
  P: PByte;
begin
  hdr:= PWaveHdr(Msg.LParam);
  with hdr^ do
    begin
      P:= PByte(lpData);
      Canvas.FillRect(Canvas.ClipRect);
      Canvas.MoveTo(width,128);
      Canvas.LineTo(0,128);
      for i:= 1 to dwBytesRecorded  do
        begin
          Canvas.LineTo(i,P^);
          inc(P);
        end;
    end;

  if waveInPrepareHeader(Device,hdr,sizeof(TWAVEHDR))<>MMSYSERR_NOERROR then
     begin
       CloseWaveDevice;
       exit;
     end;
  if waveInAddBuffer(Device,hdr,sizeof(TWAVEHDR))<>MMSYSERR_NOERROR then
    begin
      CloseWaveDevice;
      exit;
    end;
end;

Pues deberías hacer algo como esto:
Código Delphi [-]
procedure TfrmMain.BufferFinished(var Msg: TMessage);
var
  hdr: PWaveHdr;
  i: integer;
  P: PByte;
  B: Byte;
begin
  hdr:= PWaveHdr(Msg.LParam);
  with hdr^ do
    begin
      P:= PByte(lpData);
      B:= 0;
      for i:= 1 to dwBytesRecorded  do
        begin
          if P^ > B then
            B:= P^;
          inc(P);
        end;
      // Aqui haz lo que quieras con B, por ejemplo
      ProgressBar1.Position:= B; 
      // O incluso esto otro
      dec(B,128);
      ProgressBar1.Position:= B; 
    end;

  if waveInPrepareHeader(Device,hdr,sizeof(TWAVEHDR))<>MMSYSERR_NOERROR then
     begin
       CloseWaveDevice;
       exit;
     end;
  if waveInAddBuffer(Device,hdr,sizeof(TWAVEHDR))<>MMSYSERR_NOERROR then
    begin
      CloseWaveDevice;
      exit;
    end;
end;
Responder Con Cita