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
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]);
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.