Błąd podczas wprowadzania liczby do edita

2011-12-03 14:32

Rejestracja: 8 lat temu

Ostatnio: 7 lat temu

0

Witam
Na formie mam 2 edity i checkboxa, w implementation zadeklarowałem
dwie zmienne (a,b) o typie real, kod wygląda następująco:

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if CheckBox1.Checked=True then
begin
a:=50;
Edit1.Text:='50';
b:=StrToFloat(Edit2.Text);
b:=a;
end
end;

Dlaczego do edita nie chce wprowadzic sie liczba 50?
w jaki sposob to zrobic, probowalem tez stala przypisac do edita i tez nie dzialalo, w czym problem?

edytowany 1x, ostatnio: madmike, 2011-12-03 15:27
formatuj kod i wklejaj go w znacznikach delphi. - cimak 2011-12-03 14:45

Pozostało 580 znaków

2011-12-03 14:38
Moderator

Rejestracja: 12 lat temu

Ostatnio: 46 minut temu

Lokalizacja: Wrocław

0
b:=StrToFloat(Edit2.Text);
b:=a;

Ten kod nie ma sensu.
To tak, jakby robić coś takiego:

b := 10;
b := 40;

Dlaczego do edita nie chce wprowadzic sie liczba 50?

Możesz nieco dokładniej?
Po wykonaniu tego kodu w Edit1 powinna być liczba 50.
Poza tym nazywaj normalnie komponenty...


edytowany 2x, ostatnio: Patryk27, 2011-12-03 14:39
chyba, ze brak średnika po end powoduje takie zachowanie. - cimak 2011-12-03 14:51

Pozostało 580 znaków

Oho
2011-12-03 16:30
Oho
0

chyba, ze brak średnika po end powoduje takie zachowanie.

Ze składni pascala wynika że jest to całkowicie dopuszczalne. Więc niestety, chybiony pomysł. Mógłbyś sie nauczyć dokładnie niuansów składni zamiast mówić że to może przez to że program jest zgody ze składnią.

@Topic, opisz dokładniej problem i logiczniej. Powiedz co masz, co chcesz osiągnąć. I ogarnij podstawy pascala...

Pozostało 580 znaków

2011-12-03 16:59

Rejestracja: 8 lat temu

Ostatnio: 7 lat temu

0

No więc tak, chcę uzyskać taki efekt:

  • Jeżeli użytkownik zaznaczy CheckBox1 to a:=50
  • Jeżeli użytkownik zaznaczy CheckBox2 to b:=100
  • Jeżeli użytkownik zaznaczy CheckBox3 to c:=150
  • W Edit1.Text ma być wypisana suma zmiennych a, b, c

d:=a+b+c;
Edit1.Text:=IntToStr(d);

?

Domyślam się, że jest to dla was prosta sprawa, ale dopiero się uczę,
także proszę o wyrozumiałość.

Tak wygląda kod:

implementation
var
a:integer;
b:integer;
c:integer;
d:integer;

{$R *.dfm}

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
If CheckBox1.Checked=True then
a:=50;
end;

procedure TForm1.CheckBox2Click(Sender: TObject);
begin
If CheckBox2.Checked=True then
a:=100;
end;

procedure TForm1.CheckBox3Click(Sender: TObject);
begin
If CheckBox3.Checked=True then
a:=150;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
d:=a+b+c;
Edit1.Text:=IntToStr(d);
end;

end.
edytowany 2x, ostatnio: #Artur, 2011-12-03 17:07
Wszędzie zmieniasz zmienną "a". - Patryk27 2011-12-03 17:08
Nie korzystaj ze zmiennych globalnych; - furious programming 2011-12-03 17:19

Pozostało 580 znaków

2011-12-03 17:10
Moderator

Rejestracja: 12 lat temu

Ostatnio: 46 minut temu

Lokalizacja: Wrocław

Tak:

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
 if CheckBox1.Checked then
  a:=50;
 Edit1Change(Self);
end;

procedure TForm1.CheckBox2Click(Sender: TObject);
begin
 if CheckBox2.Checked then
  b:=100;
 Edit1Change(Self);
end;

procedure TForm1.CheckBox3Click(Sender: TObject);
begin
 if CheckBox3.Checked then
  c:=150;
 Edit1Change(Self);
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
 d:=a+b+c;
 Edit1.Text:=IntToStr(d);
end;

?
Poza tym nazywaj komponenty inaczej, niżeli "Edit1", "CheckBox3".
Potem dojdzie do "Button666"...


edytowany 1x, ostatnio: Patryk27, 2011-12-03 17:10

Pozostało 580 znaków

2011-12-03 17:15
Moderator Delphi/Pascal

Rejestracja: 8 lat temu

Ostatnio: 43 sekundy temu

Lokalizacja: Tuchów

0
  • Jeżeli użytkownik zaznaczy CheckBox1 to a:=50
  • Jeżeli użytkownik zaznaczy CheckBox2 to b:=100
  • Jeżeli użytkownik zaznaczy CheckBox3 to c:=150

No dobra, ale jeżeli użytkownik zaznaczy CheckBox1 i ustawimy a := 50; to co się dzieje z b i c? Ustawiasz tylko jedną zmienną, a powinieneś wszystkie; Jeżeli nie ustawisz ich to gdzie do nich wprowadzasz nowe dane?

Sam warunek:

if CheckBox1.Checked then
  begin
    a := 50;
    { ustawienie pozostałych zmiennych }
  end
else
  if CheckBox2.Checked then
    begin
      b := 100;
      { ustawienie pozostałych zmiennych }
    end
  else
    if CheckBox3.Checked then
      begin
        c := 150;
        { ustawienie pozostałych zmiennych }
      end;

Co dalej? Musisz obliczyć sumę zmiennych i wpisać ją do Edit1:

Edit1.Text := IntToStr(a + b + c)

Zmienna d nie jest potrzebna chyba, że później też wykonujesz jakieś operacje, gdzie wykorzystujesz sumę tych trzech liczb;

EDIT: Spóźniłem się z postem... :P


edytowany 1x, ostatnio: furious programming, 2011-12-03 17:17

Pozostało 580 znaków

2011-12-03 17:20

Rejestracja: 8 lat temu

Ostatnio: 7 lat temu

0

Furious Programming twoim sposobem to nie zadziałało, dopiero po dodaniu Edit1.Change(Self) działa.

dzięki Patryk27

edytowany 1x, ostatnio: #Artur, 2011-12-03 17:20
Nie ma możliwości żeby nie zadziałało, nigdy podczas zmiany zawartości Edit'ów nie wywoływałem ręcznie zdarzenia OnChange i zawsze działało i działa do dziś; - furious programming 2011-12-03 17:32

Pozostało 580 znaków

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0