Witam serdecznie!
Chciałbym poprosić o radę. Mam do napisania program na zaliczenie i w sumie już skończyłem, ale chciałbym go zabezpieczyć dokładnie przed "złośliwym użytkownikiem". Cały program zawiera tylko kilka komponentów: Label, Edit, Button. Piszę pod Debianem w Lazarus'ie. W Edit'ach znajdują się jedynie liczby. Generalizując mam połowę Edit'ów ReadOnly(Properties -> ReadOnly(True)), a połowę nie. No i te Edit'y, które nie są ReadOnly(do wpisywania cyfr z zakresu np. [-100; 100]) są zabezpieczone przed przekroczeniem zakresu przez właściwość MaxLenght oraz przez Event'y: Exit(Wyświetlający się komunikat, gdy się jest poza zakresem) oraz KeyPress(Zakres klawiszy od 0 do 9 wraz z minusem, tab oraz backspace).
Chciałbym by w tych Edit'ach, które nie są zabezpieczone ReadOnly nie działał prawy klawisz myszy lub nie byłaby aktywna opcja Paste z menu podręcznego prawego klawisza myszy. Zauważyłem, że opcja Paste w menu podręcznym jest NIE aktywna w polach ReadOnly, więc pewnie istnieje jakaś głęboka właściwość/funkcja/procedura, która powoduje dezaktywacje wklejania tekstu i właśnie na takim rozwiązaniu mi najbardziej zależy.
Powód: Niby program jest zabezpieczony przed wpisywaniem złych danych(alfabetu oraz cyfr poza zakresem), ale jak wkleję jakiś skopiowany tekst za pomocą myszy to po wykryciu przez program Event'u Exit wyskakuje wyjątek środowiska/programu(Project Zadanie9 raised exception class 'EConvertError' with message:[...]).
Dla jasności wkleje Event'y o których wspomniałem
Exit:
procedure TForm1.EditXExit(Sender: TObject);
{ Wcześniej przekonwetowałem obiekty TEdit EditX,Y,A,B,R na TMaskEdit
i zastosowałem taką maske w polu właściwości EditMask: #999;1;
Wyglądało to źle, więc zdecydowałem się na usunięcie maski
i zastosowanie tylko tej procedury.}
var
Liczba : Integer;
BezSpacji : string;
begin
BezSpacji := Trim (EditX.Text);
if BezSpacji <> '' then
begin
Liczba := StrToInt (BezSpacji);
if (-100 > Liczba) or (Liczba > 100) then
begin
EditX.SetFocus;
ShowMessage('Proszę wprowadzić liczbę X z zakresu od -100 do 100.');
end;
end
end;
KeyPress:
procedure TForm1.EditXKeyPress(Sender: TObject; var Key: char);
begin
if (key = #13) then
begin
Form1.Oblicz.Click;
end
else if not (key in ['-', '0'..'9',#8{backspace},#9{tab}]) then
begin
Key := #0;
end;
end;
Mam nadzieję, że uzyskam jakieś pomocne odpowiedzi od Was. (Tak... Szukałem w Google)