Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-09-2014
nuxbaster nuxbaster is offline
Miembro
NULL
 
Registrado: dic 2010
Posts: 13
Poder: 0
nuxbaster Va por buen camino
Ayuda con Listbox

Bueno el detalle es que estoy haciendo una aplicación sencilla que toma el peso de una bascula y muestro los datos en un ListBox pero quiero que me vaya mostrando la suma de los pesos en un label y cada que vaya añadiendo un peso nuevo se vaya actualizando, no soy programador avanzado pero tengo algo de conocimiento he estado leyendo desde ayer pero no logro realizarlo, el dato que me regresa la bascula lo almaceno en una variable String.... Espero su ayuda muchas gracias!.
Responder Con Cita
  #2  
Antiguo 23-09-2014
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Muy sencillo. Cada vez que obtengas el datos de la báscula lo conviertes a entero usando la función StrToInt y el resultado lo sumas a una variable que tengas declarada para tal efecto. Usa la función inversa IntToStr para convertir el total a string y copiarlo al Label...

Eso o espera que alguien te ponga el código completo

// Saludos
Responder Con Cita
  #3  
Antiguo 23-09-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por roman Ver Mensaje
Eso o espera que alguien te ponga el código completo
Creo que lo mejor es que nuxbaster ponga su código para que lo corrijamos.
Responder Con Cita
  #4  
Antiguo 23-09-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
nuxbaster,

Cita:
Empezado por nuxbaster
...estoy haciendo una aplicación...toma el peso de una bascula y muestra los datos en un ListBox...quiero que me vaya mostrando la suma de los pesos...cada que vaya añadiendo un peso nuevo se vaya actualizando...


¡Bienvenido al Club Delphi!

Revisa este código:
Código Delphi [-]
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Label1: TLabel;
    Button1: TButton;
    Edit1: TEdit;
    Label2: TLabel;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// Inicializa la aplicación
procedure TForm1.FormCreate(Sender: TObject);
begin
   Randomize;
   Edit1.ReadOnly := True;
end;

// Simula una Balanza Digital
procedure TForm1.Button1Click(Sender: TObject);
var
   Peso : Double;
begin
   Peso := RoundTo(Random(100) + Random,-2);
   ListBox1.Items.Add(FormatFloat('0.00',Peso));
   Edit1.Text := FormatFloat('0.00',StrToFloatDef(Edit1.Text,0) + Peso);
end;

// Inicializa la Simulación de Balanza Digital
procedure TForm1.Button2Click(Sender: TObject);
begin
   ListBox1.Clear;
   Edit1.Text := EmptyStr;
end;

end.
El código anterior en Delphi 7 sobre Windows 7 Professional x32, permite simular una Balanza Digital, pasar sus valores a un TListBox y visualizar la suma de los mismos de forma automática, como se muestra en la siguiente imagen:



Revisa esta información:
Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 23-09-2014 a las 23:41:26.
Responder Con Cita
  #5  
Antiguo 23-09-2014
nuxbaster nuxbaster is offline
Miembro
NULL
 
Registrado: dic 2010
Posts: 13
Poder: 0
nuxbaster Va por buen camino
Agradezco a todos su apoyo y comentarios, como les comente no soy programador avanzado, solo entiendo un poco de lógica e investigo pero este detalle ha sido un quebradero de cabeza les dejo las lineas que he colocado, estoy utilizando el Comport y el simulador de balanzas y Delphi XE3
Código Delphi [-]
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, CPort, Vcl.StdCtrls,StrUtils, Vcl.Grids,
  Vcl.ComCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ComPort1: TComPort;
    Button2: TButton;
    ListBox1: TListBox;
    Edit1: TEdit;
    Label1: TLabel;
    Button3: TButton;
    CheckBox1: TCheckBox;
    Label2: TLabel;
    Button4: TButton;
    ListView1: TListView;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure ComPort1RxChar(Sender: TObject; Count: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation


{$R *.dfm}

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

procedure TForm1.Button2Click(Sender: TObject);
begin
if ComPort1.Connected then
    ComPort1.Close
  else
    ComPort1.Open;
    Application.MessageBox('El puerto ha sido abierto de forma satisfactoria.','Abierto',0);
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  Str: String;
begin
  Str := Edit1.Text;
  if CheckBox1.Checked then
    Str := Str + #13#10;
    ComPort1.WriteStr(Str);
end;

procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var
  Str: String;
  begin

  ComPort1.ReadStr(Str, Count);
  while (length(Str)>1) and (Copy(Str,1,1)='0') do
    delete(Str,1,1);
    if Copy(Str,1,1)='.' then
    Str:= '0' + Str;

    ListBox1.Items.Add(Str);

end;
end.

Última edición por Casimiro Notevi fecha: 24-09-2014 a las 00:20:42.
Responder Con Cita
  #6  
Antiguo 25-09-2014
nuxbaster nuxbaster is offline
Miembro
NULL
 
Registrado: dic 2010
Posts: 13
Poder: 0
nuxbaster Va por buen camino
Muy buenos días, quiero me ayuden a revisar el código de sumar los elementos de un listbox,
Código:
var
valorSum:Double;
i:integer;

begin
valorSum := 0;

for i := 0 to ListBox1.Items.Count - 1 do
valorSum := valorSum + StrToFloat(ListBox1.Items[i]);
 label2.Caption:= FloatToStr(valorSum);
Valide el código y si me hace la suma de los valores del listbox cuando los pongo en las propiedades del listbox en string, pero quiero pedirles apoyo ya que los datos me los envía el puerto COM, y los añado al listbox cuando intento hacer la suma de dichos datos me manda is not a valid floating point value

Por su anticipado apoyo muchas gracias!
Responder Con Cita
  #7  
Antiguo 25-09-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola nuxbaster.

Podes hacerte una función que te devuelva la sumatoria de cualquier TStrings:
Código Delphi [-]
function SumStrings(ts: TStrings): Double;
var
  i: Integer;
begin
  ts.Text:= Trim(ts.Text); // quitar posibles espacios al inicio o fin
  Result:= 0;
  for i:= 0 to ts.Count-1 do
   try
     Result:= Result + StrToFloat(ts[i]);
   except
     raise Exception.Create('Error de conversión: Existe un valor erróneo');
   end;
end;

Entonces podes usarlo para varios controles:
Código Delphi [-]
  ShowMessage(FloatToStr(SumStrings(ListBox1.Items)));
  ShowMessage(FloatToStr(SumStrings(ComboBox1.Items)));
  ShowMessage(FloatToStr(SumStrings(Memo1.Lines)));

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 25-09-2014
nuxbaster nuxbaster is offline
Miembro
NULL
 
Registrado: dic 2010
Posts: 13
Poder: 0
nuxbaster Va por buen camino
Muchas gracias a todos en especial a ecfisa ya he logrado resolver (con su ayuda) el principal problema sumar los datos de un listbox recibidos por una bascula electronica, adjuntare el codigo resultante y un video. Saludos!!!
Responder Con Cita
  #9  
Antiguo 25-09-2014
nuxbaster nuxbaster is offline
Miembro
NULL
 
Registrado: dic 2010
Posts: 13
Poder: 0
nuxbaster Va por buen camino
Anexo código y vídeo del funcionamiento youtu.be/7XIXTsePNX4
Código Delphi [-]
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, CPort, Vcl.StdCtrls,StrUtils, Vcl.Grids,
  Vcl.ComCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ComPort1: TComPort;
    Button2: TButton;
    ListBox1: TListBox;
    Edit1: TEdit;
    Label1: TLabel;
    Button3: TButton;
    Label2: TLabel;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure ComPort1RxChar(Sender: TObject; Count: Integer);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
 function SumStrings(ts: TStrings): Double;
var
  i: Integer;
begin
  ts.Text:= Trim(ts.Text); // quitar posibles espacios al inicio o fin
  Result:= 0;
  for i:= 0 to ts.Count-1 do
   try
     Result:= Result + StrToFloat(ts[i]);
   except
     raise Exception.Create('Error de conversión: Existe un valor erróneo');
   end;
end;

{$R *.dfm}

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

procedure TForm1.Button2Click(Sender: TObject);
begin
if ComPort1.Connected then
    ComPort1.Close
  else
    ComPort1.Open;
    Application.MessageBox('El puerto ha sido abierto de forma satisfactoria.','Abierto',0);
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  Str: String;
begin
  Str := Edit1.Text;
  ComPort1.WriteStr(Str);


end;

procedure TForm1.Button4Click(Sender: TObject);
var
i: Integer;
dados: String;
begin

FOR i := -1 + listbox1.Items.Count  downto 0 DO
BEGIN

IF (listbox1.Selected[i]) THEN
BEGIN
dados := InputBox('Modificando ' + listbox1.Items[i],'Nuevo valor : ' ,listbox1.Items[i]);
IF (Trim(dados) <> '') THEN
listbox1.Items[i] := dados;
END;

END;

end;

procedure TForm1.Button5Click(Sender: TObject);
var
i: Integer;
begin

FOR i := -1 + listbox1.Items.Count  downto 0 DO
BEGIN
IF (listbox1.Selected[i]) THEN
listbox1.Items.Delete(i);
END;

end;

procedure TForm1.Button6Click(Sender: TObject);
var
  vlSumouble;
  i:integer;
begin
  vlSum := 0;

  for i := 0 to ListBox1.Items.Count - 1 do
    vlSum := vlSum + StrToFloat(ListBox1.Items[i]);
    label2.Caption:= FloatToStr(vlSum);
end;

procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var
  Str: String;

  begin

  ComPort1.ReadStr(Str,Count);

    while (length(Str)>1) and (Copy(Str,1,1)='0') do
    delete(Str,1,1);

    if Copy(Str,1,1)='.' then
      Str:= '0'+Str;

      ListBox1.Items.Add(Str);
       label2.Caption:=(FloatToStr(SumStrings(ListBox1.Items))) + ' Kilogramos';





end;
end.
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
ListBox Ayuda titorp14 Varios 2 22-02-2012 23:39:58
Ayuda con ListBox hernan35 Varios 3 24-05-2010 10:13:11
Ayuda Con Listbox sanzCrito OOP 3 16-10-2008 00:26:03
!!!!Ayuda con listbox!!!!! alixp23 C++ Builder 4 08-03-2007 01:21:45
Ayuda con ListBox Urgente ... Ricomarz Varios 16 03-03-2007 16:52:02


La franja horaria es GMT +2. Ahora son las 01:40:12.


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