• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Nie działająca kropka i przecinek w WIN XP

Cloud VPS
0 głosów
274 wizyt
pytanie zadane 16 lipca 2015 w C i C++ przez Yari27 Początkujący (410 p.)
//------------------------
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
        if ((Key < '0' || Key > '9') && (Key != ',') && (Key != '.') && (Key != VK_BACK)
          && (Key != VK_ESCAPE) && (Key != VK_RETURN))
        {
                Key = 0;
                ShowMessage("Dostępne są tylko liczby oraz przecinek.");
        }
}
//------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Edit1->Text = StringReplace(Edit1->Text, ",", ".", TReplaceFlags() << rfReplaceAll);

     wartosc = StrToFloatDef(Edit1->Text,0);
     if (wartosc == 0) ShowMessage("Niepoprawnie wpisana liczba.");
     //
}
//------------------------

Na WIN7 działa wpisywanie zarówno '.' jak i ',' oraz wpisywanie do float, natomiast na WIN XP nie che mi działać wpisywanie kropki i przecinka, dostaję muj komunikat "Niepoprawnie wpisana liczba." i komunikat dodatkowy po EN "... floating point .." .

Wie może ktoś jak na to zaradzić żeby na xp też działały liczby zmiennoprzecinkowe?

1 odpowiedź

+1 głos
odpowiedź 16 lipca 2015 przez Krawiec91 Pasjonat (19,600 p.)
wybrane 17 lipca 2015 przez Yari27
 
Najlepsza

Spróbuj coś z tego wydobyć. Nie pamiętam, czy to było testowane na win xp.  Program miał rysować wykres pewnej funkcji w podanych przez użytkownika przedziałach. Przedział to liczby rzeczywiste, zarówno dodatnie i ujemne. Chciałem zabezpieczyć program przed wpisywaniem liter i inego typu pułapek.
 

void __fastcall TForm1::E_XminKeyPress(TObject *Sender, char &Key)
{
        if (!(isdigit(Key) || Key == VK_BACK || Key == DecimalSeparator || Key==45))
        {
                Key = 0;
        }
        else
        {
                if ((Key == DecimalSeparator) && (E_Xmin->Text.Pos(DecimalSeparator) > 0))
                {
                Key = 0;
                }
        }
}

 

komentarz 16 lipca 2015 przez Krawiec91 Pasjonat (19,600 p.)

A tutaj sama obsługa zdarzenia OnChange(). Rozważenie przypadku, gdy użytkownik zaczyna wprowadzać ujemną liczbę, oraz sprawdzenie czy użytkownik nie próbuje wprowadzić przedziału o długośći 0. W programie było jeszcze jedno pole Edit do wprowadzenia drugiego końca przedziału.
 

void __fastcall TForm1::E_XminChange(TObject *Sender)
{
     //Program nie konwertuje stringa do double, w wypadku
     //gdy sam znak "-" zostal wprowadzony oraz w przypadku pustego pola
     //Edit -> "".
     if (E_Xmin->Text=="-" || E_Xmin->Text=="")
     {
     }
     else
     {
        //Obsluga sytuacji gdy dlugosc przedzialu jest rowna zero.
        //Takie same wartosci x_min oraz x_max.

        if(E_Xmin->Text==E_Xmax->Text)
        {
           Application->MessageBoxA("Probujesz wprowadzic zerowy przedzial",
           "Ostrzezenie",(MB_OK | MB_ICONWARNING));
        }
        else
        {
             x_min=StrToFloat(E_Xmin->Text);
        }

     }
     Refresh();
}

 

komentarz 17 lipca 2015 przez Yari27 Początkujący (410 p.)
Dzięki "DecimalSeparator" załatwia sprawę.

Dziwne w XP trzeba przecinek jak i kropkę zamieniać na "DecimalSeparator".

Podobne pytania

+1 głos
1 odpowiedź 1,256 wizyt
pytanie zadane 27 lutego 2022 w C i C++ przez Ciawes Użytkownik (530 p.)
0 głosów
2 odpowiedzi 1,778 wizyt
+2 głosów
1 odpowiedź 282 wizyt
pytanie zadane 17 kwietnia 2024 w C i C++ przez polandonion Dyskutant (7,630 p.)

93,454 zapytań

142,449 odpowiedzi

322,718 komentarzy

62,833 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...