Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   sumando valores de un listview (https://www.clubdelphi.com/foros/showthread.php?t=87077)

danielmj 13-11-2014 20:01:23

Hola tiammat,

Por cierto, te va lo sumerio y esas cosas? lo digo por tu nick

Bueno, tienes razon, pero mi nivel en delphi es bajito bajito, y hay soluciones que no se me ocurren como a otros con mas experiencia. Por ejemplo, ya me estoy peleando otra vez con la lista, por que ahora si elimino un elemento listado, lo normal es que se reste tambien del total a pagar, pues bien, ya me esta jorobando otra vez, con access violation y "list items out of bouns" o algo así

Código Delphi [-]
procedure TrForm.Eliminarseleccionado1Click(Sender: TObject);
var
  i: integer;

begin
  for i:= 0 to lista.Items.Count -1 do
    if lista.Items.Item[i].Selected then
      begin
        lista.Items.Item[i].Delete;
        plista.Items.Item[i].Delete;
        label35.Caption:= FloatToStr(StrToFloat(label35.Caption)-(StrToFloat(lista.Items.Item[i].SubItems[Lista.Columns.Count-3]))); //---> sé que el error está aquí ¿pero donde?
      end;
end;

Y bueno, en eso estoy ahora.
Un saludo.

ecfisa 14-11-2014 02:22:48

1 Archivos Adjunto(s)
Hola Daniel.

Seguramente este par de funciones te simplificarán la tarea:
Código Delphi [-]
// Devuelve la suma de la columna en cuestión
function AmountTotal(LV: TListView): Double;
var
  i: Integer;
  li: TListItem;
begin
  Result:= 0;
  for i:= LV.Items.Count-1 downto 0 do
  begin
    li:= LV.Items.Item[i];
    Result:= Result + StrToFloat(li.SubItems[LV.Columns.Count-2]);
  end;
end;

// Borra items seleccionados ( MultiSelect = True )
procedure DelSelectedItems(LV: TListView);
var
  i: Integer;
begin
  for i:= LV.Items.Count-1 downto 0 do
    if LV.Items[i].Selected then
      LV.Selected.Delete
end;

El uso:
Código Delphi [-]
// Mostrar total
procedure TForm1.btnTotalClick(Sender: TObject);
begin
  Label1.Caption:= FormatFloat('0.00', AmountTotal(ListView1));
end;

// Eliminar items seleccionados y seguido mostrar total
procedure TForm1.btnDeleteClick(Sender: TObject);
begin
  DelSelectedItems(ListView1);
  Label1.Caption:=  FormatFloat('0.00', AmountTotal(ListView1));
end;
Por si tenes dificultad para implementarlas te adjunto un ejemplo funcional.

Saludos :)

danielmj 14-11-2014 17:18:00

hola ecfisa, acabo de mirarlo y de implementarlo, todo lo que ya tenia lo sigo conservando entre {} funciona pero creo que lo de la funcion es mas eficiente.
Solo tengo una duda, pero creo que se por donde van los tiros, me refiero a la variable "result" no la declaras en ningun sitio y no da error, por lo que supongo que delphi la crea automaticamente al iniciar la funcion y en este caso es double ¿es correcto?

Gracias y un saludo.

ecfisa 14-11-2014 19:32:26

Hola danielmj.
Cita:

Empezado por danielmj (Mensaje 484779)
Solo tengo una duda, pero creo que se por donde van los tiros, me refiero a la variable "result" no la declaras en ningun sitio y no da error, por lo que supongo que delphi la crea automaticamente al iniciar la funcion y en este caso es double ¿es correcto?

Si, así es. Aquí tenes una referencia: Result.

Aunque Delphi continua soportando la sintáxis Pascal de asignar el valor de devolución al nombre de funcion, por ejemplo:
Código Delphi [-]
function FuncionSuma(a,b: Integer): Integer;
begin
  FuncionSuma:= a + b;
end;

Saludos :)

danielmj 14-11-2014 20:23:07

Hola ecfisa, gracias ya se una cosa mas :) y sobre pascal, la verdad es que lo poco que se de pascal es lo que me ayuda para escribir algo de codigo en delphi aunque basicamente son la misma cosa con la diferencia del entorno visual y otras diferencias, pero la base es la misma. La verdad es que delphi como tal, nunca lo vi cuando estudiaba, pasamos de cobol a pascal y de pascal a vb6, solo que a mi siempre me gusto mas delphi y digamos que lo descubri por mi mismo. Ya ha llovido desde entonces, por que el primer delphi que conoci fue la version 3.

Un saludo.

nlsgarcia 14-11-2014 21:14:26

danielmj,

Cita:

Empezado por danielmj
...la verdad es que lo poco que se de Pascal es lo que me ayuda para escribir algo de código en Delphi...

:rolleyes:

Revisa esta información:
Espero sea útil :)

Nelson.

ecfisa 14-11-2014 21:42:05

Cita:

Empezado por danielmj (Mensaje 484797)
...pasamos de cobol a pascal y de pascal a vb6,...

Me haces recordar mis tiempos de universitario... :rolleyes: fué una vivencia muy parecida. Pero lo primero que nos tiraron fue GW-Basic :mad: puf!.
Por esa época tuve mis primeros contactos con Turbo Pascal 4.0 y Turbo C, lenguajes con los que siempre mantuve afinidad. El verborrágico aunque poderosísimo Cobol nunca me atrapó. ¡ Ah ! La belle epoque...

Saludos :)

danielmj 14-11-2014 21:46:26

Hola nelson, gracias por la informacion, ya me he bajado un par de archivos de las descargas del foro y he metido en favoritos un par de manuales.
Un saludo.

danielmj 14-11-2014 21:52:30

hola ecfisa, si si tienes toda la razon, el...

Código:

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.

de cobol, tenía su aquel, a mi se me gustaba pero de un momento a otro pasamos a pascal y dejamos cobol. En cuando a C+ recuerdo un dia que tras el examen me dijo el profesor (de nombre D. Javier Maestre) "¿Que, ya sabes programar en C no? el tio con el tono mas ironico del mundo. Y le respondi "pues no, no tengo ni idea, solo me he preparado este examen" jajajaja hasta el tuvo que reirse.

En fin como suele decirse "aquellos maravillosos años"...
Un saludo.


La franja horaria es GMT +2. Ahora son las 02:27:57.

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