PDA

Ver la Versión Completa : punteros en delphi


karen08
23-10-2007, 06:27:40
como realizar en delphi con punteros el avesedario es para ya porfa :)

Delphius
23-10-2007, 06:34:03
karen08,
Bienvenido/a a ClubDelphi.

Como recién te ingresas, te recomiendo una lectura a la guia de estilo (http://www.clubdelphi.com/foros/guiaestilo.php). Sobre todo considerando el hecho de que pides una "tarea" de mala manera. Aqui no hacemos las cosas con urgencia. Espero que sepas entender que aqui ayudamos desinteresadamente y empleamos el tiempo libre que dispongamos para ofrecer dicha ayuda.

Con respecto a tu pregunta, ¿Podrías detallar y profundizar más tu pregunta? No te cobramos por la cantidad de palabras. No logro entender y captar tu problema.

Saludos,

karen08
23-10-2007, 06:40:04
hola
disculpa por lo anterior....

solo que necesito saber como resover un ejercicio en delphi utilizando punteros, este consiste en que el programa debe mostrar el abesedario completo en una lista en un lis box

Delphius
23-10-2007, 06:50:52
karen08,
No es por malo... ¿Puedes indicar si lo que deseas es emplear una lista (estructura de datos abstracta) para mostrar el abecedario o por el contrario deseas mostrar en un ListBox? O en un tercer caso... ¿tienes una lista (la estructura de datos) y deseas mostrar dicha lista en un ListBox?

Como te dije, no te cobramos por las palabras. Cuanto más nos puedas decir mejor y es para ti y más fácil para nosotros tratar de encontrar una solución a los problemas.

Si tienes hecho ya un código sería bueno que lo expongas. Para que el código sea entendible, al copiarlo aquí encierralo entre las etiquetas DELPHI. Algo así:
[ DELPHI ] (sin los espacios)
aqui viene tu código...
[ /DELPHI ] (sin los espacios)

Si encuentro un moderador le pido que mueva este hilo a Varios que es el lugar indicado en donde tratar el tema. ¿Te parece?

Saludos,

karen08
23-10-2007, 06:59:50
hola
disculpa por lo anterior....

solo que necesito saber como resover un ejercicio en delphi utilizando punteros, este consiste en que el programa debe emplear una lista (estructura de datos abstracta)mostrar el abesedario completo en una lista en un lis box

while primernodo <>nil then
if primernodo^.letras> nuevonodo^.letras then
begin
nuevo^.putsig(primernodo)
primernodo:=nuevonodo;

Delphius
23-10-2007, 07:59:59
karen08, ese código no basta para saber donde tienes el problema. Debes proporcionar mayor información.

Se que cada uno tiene sus tiempos y sus prisas, pero con prisas y exponer menos que lo mínimo para poder ver tu problema no solucionas nada.

Se más consciente por favor y permite a los demás que te ayudemos. Da a conocer tu código con mayor claridad, con esas líneas poco puedo decirte. Te lo pido de la mejor manera posible, ayudanos a ayudarte. Sin ver más no puedo saber donde está el problema.

Saludos,

karen08
30-10-2007, 02:38:52
:confused:hola

saludos

la presente es para pedir una ayuda para resolver un problema que anteriormente habia anunciado en el club.

:(el problema consiste en diseñar e implementar una clase que permita crear una lista simple ordenada ascendentemente; y cada nodo debe almacenar una letra del alfabeto.

unit Uplista;
interface
type
TPclase=^TClistletras;
TClistletras=OBJECT
letras:string;
sig:TPclase;
procedure putletras(_letras:string);
procedure putsig(_sig:tpclase);
function getletras:string;
function getsig:tpclase;
constructor init;
destructor liberar;
procedure insertar(otronodo:tpclase);
end;
var
primernodo,anteriornodo,nuevonodo:tpclase;

implementation
uses Unit1;
{ TClistnum }
function TClistletras.getletras: string;
begin
Result:=letras;
end;
function TClistletras.getsig: tpclase;
begin
Result:=sig;
end;
constructor TClistletras.init;
begin
New(nuevonodo);
end;
procedure TClistletras.insertar(otronodo: tpclase);
begin
IF primernodo = NIL THEN
begin
primernodo:= otronodo;
anteriornodo:= otronodo;
anteriornodo^.sig:= nil;
End
else
Begin
anteriornodo^.sig:=otronodo;
anteriornodo:= otronodo;
anteriornodo^.sig:= nil;
End;
while primernodo <> nil do
if primernodo ^.letras > nuevonodo ^.letras then
begin
nuevonodo ^.putsig(primernodo);
primernodo:=nuevonodo;
end;
end;
destructor TClistletras.liberar;
begin
dispose(nuevonodo);
end;
procedure TClistletras.putletras(_letras: string);
begin
letras:= _letras;
end;
procedure TClistletras.putsig(_sig: tpclase);
begin
sig:= _sig;
end;

end.

Delphius
30-10-2007, 03:12:24
karen08,
Mil disculpas. Me he enredado con otros asuntos y se me olvidó de esto.
Estuve buscando entre mis apuntes de lenguaje aquellos ejercicios de punteros pues creía recordar que hice uno así... pero no los encontré. Quedaron en en Limbo del viejo disco duro...

No recuerdo mucho de pilas, colas y listas con punteros... por lo que no lo tengo demasiado fresco. Se que es algo simple, es cuestión de que haga memoria... y si me das hasta mañana te puedo adelantar algo como para que veas.

No quiero hacerte alegrar demasiado. Por lo que veo a simple vista hay unos errores:

La declaración correcta para conformar los nodos es así:

type
TNodo = ^Nodo
Nodo = record
Letra: char;
Sig: TNodo;
end;

En tu código estás mezclando objetos con la declaración de los nodos.
¿Debes crear una clase que implemente dichos procedimientos y que use internamente a la lista de nodos?

Si es así, la declaración de la clase es:

TClase = class
private
FList: TNodo; //FList mantendrá la lista de nodos
FPrimero, FUltimo, FAnterior: TNodo // auxiliares... para operar
FCuenta: integer; // puede ser util llevar la cuenta de letras
public
function Agregar(Letra: char): integer; //devolvería la posición
function GetLetra(Posic: integer): char;
constructor Create;
destructor Destroy;
end;

Según mi percepción Lo que se debe hacer es que si se necesita armar el abecedario sólo basta con emplear Agregar() que lo que hace es insertar al final de la lista el siguiente nodo con la info necesaria, y la función GetLetra que se encargaría de regresar la letra que se encuentre en la posición Posic (siempre y cuando existan una cantidad de nodos al menos igual a Posic)

De hecho... (según entiendo yo) para el uso de la clase no tendría sentido la función Agregar. Sino más bien que en Create tranquilamente se puede conseguir armar el abecedario en forma "automática". Ya que disponder de un Agregar() puede llevarnos a algo como esto:
ABDFTRUV y como bien sabemos... esto no es el abecedario.

Es decir que lo que yo haría es mover la declaración Agregar en private y llamarla dentro de Create. Algo así:


constructor TClase.Create;
begin
for i := 'A' to 'Z' do
Agregar(i);
end;


Y bueno... también debería disponer de un Eliminar, de modo que en Destroy podríamos hacer algo así:


while FList <> Nil do
Eliminar;

Obviamente Eliminar debería hacerlo desde el final o el principio (según como te resulte más cómodo).

Espero que te resulte útil estos tips. Como dije... dame un tiempito y te doy una muestra sencilla.

Saludos,

Delphius
30-10-2007, 05:40:27
Bueno. Lo prometido es deuda.
me tomé unos minutos y desarrollé un ejemplo implementando una estructura LIFO. Es decir una Cola. Lo que hice es implementar una classe TABC que viene con el código encapsulado para agregar, borrar, inicializar, etc..

¿Porqué una clase?
Pues a mi me da la impresión de que quieres intentar hacer una clase por lo de:

function TClistletras.getletras: string;
//...


Me he acostumbrado a codificar en Inglés o pseudoInglés... espero que no te moleste. Agregué los comentarios que me parecieron indicados exponer.

Bueno. La unidad es como sigue:

unit UABC;

interface

uses
Classes;

CONST
//Esta cadena sirve para cargar las letras
ABC = 'ABCDEFGHIJKLMNÑOPQRSTUVWXYZ';

type
// estructura de un nodo
TNode = ^Node;
Node = record
Character: char;
Sig: TNode;
end;

// Estructura de una clase que opera con una estructura LIFO (Cola)
// para armar un abecedario
// Debido a la simpleza de implementar una estructura LIFO
// se optó por este método
// Por tanto Z será el último elemento de la pila, y A el primero

// De forma análoga se puede conseguir mediante FIFO o una lista genérica
TABC = class
private
// Nuestro TOPE
Ftop: TNode;

// Inicilizar cola
procedure Init;

// Borrar o Limpiar cola
procedure Clear;
public
constructor Create;
destructor Destroy;

// Push = Agregar
procedure Push(Character: char);

// Pop = Eliminar
function Pop: char;

// IsEmpty = EsVacia
function IsEmpty: boolean;

// DevolverCaracter (no lo elimina, solo consulta)
function GetChar: char;
end;


implementation

procedure TABC.Push(Character: char);
var NewNode: TNode;
begin
new(NewNode);
NewNode.Character := Character;
NewNode.Sig := Nil;

if IsEmpty
then begin
// No tenía nodo
// NuevoNode es el primero
Ftop.Sig := NewNode;
end
else begin
// Hay más de un nodo
// TOPE siempre apunta al último nodo
NewNode.Sig := FTop.Sig;
FTop.Sig := NewNode;
end;
end;

function TABC.Pop: char;
var OldNode: TNode;
begin
if NOT IsEmpty
then begin
OldNode := FTop.Sig;

// devolvemos el carater del elemento TOPE
result := OldNode.Character;

// Eliminamos el elemento tope y TOPE apunta al siguiente en la
// cola
FTop.Sig := OldNode.Sig;
dispose(OldNode);
end;
end;

constructor TABC.Create;
begin
// reservamos el TOPE
new(FTop);
FTop.Sig := Nil;

// Iniciamos la cola...
Init;
end;

destructor TABC.Destroy;
begin
// Borramos la cola
Clear;

dispose(FTop);
end;

procedure TABC.Init;
var Pos: integer;
begin
// desde 1 hasta la longitud de la cadena ABC
for Pos := 1 to Length(ABC) do
// metemos en la pila el caracter Pos-ésimo de la cadena ABC
Push(ABC[Pos]);
end;

procedure TABC.Clear;
var Node: TNode;
begin
while NOT IsEmpty do
Pop;
end;

function TABC.IsEmpty: boolean;
begin
// TRUE si TOPE no apunta nada
// FALSE en cualquier otro caso
result := FTop.Sig = Nil;
end;

function TABC.GetChar: char;
begin
if NOT IsEmpty
then result := FTop.Sig.Character;
end;

end.


Un ejemplo de uso, cargando un ListBox:

procedure TForm1.Button1Click(Sender: TObject);
var ABCobj: TABC;
i: integer;
begin
ABCobj := TABC.Create;

for i := 1 to 27 do
ListBox1.Items.insert(0,ABCobj.pop);
Application.ProcessMessages;

ABCobj.Destroy;
end;

Creería que con eso puedes darte una idea de como implementarlo con otras estructuras, por ejemplo FIFO.

Si tienes dudas, avisa.
Saludos,

PD: Si algún moderador pasa por aquí, que mueva a este hilo a la sección adecuada ya que el tema no correspondería al subforo Internet.

karen08
05-11-2007, 04:09:37
hola

muchas gracias por lo del ejercicio del alfabeto me fue de mucha ayuda.

pero esta vez estoy necesitando de nuevo su ayuda necesito un ejercicio cual sea que contenga varios componentes de la barra standard o la aditional de delphi pero.. el ejercicio debe ser lo mas sencillo posible lo menos codigo posible pero que sea algo educativo. si esta a su alcance hacerme ese favor se lo voy a agradecer siempre igual que el anterior.

pueder ser que sume numeros lo que sea pero utilizando varios componentes de las barras de delphi

chaito

y de nuevo gracias

saludos:)

Delphius
05-11-2007, 10:18:44
hola

muchas gracias por lo del ejercicio del alfabeto me fue de mucha ayuda.

pero esta vez estoy necesitando de nuevo su ayuda necesito un ejercicio cual sea que contenga varios componentes de la barra standard o la aditional de delphi pero.. el ejercicio debe ser lo mas sencillo posible lo menos codigo posible pero que sea algo educativo. si esta a su alcance hacerme ese favor se lo voy a agradecer siempre igual que el anterior.

pueder ser que sume numeros lo que sea pero utilizando varios componentes de las barras de delphi

chaito

y de nuevo gracias

saludos:)
Karen08. Lo siento pero aqui no hacemos la tarea, o al menos hacemos lo posible para evitar llegar a ese extremo. Debo decir que me siento usado y aprovechado por mi amabilidad.
No es que esté enojado pero prefiero hacerte llamar por segunda vez que leas la guia de estilo.

Lo siento, esta vez no te voy a preparar un ejemplo. Aquel código que te expuse lo hice sólo con el fin de guia, y tu debías adaptarlo a tu entendimiento sobre el tema. Tal parece, y asi lo intuyo, que sólo te limitaste a usarla.

Ya te lo he pedido la otra vez: Explica mejor el problema. Da la mayor cantidad de detalles. Se bien descriptiva con la consigna y copia aquí el código que llevas hecho.
Esta vez serás tú quien logre resolverlo. Aquí estaré para ayudarte en algunos detalles técnicos más no para armar un ejemplo.

No estoy de malas, pero eres tu quien debe aprender a programar. Tu vienes a consultarnos y deberías ser tu quien ponga de su esfuerzo para conseguir la enseñanza y el aprendizaje. Para mi lo otro fue un repazo, ya pasé por eso.

Tienes en tus manos la ayuda de Delphi. Si desconoces lo que hacen los componentes tan sólo debes seleccionarlo, presionar F1 y accederás a la ayuda descriptiva de cada uno.
Ante mayores dudas, aqui pueden ser discutidas. Pero primero, como ya he dicho y espero que haya quedado en claro, aqui no te vamos a hacer la tarea.

Lamento decirtelo así, busqué las palabras menos ofensivas posibles. Espero que sepas entender que aqui nadie nos paga por venir y ayudar a los demás. Lo hacemos altruistamente y en el tiempo libre que dispongamos.

Saludos,

karen08
12-11-2007, 15:45:12
hola

entendi muy bien el mensaje de la otra vez, y es cierto ustedes solo son una ayuda, disculpa de todas formas por haber sido asi.

hoy le quiero contar que estoy trabajando un programita muy sencillo con un combobox que desapliega una lista de numeros del 1 al 10 y los muestra al frente con un label pero, me encantaria meterle algo de sonido y no se que componente usar ni como usarlo y no se si usted me podria ayudar explicando me esto, abajo le envio el codigo que tengo.

mi idea es que cuando se escoja el numero salga la voz que yo grabaria diciendo el numero.

le agradesco escribirme en español si no es mucha molestia

saludos:)


[
Unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, jpeg, ExtCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
ComboBox1: TComboBox;
Button1: TButton;
procedure ComboBox1Change(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
case combobox1.ItemIndex of
0:label1.Caption:= 'ONE';
1:label1.Caption:= 'TWO';
2:label1.Caption:= 'THREE';
3:label1.Caption:= 'FOUR';
4:label1.Caption:= 'FIVE';
5:label1.Caption:= 'SEX';
6:label1.Caption:= 'SEVEN';
7:label1.Caption:= 'EIGHT';
8:label1.Caption:= 'NINE';
9:label1.Caption:= 'TEN';
END;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
CLOSE;
end;
end.
]

Ivanzinho
12-11-2007, 15:54:03
Hola, karen08, te recomiendo que leas la guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php). Para una nueva duda debes crear un nuevo hilo en el lugar adecuado.

Para hacer lo que necesitas puedes usar el componente TMediaPlayer de la pestaña 'System'.

Un saúdo.

Delphius
12-11-2007, 15:55:26
Hola Karen08, me alegro de que hayas entendido mis palabras y no haya malentendidos.

Con respecto a tu problema lo puedes solucionar con el TMediaPlayer, un componente de la paleta System. Dicho componente tiene una propiedad FileName, allí le ingresas el Path completo del archivo audio, luego cuando desees reproducir el archivo debes llamar a Open y seguidamente a Play. Puedes consulta el buscador (http://www.clubdelphi.com/foros/search.php) de los foros porque el tema fue tratado.
Por cierto: si no te gusta la apariencia del TMediaPlayer, lo ocultas poniendo visible a False.

Ya que estoy por aqui, y no por ser cortante. Como tus dudas vienen a ser der otra temática, lo correcto sería que hubieras abierto otro hilo. Esto está expresado en la guia de estilo, pero no hay problema... te estás adaptando.

Saludos,

karen08
12-11-2007, 16:02:50
hola

disculpa pero mi interogante es como se programa ese componente porque para mi es desconocido, nunca lo habia usado que pena solo necesito una pequeña esxplicacion y yo estoy segura que lo hago.

saludos:confused:

Delphius
12-11-2007, 16:11:51
Karen08,
Arrastra el componente,
y el evento onChange del Combo, debes hacer algo como esto:

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
MediaPlayer1.FileName := 'El Path completo donde está el archivo';
MediaPlayer1.Open;
MediaPlayer1.Play;
end;

Obviamente no debes sustituir tu código anterior. Sino que debes adapta al código que te muestro de la forma que mantenga la coherencia con el tuyo. Por ejemplo, dentro del case:
case ... of
0: begin
Label1.Caption := ....
MediaPlayer1.FileName ....
end;

No tiene demasiada ciencia el TMediaPlayer. Si tienes más dudas, haz una búsqueda que en reiteradas ocasiones se ha preguntado sobre el componente.

Saludos,

karen08
12-11-2007, 16:22:12
hola

tambien me digeron que utizara el procedimiento beep que sabe usten de eso, como lo utilizaria para poner el sonido a cada numero cuando sea seleccionado.

ahh la ubicacion de de la cancion que voy mostrar con media player es por ejemplo SI LA TENGO EN DISCO D o en mis documentos.

saludos.:)

Delphius
12-11-2007, 16:37:36
hola

tambien me digeron que utizara el procedimiento beep que sabe usten de eso, como lo utilizaria para poner el sonido a cada numero cuando sea seleccionado.

ahh la ubicacion de de la cancion que voy mostrar con media player es por ejemplo SI LA TENGO EN DISCO D o en mis documentos.

saludos.:)
Karen08, Kareon08, Karen08... no seas tan impulsiva ¿Consideraste primero realizar la búsqueda que te aconsejo? ¿Analizaste el código que te expuse?

Beep no se ajusta a lo que buscas. Este procedimento se limita a emitir un sonido como los de advertencia.

Por otro lado, ¿que has querido decir con el hecho de que si tienes el archivo de audio en Disco D, o en mis documentos?
La Path completa está constituída por el directorio donde está el archivo más el nombre y la extensión de dicho archivo. Por ejemplo:

C:\BLA\BLA\unarchivo.mp3

No interesa donde se encuentre el archivo siempre y cuando sepas el directorio va a andar. No se a que te refieres con dicha pregunta, por favor toma tu tiempo para formular las preguntas, analiza objetivamente las propuestas y consejos que te damos...

Saludos,

karen08
12-11-2007, 17:59:17
hola

tengo lo siguiente pero,


unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, jpeg, ExtCtrls, MPlayer;
type
TForm1 = class(TForm)
Label1: TLabel;
ComboBox1: TComboBox;
Button1: TButton;
MediaPlayer1: TMediaPlayer;
procedure ComboBox1Change(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
MediaPlayer1.FileName := 'D:\bajados\date la vuelta.mp3';
MediaPlayer1.Open;
MediaPlayer1.Play;
end;

case combobox1.ItemIndex of
0: begin
Label1.Caption := ' ';
MediaPlayer1.FileName := 'D:\bajados\one.mp3';
end;
0:label1.Caption:= 'ONE';
1:label1.Caption:= 'TWO';
2:label1.Caption:= 'THREE';
3:label1.Caption:= 'FOUR';
4:label1.Caption:= 'FIVE';
5:label1.Caption:= 'SEX';
6:label1.Caption:= 'SEVEN';
7:label1.Caption:= 'EIGHT';
8:label1.Caption:= 'NINE';
9:label1.Caption:= 'TEN';
END;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
CLOSE;
end;
end.


lo deseado es que para cada numero me salga una musica si me entiendes, yasi saldra un solo sonido para todos. la idea es que cuando yo seleccione del combobox el numero el muestre el nombre en el label1 que esta en blanco y salga el sonido one, cuando coja el 1, two cuando coja el 2 y asi..............................

que me sugieres


saludos:confused:

Delphius
12-11-2007, 18:06:15
Karen08,
Por favor emplea las etiquetas y
Para que el código delphi quede resaltado y se entienda mejor.

Con respecto al problema se soluciona dentro del mismo case. La estructura debe repetirse para cada valor, tu sólo lo haz hecho para el UNO.

case combobox1.ItemIndex of
0: begin
Label1.Caption := ...
MediaPlayer1.FileName := ....
end;
1: begin
Label1.Caption := ...
MediaPlayer1.FileName := ....
end;
...
10: begin
Label1.Caption := ...
MediaPlayer1.FileName := ....
end;
end; // fin case
MediaPlayer1.Open;
MediaPlayer1.Play;

Saludos,

Ivanzinho
12-11-2007, 18:08:29
Eso que preguntas te lo respondió Delphius en uno de los post anteriores. Te recomiendo el uso de las etiquetas para hacer el código más entendible.

Un saúdo.

karen08
12-11-2007, 18:52:10
hola



unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, jpeg, ExtCtrls, MPlayer;
type
TForm1 = class(TForm)
Label1: TLabel;
ComboBox1: TComboBox;
Button1: TButton;
MediaPlayer1: TMediaPlayer;
procedure ComboBox1Change(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
MediaPlayer1.FileName := 'D:\bajados\sonidos\';
MediaPlayer1.Open;
MediaPlayer1.Play;
end;

case combobox1.ItemIndex of
0: begin
Label1.Caption := 'ONE';
MediaPlayer1.FileName := 'D:\bajados\one.mp3';
end;
1: begin
Label1.Caption := 'TWO';
MediaPlayer1.FileName := 'D:\bajados\two.mp3';
end;
2: begin
Label1.Caption := 'THREE';
MediaPlayer1.FileName := 'D:\bajados\three.mp3';
end;
3: begin
Label1.Caption := 'FOUR';
MediaPlayer1.FileName := 'D:\bajados\four.mp3';
end;
4: begin
Label1.Caption := 'FIVE';
MediaPlayer1.FileName := 'D:\bajados\five.mp3';
end;
5: begin
Label1.Caption := 'SIX';
MediaPlayer1.FileName := 'D:\bajados\six.mp3';
end;
6: begin
Label1.Caption := 'SEVEN';
MediaPlayer1.FileName := 'D:\bajados\seven.mp3';
end;
7: begin
Label1.Caption := 'EIGHT';
MediaPlayer1.FileName := 'D:\bajados\eight.mp3';
end;
8: begin
Label1.Caption := 'NINE';
MediaPlayer1.FileName := 'D:\bajados\nine.mp3';
end;
9: begin
Label1.Caption := 'TEN';
MediaPlayer1.FileName := 'D:\bajados\ten.mp3';
end;
end; // fin case
MediaPlayer1.Open;
MediaPlayer1.Play;
0:label1.Caption:= 'ONE';
1:label1.Caption:= 'TWO';
2:label1.Caption:= 'THREE';
3:label1.Caption:= 'FOUR';
4:label1.Caption:= 'FIVE';
5:label1.Caption:= 'SEX';
6:label1.Caption:= 'SEVEN';
7:label1.Caption:= 'EIGHT';
8:label1.Caption:= 'NINE';
9:label1.Caption:= 'TEN';
END;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
CLOSE;
end;
end.




procedure TForm1.ComboBox1Change(Sender: TObject);
begin
MediaPlayer1.FileName := 'D:\bajados\sonidos\----------.mp3';
MediaPlayer1.Open;
MediaPlayer1.Play;
end;


como hago para que los sonidos salgan automaticos solamente al escoger la opcion en el combobox y ademas que archivo colocaria en el procedimiento anterior si ya he asignado cada archivo de sonido en el case de cada uno.

karen08
12-11-2007, 18:53:45
hola


Código Delphi [-] (http://www.clubdelphi.com/foros/#)

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, jpeg, ExtCtrls, MPlayer;
type
TForm1 = class(TForm)
Label1: TLabel;
ComboBox1: TComboBox;
Button1: TButton;
MediaPlayer1: TMediaPlayer;
procedure ComboBox1Change(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
MediaPlayer1.FileName := 'D:\bajados\sonidos\';
MediaPlayer1.Open;
MediaPlayer1.Play;
end;

case combobox1.ItemIndex of
0: begin
Label1.Caption := 'ONE';
MediaPlayer1.FileName := 'D:\bajados\one.mp3';
end;
1: begin
Label1.Caption := 'TWO';
MediaPlayer1.FileName := 'D:\bajados\two.mp3';
end;
2: begin
Label1.Caption := 'THREE';
MediaPlayer1.FileName := 'D:\bajados\three.mp3';
end;
3: begin
Label1.Caption := 'FOUR';
MediaPlayer1.FileName := 'D:\bajados\four.mp3';
end;
4: begin
Label1.Caption := 'FIVE';
MediaPlayer1.FileName := 'D:\bajados\five.mp3';
end;
5: begin
Label1.Caption := 'SIX';
MediaPlayer1.FileName := 'D:\bajados\six.mp3';
end;
6: begin
Label1.Caption := 'SEVEN';
MediaPlayer1.FileName := 'D:\bajados\seven.mp3';
end;
7: begin
Label1.Caption := 'EIGHT';
MediaPlayer1.FileName := 'D:\bajados\eight.mp3';
end;
8: begin
Label1.Caption := 'NINE';
MediaPlayer1.FileName := 'D:\bajados\nine.mp3';
end;
9: begin
Label1.Caption := 'TEN';
MediaPlayer1.FileName := 'D:\bajados\ten.mp3';
end;
end; // fin case
MediaPlayer1.Open;
MediaPlayer1.Play;
0:label1.Caption:= 'ONE';
1:label1.Caption:= 'TWO';
2:label1.Caption:= 'THREE';
3:label1.Caption:= 'FOUR';
4:label1.Caption:= 'FIVE';
5:label1.Caption:= 'SEX';
6:label1.Caption:= 'SEVEN';
7:label1.Caption:= 'EIGHT';
8:label1.Caption:= 'NINE';
9:label1.Caption:= 'TEN';
END;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
CLOSE;
end;
end.







Código Delphi [-] (http://www.clubdelphi.com/foros/#)
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
MediaPlayer1.FileName := 'D:\bajados\sonidos\----------.mp3';
MediaPlayer1.Open;
MediaPlayer1.Play;
end;





como hago para que los sonidos salgan automaticos solamente al escoger la opcion en el combobox y ademas que archivo colocaria en el procedimiento anterior si ya he asignado cada archivo de sonido en el case de cada uno.:)

Ivanzinho
13-11-2007, 08:42:45
hola

como hago para que los sonidos salgan automaticos solamente al escoger la opcion en el combobox y ademas que archivo colocaria en el procedimiento anterior si ya he asignado cada archivo de sonido en el case de cada uno.:)

El case tiene que ir en el evento OnChange del listbox en lugar de la línea MediaPlayer1.FileName := 'D:\bajados\sonidos\';

Un saúdo

Delphius
13-11-2007, 15:08:53
Karen08,
¿Eso te compila?:confused:
Yo le veo un par de errores. Lo que tu deseas realizar debe ir todo en el evento onChange. Así:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, MPlayer, StdCtrls;

type
TForm1 = class(TForm)
ComboBox1: TComboBox;
Label1: TLabel;
MediaPlayer1: TMediaPlayer;
Button1: TButton;
procedure ComboBox1Change(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
{ Lo siguiente está de más!
MediaPlayer1.FileName := 'D:\bajados\sonidos\';
MediaPlayer1.Open;
MediaPlayer1.Play; }

{end; ¡Este en está de más! }

// ´Paso 1: Elegimos un archivo
case combobox1.ItemIndex of
0: begin
Label1.Caption := 'ONE';
MediaPlayer1.FileName := 'D:\bajados\one.mp3';
end;
1: begin
Label1.Caption := 'TWO';
MediaPlayer1.FileName := 'D:\bajados\two.mp3';
end;
2: begin
Label1.Caption := 'THREE';
MediaPlayer1.FileName := 'D:\bajados\three.mp3';
end;
3: begin
Label1.Caption := 'FOUR';
MediaPlayer1.FileName := 'D:\bajados\four.mp3';
end;
4: begin
Label1.Caption := 'FIVE';
MediaPlayer1.FileName := 'D:\bajados\five.mp3';
end;
5: begin
Label1.Caption := 'SIX';
MediaPlayer1.FileName := 'D:\bajados\six.mp3';
end;
6: begin
Label1.Caption := 'SEVEN';
MediaPlayer1.FileName := 'D:\bajados\seven.mp3';
end;
7: begin
Label1.Caption := 'EIGHT';
MediaPlayer1.FileName := 'D:\bajados\eight.mp3';
end;
8: begin
Label1.Caption := 'NINE';
MediaPlayer1.FileName := 'D:\bajados\nine.mp3';
end;
9: begin
Label1.Caption := 'TEN';
MediaPlayer1.FileName := 'D:\bajados\ten.mp3';
end;
end; // fin case

// Paso 2: Una vez elegida la música, abrimos y reproducidos
// el archivo
MediaPlayer1.Open;
MediaPlayer1.Play;
{ LO que sigue está de más!
0:label1.Caption:= 'ONE';
1:label1.Caption:= 'TWO';
2:label1.Caption:= 'THREE';
3:label1.Caption:= 'FOUR';
4:label1.Caption:= 'FIVE';
5:label1.Caption:= 'SEX';
6:label1.Caption:= 'SEVEN';
7:label1.Caption:= 'EIGHT';
8:label1.Caption:= 'NINE';
9:label1.Caption:= 'TEN'; }
end; {Fin evento onChange}

procedure TForm1.Button1Click(Sender: TObject);
begin
close;
end;

end.


No es por malo, pero deberías prestar mayor atención a la lógica de tu aplicativo. Compara tu código con este. Lo que está en comentarios o es porque está de más o es para hacer algunas notas aclaratorias.
Los códigos que te vinimos proporcionando debías ajustarlo a tus necesidades, tal parece que el error se debió a que viniste copiando y pegado y haciendo pruebas... No está mal, asi se aprende. Así aprendí yo.

Recuerda que preferimos dar TIPs antes de ofrecer una solución, al menos yo, considero que de esta manera se invita al que inició el hilo a pensar y fomentar el arte de la lógica, y por consiguiente comprende por si mismo donde está su error.

Espero que no te moleste.
Saludos,