Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-01-2008
gaston260 gaston260 is offline
Miembro
 
Registrado: ene 2008
Posts: 169
Poder: 17
gaston260 Va por buen camino
puntero

buenas tardes !

Mi pregunte es la siguiente ¿ como puedo camviar un valor de un puntero a entero ? , mi codigo es el siguiente

Código Delphi [-]
 
procedure TfrmMain.BufferFinished(var Msg: TMessage);
var
hdr: PWaveHdr;
P: PByte;
begin
hdr:= PWaveHdr(Msg.LParam);
with hdr^ do
begin
P:= PByte(lpData);
gauge1.Progress :=(integer (p^));
Out32(StrToInt(txtpuertobucle.text), i)
end;
end.

espero que me aya explicado correctamente
Responder Con Cita
  #2  
Antiguo 30-01-2008
gaston260 gaston260 is offline
Miembro
 
Registrado: ene 2008
Posts: 169
Poder: 17
gaston260 Va por buen camino
ok ! si alguien quiere responder mi pregunta o mandar algun comentario mi mail es ¡no pedir información por correo!, ya se que (integer (p^)) esta mal escrito , gracias de antemano a todos !!

Última edición por jachguate fecha: 30-01-2008 a las 23:08:15. Razón: No pedir información por correo!
Responder Con Cita
  #3  
Antiguo 30-01-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Hola.

En primer lugar, bienvenid@ al clubdelphi. Te recomiendo leer la guia de estilo. Verás que pedir respuestas por correo electrónico no está permitido en estos foros.

Sobre tu pregunta, te recuerdo que un byte es un entero.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #4  
Antiguo 31-01-2008
gaston260 gaston260 is offline
Miembro
 
Registrado: ene 2008
Posts: 169
Poder: 17
gaston260 Va por buen camino
perdon por no leer la guia de estilo , prometo leerla en breve y espero que me puedan ayudar , a esta la veo fea jaja ya que estoy estudiando este lenguaje y cuando estavamos a punto de entrar en punteros paramos por las vacaciones y por el estres del trabajo mas que todo , les comento que mi proyecto tiene como fin reproducir el sonido mediante un gauge a modo de vu-metro y que el codigo lo consegui en este muy buen foro y se llama onda.zip , en este momento no me acuerdo quien lo dejo avilitado para la descarga , este codigo (onda.zip) muestra la onda que arroja un sonido 'x' mediante canvas , el codigo modificado con gauge deveria poder mostrar la señal sonora y de hecho lo hace , pero sin sonido alguno me indica que tengo el 41% de sonido 1ª
error , el 2ª es que en la salida del puerto paralelo los led's que tengo conectados a una plaqueta a modo de tester me indican que no tengo un valor entero de 1 a 255 y creo que tengo que convertir el valor del puntero , alguien tiene idea de como convertir el puntero a otros valores ??

gracias a todos !!
Responder Con Cita
  #5  
Antiguo 31-01-2008
gaston260 gaston260 is offline
Miembro
 
Registrado: ene 2008
Posts: 169
Poder: 17
gaston260 Va por buen camino
bien mi pregunta es como convertir el valor de un puntero a otros valores
o donde puedo obtener esa informacion y perdon de nuevo si cometi algun error en mi comentario anterior
Responder Con Cita
  #6  
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
Poder: 24
seoane Va por buen camino
Vamos por partes, lo valores de los que hablas van del 0 al 255, pero para obtener el valor "real" hay que restarle 128. Por este motivo, para un valor de 0 en la entrada, es decir sin sonido, el valor que obtienes es de 128.

Por otro lado, en el programa que mencionas puedes ver que para obtener el byte al que apunta el puntero solo hay que poner a continuación el símbolo ^. Como ya te dijo jachguate el tipo byte es un entero, no hace falta conversión, algo como esto es completamente valido:
Código Delphi [-]
var
  i: Integer;
begin
  

  i:= b^;
end;
La razón por la que se muestra mal en la placa que tienes conectada en el puerto paralelo ya depende de como funcione la placa y los parámetros que espera recibir. De todas formas, si quieres hacer un vumeter deberías de tomar el valor máximo de cada buffer y ser ese el que se muestra, de lo contrario los valores cambiaran tan rápidamente que apenas apreciaras nadas, solo luces parpadeando.
Responder Con Cita
  #7  
Antiguo 31-01-2008
gaston260 gaston260 is offline
Miembro
 
Registrado: ene 2008
Posts: 169
Poder: 17
gaston260 Va por buen camino
gracias por responder !!

tenes ! yo hice una prueva no hace mucho y el 41% corresponde a 128 , perfecto lo que no entiendo es como tomar el valor máximo de cada buffer , me podrias encaminar porfavor ??
Responder Con Cita
  #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
Poder: 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
  #9  
Antiguo 31-01-2008
gaston260 gaston260 is offline
Miembro
 
Registrado: ene 2008
Posts: 169
Poder: 17
gaston260 Va por buen camino
gracias por darme ese dato , tal ves no pueda contestar por el momento pero mañana volvere !!

gracias al club y a todos , en especial a seoane y a jachguate !!
Responder Con Cita
  #10  
Antiguo 01-02-2008
gaston260 gaston260 is offline
Miembro
 
Registrado: ene 2008
Posts: 169
Poder: 17
gaston260 Va por buen camino
maestro funciono perfecto permitame una modificacion en la linea (dec(B,128); por dec(B,124) ya que sin sonido alguno el progress marcaba 100% , con esta modificacion anda perfecto

¿ es posible tener varios progress y a cada uno dividirlo para que responda a una frecuencia determinada tal cual como en el winamp o el reproductor de windows ?
Responder Con Cita
  #11  
Antiguo 01-02-2008
gaston260 gaston260 is offline
Miembro
 
Registrado: ene 2008
Posts: 169
Poder: 17
gaston260 Va por buen camino
voy a explicar mejor mi pregunta ¿ es posible tener varios progress y a cada uno asignarle una frecuencia distinta tal cual como en el winamp o el reproductor de ?

muchas gracias por dedicar su tiempo en leer mi pregunta !
Responder Con Cita
  #12  
Antiguo 01-02-2008
gaston260 gaston260 is offline
Miembro
 
Registrado: ene 2008
Posts: 169
Poder: 17
gaston260 Va por buen camino
espero que este salga mejor jaja ¿ es posible tener varios progress y a cada uno asignarle una rango de frecuencia distinta ?

gracias por dedicar su tiempo en leer mi pregunta !!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
ayuda con puntero lmcz OOP 1 19-10-2007 14:46:54
Puntero Humano vtdeleon La Taberna 14 16-02-2007 21:41:10
puntero *pantalla en c++ coletaun Varios 15 21-07-2006 14:46:04
puntero a imagen Abaddon Gráficos 9 16-06-2005 00:17:29
Puntero a Stream Enan0 Varios 3 22-03-2005 22:08:13


La franja horaria es GMT +2. Ahora son las 13:52:30.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi