Zabezpieczenie przed literami

witam może ktoś podpowiedzieć jak w prosty sposób zabezpieczyć tą funkcje przed wprowadzeniem liter???

procedure TFormularz.WprowadzMacierz(var X: TMacierz; Wys,Szer: Byte);


var i,j: Byte; {deklaracja zmiennych sterujących pętlami}


begin


 for i:=1 to Szer do


  for j:=1 to Wys do


   X[i,j]:=StrToFloat(InputBox('Elementy macierzy','Podaj element '+IntToStr(i)+','+IntToStr(j)+': ','0'));


end;

:lol: Sam pomysł wprowadzenia macierzy element po elemencie w środowisku graficznym jest poroniony. Owszem można nawet przy tak niedorzecznym sposobie zabezpieczyć się przed wprowadzaniem liter, ale to na pewno nie jest prosty sposób raczej taki dla bardzo zaawansowanych.

Może prościej i bardziej praktycznie skorzystać ze StringGrid’a, lub wręcz z DrawGrid’a.

Tak sobie myślę, może takie coś cie zaspokoi :smiley:

function InputFloat(const Title,Prompt:String;Def:Extended):Extended;

var S:String;

begin

  S:=FloatToStr(Def);

  while true do

  begin

     try

        S:= // usuń ten wiersz jeżeli chcesz aby po nie udanej probie wracało do pierwotnej wartości

            InputBox(Title,Prompt,S);

        Result:=StrToFloat(S);

        Break;

     except

     end;

  end;

end;

Wywołanie:

X[i,j]:=InputFloat('Elementy macierzy',Format('Podaj element %d,%d: ',[i,j]),X[i,j]);

możesz troszkę sprecyzować bo nie bardzo czaję o co chodzi

Czy słyszałeś cokolwiek o funkcjach?

  • [*:1jtcg33b]Wpisujesz podaną przeze mnie funkcje powyżej wiersza:

    procedure TFormularz.WprowadzMacierz(var X: TMacierz; Wys,Szer: Byte);

albo, poniżej tego wiersza ale przed begin funkcji.[*:1jtcg33b]Zamieniasz wiersz:

X[i,j]:=StrToFloat(InputBox('Elementy macierzy','Podaj element '+IntToStr(i)+','+IntToStr(j)+': ','0'));

na wiersz co podałem pod funkcją.

Dopóki będziesz działać w środowisku, nadal będą wyskakiwać komunikaty, ale nie będą oni przerywać wypełnienia macierzy. Poza środowiskiem nie będzie żadnych zbędnych komunikatów.

już sobie poradziłem w podobny sposób, dzięki