Dodawanie liczb w obiekcie Label


(Mr Hektor) #1

Witam. Wrzuciłem na program obiekt TLabel2. Zmieniłem Caption na 2. Jest też funkcja random:

procedure TForm1.Button1Click(Sender: TObject);

var

j : integer; //Funkcja generujaca losowe karty

begin

Randomize;

j:= Random(7);

case j of

1:

I chcę zrobić, że jeżeli zostanie wylosowana liczba 1 to 1 zostanie dodane to tego Tlabel2 o którym mówiłem na początku. Czyli żeby Caption zmienił się na 3. Jeżeli zostanie wylosowana liczba 2 to żeby dodało 2 i caption zmienił się na 4. I tak dalej. Bawiłem sam się z tym trochę, ale niestety sam nic nie wykombinowałem, jedynie tyle, ale to jest zle:

case j of

1: begin

   Label1.Caption:= 'Jedynka Pik';

   StrToInt(Label2.Caption);

   Label2.Caption:= Label2.Caption + 1;

   Label2.Caption:= IntToStr(Label2.Caption);

Na Label1.Caption nie patrzeć bo to ma sie nie zmieniac :slight_smile:

Błagam o pomoc!


(Martini M) #2

Witam,

A powiedz mi:

1) jaki jest wynik operacji

StrToInt(Label2.Caption);

? 2) gdzie ten wynik przechowujesz? Kolejna sprawa: jakiego typu jest pole Caption w strukturze Label2? Czy do tego typu można dodawać int'y (

Label2.Caption:= Label2.Caption + 1;

)? Jak sądzisz co po takiej operacji będziesz miał w zmiennej Caption? I zastanów się nad tym co robi (a co chciałeś osiągnąć) w

Label2.Caption:= IntToStr(Label2.Caption);

Podanie gotowego rozwiązania nie nauczy w odróżnieniu od poszukiwania tego rozwiązania.

Powodzenia


(Mr Hektor) #3

No w 1 to przekonwertowanie String do Integer.

W 2 Gdzie przechowuje wynik? Hmm fakt, chyba nigdzie.

A co do tych 2 ostatnich linijek to ja wiem, że źle, nie mam dużego doświadczenia z Delphi, dlatego tyle głupich błędów tam.


(Martini M) #4

Ogólny schemat powinien wyglądać tak:

a) pobierz (albo od razu przekonwertuj) bieżący string (pole Label2.Caption) na inta

b) dodaj do niego wylosowaną wartość

c) przekonwertuj powiększonego inta na strin (i od razu podstaw do pola Label2.Caption)

Powodzenia.


(Mr Hektor) #5
Label2.Caption:= IntToStr(StrToInt(Label2.Caption)+2);

Do czegoś takiego doszedłem po wielu próbach, dzięki, śmiga jak trzeba :smiley:


(Martini M) #6

Brawo, gratulacje.

Ładny zwarty zapis. Ma jednak wadę: mianowicie ciężko się go będzie debugowało jeżeli się okaże, że nagle Caption pokazuje jakieś bzdury. I nie będziesz wiedział która część tego zapisu jest za to odpowiedzialna:) np. przepełni się int i się zaczną pojawiać wartości ujemne :smiley:

Na początku sugerowałbym rozbić to sobie na 3 linijki, wtedy się łatwiej szuka błędów.

Jednak ogólnie rzecz biorąc dobrze to zapisałeś.

Powodzenia w dalszych naukach Delphi i programowania.