Avatar billede danielcederholm Nybegynder
24. januar 2007 - 16:39 Der er 16 kommentarer

Problemer med en knap til lommeregner

Hej

jeg er lige begyndt på delphi, og er ikke den store verdensmester i det.

Jeg har en lommeregner som består af 3 edit. felter, hvor man i de 2 første skriver tallene ind, og i den trejde, vises svaret.
Jeg har lavet knapper til tallene 0,1,2,3,4,5,6,7,8,9 - alle disse virker så i edit1.text feltet.
Men tænkte på om man så ikke kunne lave en knap, som skiftede over til edit2.text feltet?

Er dette umuligt??
Avatar billede kroning Nybegynder
24. januar 2007 - 17:01 #1
Du kan sætte en var som indeholder den edit tallet skal sætes ind i:

var
EditFelt : TEdit;
.
.
koden til at skifte
if EditFelt=Edit1 then
  EditFelt:=Edit2
else
  EditFelt:=Edit1;

koden der indsætter
EditFelt.Text:=hvordan du nu gør det
Avatar billede vallemanden Nybegynder
24. januar 2007 - 17:08 #2
Edit2.SetFocus;
Avatar billede danielcederholm Nybegynder
24. januar 2007 - 18:22 #3
Til vallemanden..
Stort tak for din hjælp.. så skifter den ned i boksen, hvad kan jeg så gøre for at min talknapper også virker der??
Min kode ser således ud:

unit Lommeregner;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    Button10: TButton;
    Button11: TButton;
    Button12: TButton;
    Button13: TButton;
    Button14: TButton;
    Button15: TButton;
    Button16: TButton;
    Button17: TButton;
    Button18: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure Button11Click(Sender: TObject);
    procedure Button12Click(Sender: TObject);
    procedure Button13Click(Sender: TObject);
    procedure Button14Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button15Click(Sender: TObject);
    procedure Button16Click(Sender: TObject);
    procedure Button17Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button10Click(Sender: TObject);
begin
Edit1.Text := Edit1.Text + '6'
end;

procedure TForm1.Button11Click(Sender: TObject);
begin
Edit1.Text := Edit1.Text + '7'
end;

procedure TForm1.Button12Click(Sender: TObject);
begin
Edit1.Text := Edit1.Text + '8'
end;

procedure TForm1.Button13Click(Sender: TObject);
begin
Edit1.Text := Edit1.Text + '9'
end;

procedure TForm1.Button14Click(Sender: TObject);
begin
Edit1.Text := Edit1.Text + '0'
end;

procedure TForm1.Button15Click(Sender: TObject);
begin
Edit3.Text:=floattostr(strtofloat(Edit1.Text) * strtofloat(Edit2.Text))
end;

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

procedure TForm1.Button17Click(Sender: TObject);
begin
Edit2.SetFocus;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Edit3.Text:=floattostr(strtofloat(Edit1.Text) + strtofloat(Edit2.Text))
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Edit3.Text:=floattostr(strtofloat(Edit1.Text) - strtofloat(Edit2.Text))
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Edit3.Text:=floattostr(strtofloat(Edit1.Text) / strtofloat(Edit2.Text))
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
Edit1.Text := Edit1.Text + '1'
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
Edit1.Text := Edit1.Text + '2'
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
Edit1.Text:='';
Edit2.Text:='';
Edit3.Text:='';
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
Edit1.Text := Edit1.Text + '3'
end;

procedure TForm1.Button8Click(Sender: TObject);
begin
Edit1.Text := Edit1.Text + '4'
end;

procedure TForm1.Button9Click(Sender: TObject);
begin
Edit1.Text := Edit1.Text + '5'
end;

end.
Avatar billede vallemanden Nybegynder
24. januar 2007 - 18:54 #4
hmm

måske noget hen af

  public
    { Public declarations }
    edit : integer;


procedure TForm1.Button10Click(Sender: TObject);
begin
if Edit<>2 then
  Edit1.Text:=Edit1.Text+'2';
if Edit=2 then
  Edit2.Text:=Edit2.Text+'2';
end;

procedure TForm1.Button17Click(Sender: TObject);
begin
Edit:=2;
Edit2.SetFocus;
end;
Avatar billede kroning Nybegynder
24. januar 2007 - 19:22 #5
I dine knapper 0 til 9 skriver du i hint feltet 0 ved knap 0, 1 ved knap 1 osv.
Alle 10 tal knappers OnClick skal pege på samme procedure dvs. Button4Click, alle andre OnClick procedurer du har lavet til tal knapperne kan du slette.


unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    Button10: TButton;
    Button11: TButton;
    Button12: TButton;
    Button13: TButton;
    Button14: TButton;
    Button15: TButton;
    Button16: TButton;
    Button17: TButton;
    Button18: TButton;
        procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button15Click(Sender: TObject);
    procedure Button16Click(Sender: TObject);
    procedure Button17Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  CEdit : byte = 1;

implementation

{$R *.dfm}

procedure TForm1.Button15Click(Sender: TObject);
begin
Edit3.Text:=floattostr(strtofloat(Edit1.Text) * strtofloat(Edit2.Text))
end;

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

procedure TForm1.Button17Click(Sender: TObject);
begin
    CEdit:=-Cedit+1;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Edit3.Text:=floattostr(strtofloat(Edit1.Text) + strtofloat(Edit2.Text))
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Edit3.Text:=floattostr(strtofloat(Edit1.Text) - strtofloat(Edit2.Text))
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Edit3.Text:=floattostr(strtofloat(Edit1.Text) / strtofloat(Edit2.Text))
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
    if CEdit=1 then
        Edit1.Text := Edit1.Text + (Sender as TButton).Hint
  else
        Edit2.Text := Edit2.Text + (Sender as TButton).Hint;
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
Edit1.Text:='';
Edit2.Text:='';
Edit3.Text:='';
end;

end.
Avatar billede hrc Mester
25. januar 2007 - 09:11 #6
kroning: han skal da ikke bruge "hint" - den skal sikkert bruges til noget andet. Det er "tag" der er den rigtige property at bruge, værende en slags gummi-property som man kan bruge til lidt af hvert. Det er også den man kan finde på at typecaste til en pointer/objekt
Avatar billede hrc Mester
25. januar 2007 - 09:46 #7
Måske burde du bare droppe knapperne; det er jo egentligt et forkert design, for hvorfor skal man, med musen, trykke på knapper der allerede findes på tastaturet. Det gælder med lidt besvær også på de bærbare. Du har jo 1-9, +-/* og <retur>.

Skulle jeg lave en lommeregner ville jeg kun lave knapper til de funktioner der ikke findes på tastatures, eksempelvis de trigonometriske SIN(), COS(), TAN() osv. Tastetrykkene kunne fanges/valideres i Application.OnKeyPressed

... og så ville jeg lave det med "Omvendt Polsk Notation" (engelsk: RPN) da det både er lettere at programmere og ditto lettere at anvende.
Avatar billede danielcederholm Nybegynder
25. januar 2007 - 15:38 #8
hey igen

Har brugt kroningen's fine eksempel..
Men nu viser den en rød streg under Implementation
Hvad kan jeg gøre ved det?
Avatar billede kroning Nybegynder
25. januar 2007 - 20:12 #9
hrc> Ja Tag er selvfølgelig bedre at bruge men jeg var så ophidset over hvad jeg så at der bare skulle laves noget andet i en fart :-)

danielcederholm> Hvad mener du med "rød streg under Implementation"?
Avatar billede danielcederholm Nybegynder
25. januar 2007 - 20:58 #10
Til kroning

Den viser bare en rød streg under Implementation, den angiver altså at der er en fejl. Alle andre steder er der ingen ting, det er kun her ved dette ord den viser fejl. Jeg ved ikke lige hvad jeg skal gøre..
Avatar billede kroning Nybegynder
25. januar 2007 - 21:10 #11
Hvilken fejl viser den?
Avatar billede danielcederholm Nybegynder
25. januar 2007 - 21:12 #12
Den angiver bare at Implementation som en fejl..
Avatar billede kroning Nybegynder
25. januar 2007 - 21:18 #13
Den skriver også hvad der er for en fejl, i Min Delphi 7 står det i bunden af edit vinduet, f.eks.:

[Error] Unit1.pas(51): Operator not applicable to this operand type
Avatar billede hrc Mester
25. januar 2007 - 22:59 #14
Det er ikke sådan at du har placeret al koden ovenover implementation? Og glemt det afsluttende end. (med punktum)?
Avatar billede danielcederholm Nybegynder
26. januar 2007 - 10:52 #15
Hej har lige prøvet at gøre det på en anden måde.
en hvorfor angiver den fejl ved alle
if og els sætningerne?
[Pascal Error] Lommeregner.pas(69): E2012 Type of expression must be BOOLEAN


unit Lommeregner;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    Button10: TButton;
    Button11: TButton;
    Button12: TButton;
    Button13: TButton;
    Button14: TButton;
    Button15: TButton;
    Button16: TButton;
    Button17: TButton;
    Button18: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure Button11Click(Sender: TObject);
    procedure Button12Click(Sender: TObject);
    procedure Button13Click(Sender: TObject);
    procedure Button14Click(Sender: TObject);
    procedure Button15Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button18Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button17Click(Sender: TObject);
    procedure Button16Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button10Click(Sender: TObject);
begin
if
  Edit1.Text := Edit1.Text + '6'
else
  edit2.text :=Edit2.text + '6';
end;

procedure TForm1.Button11Click(Sender: TObject);
begin
if
  Edit1.Text := Edit1.Text + '7'
else
  edit2.text :=Edit2.text + '7';
end;

procedure TForm1.Button12Click(Sender: TObject);
begin
if
  Edit1.Text := Edit1.Text + '8'
else
  edit2.text :=Edit2.text + '8';
end;

procedure TForm1.Button13Click(Sender: TObject);
begin
if
  Edit1.Text := Edit1.Text + '9'
else
  edit2.text :=Edit2.text + '9';
end;

procedure TForm1.Button14Click(Sender: TObject);
begin
if
  Edit1.Text := Edit1.Text + '0'
else
  edit2.text :=Edit2.text + '0';
end;

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

procedure TForm1.Button16Click(Sender: TObject);
begin
edit1.setfocus;
end;

procedure TForm1.Button17Click(Sender: TObject);
begin
Edit2.setfocus;
end;

procedure TForm1.Button18Click(Sender: TObject);
begin
  Edit3.Text:=floattostr(strtofloat(Edit1.Text) * strtofloat(Edit2.Text))
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Edit3.Text:=floattostr(strtofloat(Edit1.Text) + strtofloat(Edit2.Text))
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Edit3.Text:=floattostr(strtofloat(Edit1.Text) - strtofloat(Edit2.Text))
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Edit3.Text:=floattostr(strtofloat(Edit1.Text) / strtofloat(Edit2.Text))
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
if
  Edit1.Text := Edit1.Text + '1'
else
  edit2.text :=Edit2.text + '1';
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
if
  Edit1.Text := Edit1.Text + '2'
else
  edit2.text :=Edit2.text + '2';
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
edit1.Text := '';
edit2.text := '';
edit3.Text := '';
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
if
  Edit1.Text := Edit1.Text + '3'
else
  edit2.text :=Edit2.text + '3';
end;

procedure TForm1.Button8Click(Sender: TObject);
begin
if
  Edit1.Text := Edit1.Text + '4'
else
  edit2.text :=Edit2.text + '4';
end;

procedure TForm1.Button9Click(Sender: TObject);
begin
if
  Edit1.Text := Edit1.Text + '5'
else
  edit2.text :=Edit2.text + '5';
end;

end.
Avatar billede hrc Mester
26. januar 2007 - 19:52 #16
Jeg har sagt det før og nu siger jeg det igen, denne gang til dig. Der er nogen der trænger til at sætte sig ned med en Pascal/Delphi bog som de har lånt på biblioteket - før de prøver at strikke et program sammen.

Grunden til du ikke bruger kronings eksempel er vel at du ikke forstår hvar han taler om. Det bør du indrømme og så tage en tur på biblioteket for man lærer ikke at programmere via Eksperten.

Fejlen i ovenævnte (ubrugelige) kodning er, at du bruger := som er en tildelingsoperator mens du skulle bruge = (uden kolon).

Næste fejl er at linjerne er aldeles volapyk'sk.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester