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 26-02-2012
chelo_lpa chelo_lpa is offline
Registrado
NULL
 
Registrado: abr 2011
Posts: 4
Poder: 0
chelo_lpa Va por buen camino
ayuda con calculadora

mi idea es hacer una calculadora que me sirva para el negocio. pero me estoy volviendo loco. les muestro como es la idea de la calculadora
(k18.kn3.net/D7130472A.png) esa es la imagen de la calculadora. si me pueden ir ayudando.
donde calcula precio por cantidad, y siempre va poniendos los resultados en el total de abajo
los edit de la izquierda se les ingresa enteros o flotantes, en cambio los del medio solo enteros, y a la derecha van los subtotales. pero a la hora de programar las tareas me estoy volviendo loco, no se ni por donde empezar
la idea es qe no se use el mouse, todo con el teclado. (Escape se encarga de limpiar y volver la calculadora al principio)
y cada vez qe se ingrea un numero va cambiando los subtotales y por supuesto, un cambio en un subtotal cmabia el total. espero respuestas gracias
Responder Con Cita
  #2  
Antiguo 26-02-2012
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
A ver tiro idea, y luego tu le das forma, chapa, pintura y quizá un cambio de aceite:

Código Delphi [-]
type
  TSubTotal = record
    Precio: currency;
    Cant: integer;
    SubTotal: currency;
  end;

  TVentas = array of TSubTotal;

var
  MisVentas: TVentas;

Código Delphi [-]
begin
  SetLength(MiVentas, 10);
  for i := Low(MisVentas) to High(MisVentas) do
  begin
    MisVentas[i].Precio := StrToCurr(FrameSubTotal.EditPrecio);
    MisVentas[i].Cant := StrToInt(FrameSubTotal.EditCant);
    MisVentas[i].SubTotal := MisVentas[i].Precio x MisVentas[i].Cant;
    FrameSubTotal.EditSubTotal := CurrToStr(MisVentas[i].SubTotal);
    Total := Total + MisVentas[i].SubTotal;
  end;
end;

En el ejemplo me baso en el uso de Frames. Básicamente el Frame contiene los edits para el precio, cantidad y subtotal. La aplicación crea tanto frames como se requiera.
En cuanto a la lógica es muy simple, dispongo de un arreglo dinámico y creo tantos registros subtotales como frames, les paso los datos y calculo.

Ahora te resta pulir y ver el modo de "actualizar" los cálculos antes algún cambio en algún frame... juega con los eventos.

Por otro lado, es muy fácil caer así sin nada sin siquiera al menos tirar una idea; es como pedir que te lo hagan. Pon de tu parte primero; PUNTUALIZA en tus propias dudas, que llevas hecho, o como lo estuviste al menos encarando, etc.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #3  
Antiguo 26-02-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Demasiado sencillo para ponerle interes.
Me parece que deberias complicarlo algo mas para que fuera interesante y poder aprender.
Por ejemplo:
1- tener los precios y la descripcion de los articulos en una BD
2- buscar el articulo y colocarlo en el primer edit. asi sucesivamente.
3- Calcular el monto fina.
Asi si merece la pena trabajar.
Por otro lado:
En cuanto al tema de sumas en edits hay mucha informacion en el foro.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #4  
Antiguo 26-02-2012
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por Caral Ver Mensaje
Hola
Demasiado sencillo para ponerle interes.
Me parece que deberias complicarlo algo mas para que fuera interesante y poder aprender.
Por ejemplo:
1- tener los precios y la descripcion de los articulos en una BD
2- buscar el articulo y colocarlo en el primer edit. asi sucesivamente.
3- Calcular el monto fina.
Asi si merece la pena trabajar.
Parecería ser que el ya cuenta en el negocio con una aplicación, sea propia o no, y busca algo que le ayude a sacar algunas cuentas que dicha aplicación no le hace.
O bien no tiene una base de datos, ni aplicación alguna y hace las cosas con la "libreta de almacenero" y quiere algo simple y rápido.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #5  
Antiguo 26-02-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Es que la idea es ponerlo dificil para aprender, si no, que gusto tiene .
Saludos
__________________
Siempre Novato
Responder Con Cita
  #6  
Antiguo 26-02-2012
chelo_lpa chelo_lpa is offline
Registrado
NULL
 
Registrado: abr 2011
Posts: 4
Poder: 0
chelo_lpa Va por buen camino
es qe solamente necesito algo para cuando hago una nueva venta. la idea es hacer una calculadora, pero facil de usar, para no tener qe anotar los subtotales, y despues sumarlos. solo qiuero la aplicacion qe sume es decir 2 cosas de $34, 123 cosas de $12.45 y 132 cosas de $1.30, y tener el total de la venta, y tmb los resultados parciales para mostrar ante cualquier duda. es simple. pero me tira errores por todos lados
Responder Con Cita
  #7  
Antiguo 26-02-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración.


No somos adivinos para saber los errores que te salen
Responder Con Cita
  #8  
Antiguo 27-02-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Un realito adjunto.
Colocas el Precio y con solo cambiar el dato de la cantidad te cambia el subTotal y el Total.
Saludos
PD: Ahora te toca mejorarlo.
__________________
Siempre Novato

Última edición por Caral fecha: 17-09-2012 a las 01:19:12.
Responder Con Cita
  #9  
Antiguo 27-02-2012
chelo_lpa chelo_lpa is offline
Registrado
NULL
 
Registrado: abr 2011
Posts: 4
Poder: 0
chelo_lpa Va por buen camino
Código:
unit Calculadora1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, RpDefine, RpRender, RpRenderPDF, Grids, Calendar, ExtCtrls, DBGrids,
  DB, DBTables, ComCtrls, StdCtrls, jpeg, OleCtrls, SHDocVw, IdBaseComponent,
  IdComponent, IdIPWatch;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Edit10: TEdit;
    Edit11: TEdit;
    Edit12: TEdit;
    Edit13: TEdit;
    Edit14: TEdit;
    Edit15: TEdit;
    Edit16: TEdit;
    Edit17: TEdit;
    Edit18: TEdit;
    Edit19: TEdit;
    Edit20: TEdit;
    Edit21: TEdit;
    Edit22: TEdit;
    Edit23: TEdit;
    Edit24: TEdit;
    Edit25: TEdit;
    Edit26: TEdit;
    Edit27: TEdit;
    Edit28: TEdit;
    Edit29: TEdit;
    Edit30: TEdit;
    Edit31: TEdit;
    Button1: TButton;
    Calculadora: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label1: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    Label18: TLabel;
    Label19: TLabel;
    Label20: TLabel;
    Recordatorio: TMemo;
    DateTimePicker1: TDateTimePicker;
    Memo1: TMemo;
    Label21: TLabel;
    enREDados: TLabel;
    Label22: TLabel;
    Label23: TLabel;
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure Edit30Change(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure Edit2Change(Sender: TObject);
    procedure Edit3Change(Sender: TObject);
    procedure Edit6Change(Sender: TObject);
    procedure Edit7Change(Sender: TObject);
    procedure Edit9Change(Sender: TObject);
    procedure Edit12Change(Sender: TObject);
    procedure Edit14Change(Sender: TObject);
    procedure Edit15Change(Sender: TObject);
    procedure Edit17Change(Sender: TObject);
    procedure Edit19Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var

  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Edit12Change(Sender: TObject);
begin
    if((Edit11.Text <> ('')) and (Edit12.Text <> ('')))then
        Edit26.Text := IntToStr((StrToInt(Edit12.Text)*(StrToInt(Edit11.Text))))
    else
        Edit26.Text := IntToStr(0);
end;

procedure TForm1.Edit14Change(Sender: TObject);
begin
    if((Edit13.Text <> ('')) and (Edit14.Text <> ('')))then
        Edit27.Text := IntToStr((StrToInt(Edit13.Text)*(StrToInt(Edit14.Text))))
    else
        Edit27.Text := IntToStr(0);
end;

procedure TForm1.Edit15Change(Sender: TObject);
begin
    if((Edit15.Text <> ('')) and (Edit16.Text <> ('')))then
        Edit28.Text := IntToStr((StrToInt(Edit15.Text)*(StrToInt(Edit16.Text))))
    else
        Edit28.Text := IntToStr(0);
end;

procedure TForm1.Edit17Change(Sender: TObject);
begin
    if((Edit17.Text <> ('')) and (Edit18.Text <> ('')))then
        Edit29.Text := IntToStr((StrToInt(Edit17.Text)*(StrToInt(Edit18.Text))))
    else
        Edit29.Text := IntToStr(0);
end;

procedure TForm1.Edit19Change(Sender: TObject);
begin
    if((Edit19.Text <> ('')) and (Edit20.Text <> ('')))then
        Edit30.Text := IntToStr((StrToInt(Edit19.Text)*(StrToInt(Edit20.Text))))
    else
        Edit30.Text := IntToStr(0);
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if not ((Key in ['0'..'9'] )or (Key = #08)) then
    begin
      Key:= #0;
      Beep;
    end;

end;

procedure TForm1.Edit2Change(Sender: TObject);
begin
    if((Edit1.Text <> ('')) and (Edit2.Text <> ('')))then
        Edit21.Text := IntToStr((StrToInt(Edit2.Text)*(StrToInt(Edit1.Text))))
    else
        Edit21.Text := IntToStr(0);
end;

procedure TForm1.Edit30Change(Sender: TObject);
var
  a , I: integer;
begin
  a:=0;
  for I := 21 to 30 do
     if(((FindComponent('Edit' + IntToStr(i)) as TEdit).Text))<>('')then
        begin
            a:=a + (  StrToInt((FindComponent('Edit' + IntToStr(i)) as TEdit).Text));
        end
     else
        a:=a+0;
  Edit31.Text := IntToStr(a);
end;

procedure TForm1.Edit3Change(Sender: TObject);
begin
    if((Edit3.Text <> ('')) and (Edit4.Text <> ('')))then
        Edit22.Text := IntToStr((StrToInt(Edit3.Text)*(StrToInt(Edit4.Text))))
    else
        Edit22.Text := IntToStr(0);
end;

procedure TForm1.Edit6Change(Sender: TObject);
begin
    if((Edit5.Text <> ('')) and (Edit6.Text <> ('')))then
        Edit23.Text := IntToStr((StrToInt(Edit5.Text)*(StrToInt(Edit6.Text))))
    else
        Edit23.Text := IntToStr(0);

end;

procedure TForm1.Edit7Change(Sender: TObject);
begin
    if((Edit7.Text <> ('')) and (Edit8.Text <> ('')))then
        Edit24.Text := IntToStr((StrToInt(Edit7.Text)*(StrToInt(Edit8.Text))))
    else
        Edit24.Text := IntToStr(0);

end;

procedure TForm1.Edit9Change(Sender: TObject);
begin
    if((Edit9.Text <> ('')) and (Edit10.Text <> ('')))then
        Edit25.Text := IntToStr((StrToInt(Edit9.Text)*(StrToInt(Edit10.Text))))
    else
        Edit25.Text := IntToStr(0);

end;

procedure TForm1.FormActivate(Sender: TObject);
var
  i, a: Integer;
begin
 for i := 1 to 20 do
  begin
    if ((i mod 2)= 0) then
      begin
        (FindComponent('Edit' + IntToStr(i)) as TEdit).text := '1';
      end
    else
      begin
       (FindComponent('Edit' + IntToStr(i)) as TEdit).text := '0';
      end;
  end;
  for a := 21 to 30  do
   (FindComponent('Edit' + IntToStr(a)) as TEdit).text := '0';
end;





end.
asi me qedo el codigo. anda todo de diez hace lo que quiero. ahora es el tema donde tengo una duda...
$1
eso es un peso, pero yo quiero mostrarlo asi
1.00
y asi con tengo qe encontrar lamanera de acceder a los ultimos dos caracteres de mi string, correrlos un lugar para la derecha y agregar la coma donde estaba el anteultimo. bien se qe un string es un array of caracteres. tendria qe acceder por array size. existe una funcion asi? y hay alguna manera de aumentar el array en ese momento? sigo probando y leyendo.
Responder Con Cita
  #10  
Antiguo 27-02-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración.

Una de las normas, lógica, es: preguntas distintas en temas distintos. No vamos a mezclar las cosas, se convertirían los foros en algo imposible de controlar.
Además puedes hacer una búsqueda, las máscaras de presentación de números es un tema que se ha tratado multitud de veces, recuerda que tenemos cerca de 78000 temas en nuestra base de datos, ahí está 'casi' todo lo que necesites.
Responder Con Cita
  #11  
Antiguo 27-02-2012
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Me encanta cuando los usuarios vienen, tiran una pantalla y luego esperan que se les caiga de arriba.
Lo bueno es que al menos te hemos sacado algo de tu parte, y diste un comienzo.

Voy a hacer de cuenta que ese código no lo he visto... Con todo respeto, ¡Que te lo complicas demasiado! conversiones de un tipo a otro, código por demás repetido,
Se que para una primera aproximación, y que el sistema tampoco es para mucho, y que al parecer eres iniciado puede ser una posibilidad; pero es que puede mejorarse mucho, e incluso añadir controles que te pasas de largo.

Yo te he tirado algunos conceptos que te pueden dar mucho alivio:
El uso de records, un arreglo o array y unos frames (quizá esto último es lo que más te puede costar entender; busca en los foros sobre frames).

Ahora respecto a tu nueva duda, la verdad es que no se te entiende demasiado. ¿Porqué no piensas tus palabras y te explicas mejor? Eso hará más fácil asesorarte.

Tengo una duda:
Y si necesitas de más "items" que los que pusiste, cómo te las ingenias? En la foto hay lugar para 10 items. ¿Van a ser como máximo 10, o pueden ser más? ¿Una cantidad no determinada quizá?
De ser indeterminada, entonces con más razón debe llevarse el problema por otro lado e implementar un proceso que permita extenderse según se requiera.

La propuesta del uso del array dinámico y del frame va justo en este sentido. El array nos permite llevar la estructura en cuanto a la lógica; y el frame en cuanto a la interfaz.
Explico lo del frame: Es como un form, plantilla, en que se van a disponer los elementos que hacen a un ítem. Luego, se crean tantas instancias de este frame como items se necesiten.

En el frame es posible incorporar código que nos permita llevar el control necesario para operar adecuadamente con los valores, y además es donde se llenan justamente la posición i-ésima del arreglo (siendo i el item correspondiente). Un método de interés, de nombre hipotético UpdateSubTotal, lo que hace es recalcular el subtotal ante cualquier cambio en el precio o cantidad.
Por consiguiente, indirectamente este método manda a llamar a un UpdateTotal que recalculará el total. Este UpdateTotal puede, y yo recomiendo, que esté en el form.

El uso del arreglo permite hacer los cálculos sin complicarse la vida de utilizar StrToXXX y sus inversas. Una vez que se guardan los datos en el la operatoria es elemental.

DEJA la interfaz para cuestiones de interfaz... piensa en un arreglo.

Saudos,
__________________
Delphius
[Guia de estilo][Buscar]
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 calculadora basica!! ciberTron Varios 7 08-02-2011 13:58:35
Calculadora en sistema capo979 Varios 2 07-12-2007 02:20:12
Calculadora sebaguillen Varios 17 28-08-2007 15:27:23
Calculadora Epunamun OOP 3 19-12-2005 22:33:11
Calculadora licencia GNU bismarck_sierra Varios 0 05-04-2005 06:56:33


La franja horaria es GMT +2. Ahora son las 04:41:22.


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