IT NEWS PC REVUE PC FORUMInternet time: @496
Obsah fóra
Pravidlá  •  Kontakt  •  Prihlásenie  •  Registrácia

Končí podpora Windows XP

Prejdite na nový a moderný Windows 7 s plným prístupom k aktualizáciám! www.Microsoft.sk

Výnimočný e-shop BiTiTi.sk!

Hardware, software, elektronika za skvelé ceny. Všetko skladom !!! www.bititi.sk

Chceš si privyrobiť?

jednoducho vyplň dotazník a zarob si! Navyše môžeš vyhrať iPad 2 www.marketagent.com

Právnické eso

Študenti práva a právnici, ukážte sa. Vyhrajte tablet, smartfón a iné ceny! www.najpravo.sk

Neriskuj

Zisti bezpečnosť svojho profilu skôr, než to niekto zneužije. www.tatrabanka.sk

Pomoc zo vstupom Edit Delphi

Zaslať odpoveď
AutorSpráva
SVD
Užívateľ
Užívateľ

Založený: 20.06.2009
Príspevky: 24

PríspevokZaslal: Ne 28.02.10 3:10Odpovedať s citátomNávrat hore

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)
Zobraziť informácie o autoroviOdoslať súkromnú správu
Fico
Skúsený užívateľ
Skúsený užívateľ

Založený: 11.01.2009
Príspevky: 909

PríspevokZaslal: Ne 28.02.10 11:56Odpovedať s citátomNávrat hore

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;
Zobraziť informácie o autoroviOdoslať súkromnú správuICQ
SVD
Užívateľ
Užívateľ

Založený: 20.06.2009
Príspevky: 24

PríspevokZaslal: Ne 28.02.10 16:39Odpovedať s citátomNávrat hore

Ď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.
Zobraziť informácie o autoroviOdoslať súkromnú správu
Fico
Skúsený užívateľ
Skúsený užívateľ

Založený: 11.01.2009
Príspevky: 909

PríspevokZaslal: Ne 28.02.10 18:36Odpovedať s citátomNávrat hore

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
Zobraziť informácie o autoroviOdoslať súkromnú správuICQ
SVD
Užívateľ
Užívateľ

Založený: 20.06.2009
Príspevky: 24

PríspevokZaslal: Ne 28.02.10 19:42Odpovedať s citátomNávrat hore

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.
Zobraziť informácie o autoroviOdoslať súkromnú správu
Zobraziť príspevky z predchádzajúcich:    
Zaslať odpoveď
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.

Powered by phpBB 2.x.x © 2005 - 2012 PCforum, webhosting by WebSupport, edited by JanoF