PDA

Ver la Versión Completa : Pregunta sobrelistbox


moise094
23-04-2012, 19:53:32
Tengo en un listbox un item mixto es decir por ejmplo JUAN 45, y quiero sumar un numero cualquiera con el numero 45 que puse de ejemplo, como se haria para extraer el numero 45 en un edit o algo por el estilo...????

moise094
23-04-2012, 19:56:06
mas conciso: como haria para extraer de un item mixto de un listbox el numero, por ejemplo teniendo en el item juan 45, extraerlo en un edit o cualquier cosa???

ecfisa
23-04-2012, 20:12:19
Hola moise094 y bienvenido a Club Delphi :)

Como a todos los que se inician te invitamos a que leas nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php).

Una opción puede ser:

function ExtraerNum(cad:string): string;
var
i: Integer;
begin
i:=0;
while not (cad[i] in ['0'..'9']) do Inc(i);
repeat
Result:= Result + cad[i];
Inc(i);
until not (cad[i] in ['0'..'9']);
end;


Ejemplo de uso:

procedure TForm1.ListBox1Click(Sender: TObject);
begin
with TListBox(Sender) do
Caption:= ExtraerNum(Items[ItemIndex]);
end;


Saludos.

Caro
23-04-2012, 20:24:49
Hola moise094, otra opción, si el número va a estar siempre al final separado por un espacio, podemos utilizar las funciones Pos y Copy.


var
PosIni : Integer;
Valor, item : String;
begin
item := ListBox1.Items[ListBox1.ItemIndex];
PosIni := Pos(' ', item);
Valor := Copy(item, PosIni+1, Length(item)-PosIni);
Showmessage(Valor);


en el caso de que haya mas espacios, primero encontramos el ultimo espacio para hacer el copy.

Saluditos

moise094
23-04-2012, 20:24:58
esa function de extraer numero la pongo en la parte private o public de la unidad del form???

moise094
23-04-2012, 20:28:37
El caso es el siguiente, voy a abrir un documento .txt en un listbox y este tiene:
JUAN 45
JOSE 56

y quiero que al abrir el archivo, me aparezca en un edit cualquiera el numero 45
es decir el listbox va siempre a tener varios items...

ecfisa
23-04-2012, 20:35:00
esa function de extraer numero la pongo en la parte private o public de la unidad del form???
Son funciónes no métodos por lo que básta con que las situes en la sección de implementación (implementation), aunque también podés hacerlas como un método privado o público.

Cualquiera de las funciones (la de Caro o la que te puse) van a realizar la tarea. Pero si el número siempre está al final y existe al menos un espacio entre nombre y número, es mejor que utilices la que te propuso Caro.

Saludos.

ecfisa
23-04-2012, 20:42:06
El caso es el siguiente, voy a abrir un documento .txt en un listbox y este tiene:
JUAN 45
JOSE 56

y quiero que al abrir el archivo, me aparezca en un edit cualquiera el numero 45
es decir el listbox va siempre a tener varios items...
Entonces sería:

procedure TForm1.ListBox1Click(Sender: TObject);
begin
with TListBox(Sender) do
Edit1.Text := ExtraerNum(Items[ItemIndex]);
end;

O dependiendo de lo que desees, también podrías hacer:

procedure TForm1.Edit1Enter(Sender: TObject);
begin
with ListBox1 do
Edit1.Text := ExtraerNum(Items[ItemIndex]);
end;

Siendo el código de la función ExtraerNum el que elijas.

Saludos.

Caro
23-04-2012, 20:53:39
El caso es el siguiente, voy a abrir un documento .txt en un listbox y este tiene:
JUAN 45
JOSE 56

y quiero que al abrir el archivo, me aparezca en un edit cualquiera el numero 45
es decir el listbox va siempre a tener varios items...

Lo mio sería parecido al de ecfisa:


//el codigo que te puse lo colocamos en una función
function ExtraerNum(Item : String) : String;
var
PosIni : Integer;
Valor : String;
begin
PosIni := Pos(' ', item);
Valor := Copy(item, PosIni+1, Length(item)-PosIni);
Result := Valor;
end;

//ahora para llamar
//despues de cargar el archivo en el listbox, mostramos el número
//del item que esta en la posión 0

ListBox1.Items.LoadFromFile('c:\xxx\file.txt');
Edit1.Text := ExtraerNumero(ListBox1.Items[0]);

//ahora cada ves que selecciones un nuevo item utilizas el evento Onclick
procedure TForm1.ListBox1Click(Sender: TObject);
begin
Edit1.Text := ExtraerNumero(ListBox1.Items[ListBox1.ItemIndex]);
end;


Saluditos

moise094
23-04-2012, 22:16:20
Muchas gracias ya pude extraer el numero,
AHORA LO QUE PASA ES ESTO
se extrajo el numero pero al sumarlo con el numero que voy a meter no me suma sino que hace esto:
1+45=145

Caro
23-04-2012, 22:22:18
Muchas gracias ya pude extraer el numero,
AHORA LO QUE PASA ES ESTO
se extrajo el numero pero al sumarlo con el numero que voy a meter no me suma sino que hace esto:
1+45=145

Hola, tienes que convertir a entero el número que has extraido para hacer la suma.


var
Numero : Integer;
begin
Numero := StrToInt(ExtraerNumero(ListBox1.Items[ListBox1.ItemIndex]))+1;
Edit1.Text := IntToStr(Numero);


Saluditos

moise094
23-04-2012, 22:28:06
Me sigue pasando lo mismo, sigue sumando 1+45=145

Caro
23-04-2012, 22:31:25
Me sigue pasando lo mismo, sigue sumando 1+45=145

Muestranos el codigo que estas utilizando, porque lo que estas haciendo es concatenar los dos numeros.

Saluditos

moise094
23-04-2012, 22:37:14
primero que todo puse el codigo de ecfisa
function TForm3.ExtraerNum(cad:string): string;
var
i: Integer;
begin
i:=0;
while not (cad[i] in ['0'..'9']) do Inc(i);
repeat
Result:= Result + cad[i];
Inc(i);
until not (cad[i] in ['0'..'9']);
end;

Luego pongo

var
Numero : Integer;

begin
Numero:=StrToInt(ExtraerNum(Listbox1.Items[1]));
Edit1.text:=IntToStr(Numero);
end;


Despues como quiero que lo sume con un numero que meto en un edit,
y pongo

Listbox1.Items.add('Ventas: '+(Intttostr(va.sumaing))+(Edit6.Text));

moise094
23-04-2012, 22:38:38
puse el codigo de ecfisa por que fue el que me dejo apenas el numero, que es lo que queria

Casimiro Notevi
23-04-2012, 22:41:32
Recuerda poner los tags al código fuente, ejemplo:
http://neftali.clubdelphi.com/images/UtilizarTAGs.png

Caro
23-04-2012, 22:44:24
Hola, es lo que te decía estas concatenando, prueba así:


Listbox1.Items.add('Ventas: '+Inttostr(va.sumaing+StrtoInt(Edit6.Text)));


Saluditos

ecfisa
23-04-2012, 22:56:58
Muchas gracias ya pude extraer el numero,
AHORA LO QUE PASA ES ESTO
se extrajo el numero pero al sumarlo con el numero que voy a meter no me suma sino que hace esto:
1+45=145
Hola.

La función te devuelve una cadena de caracteres, como por ejemplo '32', que de ningún modo es lo mismo que el número 32. Por ejemplo:

Edit1.Text:= ExtraerNumero('RANINQUEO 15')+ExtraerNumero('ROBUSTIANA 80');

No esperes ver en el edit el número 95, lo que verás es '1580' que resulta de concatenar '15' y '80'. Para poder obtener el número 95 tenes que realizar las conversiones correspondientes tál como te indica Caro.

Retomando el ejemplo que te puse arriba, para obtener 15+80 sería:

Edit1.Text:= IntToStr(StrToInt(ExtraerNumero('RANINQUEO 15'))+StrToInt(ExtraerNumero('ROBUSTIANA 80')));


Saludos.

Edito: Si no le gustan los nombres... Escucho sugerencias :D

moise094
23-04-2012, 23:02:23
Muchas gracias a todos, Dios me los bendiga, cualquier otra pregunta del tema, se las estare informando...

Caro
23-04-2012, 23:10:06
Edito: Si no le gustan los nombres... Escucho sugerencias :D

Hola ecfisa, el de Robustiana me gusta :D, el otro podría ser Saturnino o también Casimiro :D.

Saluditos

ecfisa
23-04-2012, 23:15:57
Hola ecfisa, el de Robustiana me gusta :D, el otro podría ser Saturnino o también Casimiro :D.

Saluditos

Esos son muy buenos también!!! :D:D:D

Cariños. :)

Casimiro Notevi
23-04-2012, 23:42:07
¿Alguien me ha llamado? ;):)

moise094
23-04-2012, 23:58:00
Una pregunta a este codigo:

Listbox1.Items.add('Ingresos de ventas: '+Inttostr(va.sumaing+StrtoInt(Edit6.Text)));

quiero sacarle el 10% y que se vea en el mismo listbox, lo hice pero me daba error, por q creo que como se saca el 10% debe ser float o real y uso puro integer...??

moise094
24-04-2012, 00:01:32
medice que Error: Operator is not overloaded no c que pasara??

Casimiro Notevi
24-04-2012, 00:15:28
¿Y por qué no pones el código que has usado?

moise094
24-04-2012, 00:19:10
Listbox1.Items.add('Diez por ciento: '+Inttostr(va.sumaing+StrtoInt(Edit6.Text))*0.10);

me dice:

Error: Operator is not overloaded

Caro
24-04-2012, 00:41:36
¿Alguien me ha llamado? ;):)

;):).

Código Delphi [-] (http://www.clubdelphi.com/foros/newreply.php?do=newreply&p=430767#)Listbox1.Items.add('Diez por ciento: '+Inttostr(va.sumaing+StrtoInt(Edit6.Text))*0.10);

me dice:

Error: Operator is not overloaded

Sigues haciendo operaciones entre String y numeros debes diferenciar eso. Es mejor que hagas las operaciones a parte y depues lo añades al ListBox, como el resultado de tu porcentaje va a ser de tipo Float, te puedes definir otra variable de ese tipo.


var
Porcentaje : Real;
begin
..................................
Porcentaje := (va.sumaing+StrtoInt(Edit6.Text))*0.10;
Listbox1.Items.add('Diez por ciento: '+FloatToStr(Porcentaje));



Saluditos

moise094
24-04-2012, 00:51:39
Gracias tendre en cuenta mucho lo de lo de no confundir strings con integers o reales, casi siempre me pasa eso...

Gerson12
26-07-2012, 00:51:32
gracias por los datos tratare de hacerlo como lo dicen ustedes gracias