|
 | | |
| Autor | Správa |
SVD
 Užívateľ
 Založený: 20.06.2009 Príspevky: 24
 |
Pekný deň.
Mohol by mi niekto prosím napísať alebo poradiť ako by som ošetril vstup nejakej premennej z políčka Edit tak aby sa do neho nedal napísať iný znak ako len definovaný?
Potrebujem aby sa v políčku Edit zobrazovali len reálne čísla (0-9) a desatinná čiarka ",".
Videl som to v nejakých programoch (aj v programoch tvorených delphi) že vstupy boli krásne ošetrtené tak že sa do nich v podstate ani nedal zapísať znak ktorý tam nemal čo robiť. Určite viete čo myslím.
Ja načítavam vstup takto:
| kód: | y_min:=(StrToFloat(form1.Edit1.Text));
Nedalo by sa to spraviť nejako cez if (tu je príklad čo myslím)
if StrToFloat(form1.Edit1.Text) = "0" or "1" .... or "9"
then
else form1.Edit1.clear;
|
Alebo nebolo by to nejak vhodné cez vlastnosti editu: onChange a pod?
Ja vstupy ošetrujem cez funkciu try (pretože som to inak nevedel )
| kód: | try
.
.
**vznik chyby pri čítaní string a zaposovaní float**
**klasická chyba ak vo vzorci bude do premennej načítaný znak***
.
except
on EConvertError do ShowMessage('Do políčka: "Zmena o x násobok" musíte zadať kladné reálne číslo od 0 do 99.');
end; |
(A mohli by ste mi ešte pomôcť z odkazom na internetovú stránku (vietew čo myslím, ak kliknem na nejaký lebel1.caption; z nápisom napr.: "www.adresa.sk" že mi otvorí prehliadač z tou stránkou. A niečo podobné len z odkazom na napísanie e-mailu. )
Vopred ďakujem veľmi by mi to pomohlo.
(Som len začiatočník v Delphi) |
| |
  |
 |
Fico
 Skúsený užívateľ
 Založený: 11.01.2009 Príspevky: 909
 | Zaslal: Ne 28.02.10 11:56 |   |
Ošetrenie TEditu:
| kód: | procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9', ',',#8]) then key := #0;
end; |
Odoslanie e-mailu (tento postup ho odošle cez prednastavený program - v mojom prípade Outlook - teda nie priamo cez protokol SMTP):
| kód: | procedure TForm1.Label1Click(Sender: TObject);
begin
ShellExecute(0, 'open', 'mailto: uzivatel@gmail.com?subject=Tuto pride subjekt spravy&body=a tu text nachadzajuci sa v tele emailu', NIL, NIL, SW_SHOWNORMAL);
end; |
|
| |
   |
 |
SVD
 Užívateľ
 Založený: 20.06.2009 Príspevky: 24
 | Zaslal: Ne 28.02.10 16:39 |   |
Ďakujem Fico krásne funguje to ošetrenie editu. A nedalo by sa to ešte ošetriť tak aby som do Edit mohol zapísať iba jednu čiarku? Pretože teraz sa tem dá napísať mnoho. Ak nie tak aj tak ďakujem funguje to ako som chcel.
Čo sa týka toho e-mailu tú funkciu: ShellExecute mi píše, že nemám, deklarovanú a neviem ako by som ju mal deklarovať pretože ani jej typ nepoznám. |
| |
  |
 |
Fico
 Skúsený užívateľ
 Založený: 11.01.2009 Príspevky: 909
 | Zaslal: Ne 28.02.10 18:36 |   |
Tak tie dve čiarky by sa dalo pomocou premennej, ktorá by počítala ich výskyt, napríklad takto:
| kód: | var
commaCount: integer = 0;
...
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (Key = ',') then begin
if (commaCount >= 1) then key:= #0;
inc(commaCount);
end;
if not (Key in ['0'..'9', ',',#8]) then key := #0;
end; |
// potom ale netreba zabudnúť vynulovať obsah premennej commaCount - napr pri vymazaní editu; prípadne sa može použiť algoritmus, ktorý pri každom zadaní znaku bude počítať počet čiarok. To je asi aj lepší spôsob
A k tomu e-mailu: zabudol som napísať, že do uses treba pripojiť knižnicu ShellAPI, tak sa ospravedlňujem  |
| |
   |
 |
SVD
 Užívateľ
 Založený: 20.06.2009 Príspevky: 24
 | Zaslal: Ne 28.02.10 19:42 |   |
Vďaka Fico, krásne to ide. Tú premennú načítavania som deklaroval ako celkovú v programe a každé načítanie nového znaku ukladám do tej premennej i:
| kód: | if (length(edit1.Text) = 0) then i:=0;
if (Key = ',') then begin
i:=(i+1);
if (i > 1 ) then begin
key:=#0;
end;
end;
if not (Key in ['0'..'9', ',',#8]) then key := #0;
*********************
i:=0; sa nachádza v onActivate form1. |
A ten email ide krásne. Ešte raz dik.  |
| |
  |
 |
|
Nemôžete pridávať nové témy do tohto fóra. Nemôžete odpovedať na témy v tomto fóre. Nemôžete upravovať svoje príspevky v tomto fóre. Nemôžete mazať svoje príspevky v tomto fóre. Nemôžete hlasovať v tomto fóre.
|
| |