oneiro napisał(a):dałem kod od polymorphusa zaraz za nagłówkami, a przed pierowszą funkcją
Źle! Pobierz wartość do zmiennej w jakimś zdarzeniu, a nie poza nim.
oneiro napisał(a):w pliku unit1.h dałem w publicznej strefie TForm1 "char piont".
Może być w
public jeżeli ma być dostępne na innych formach, a jeżeli ma być dostępne tylko na
tej formie to wystarczy w
private.
Sposób podany przez
polymorphism zadziała również ze zmienną typu AnsiString, użyj więc tego typu to potem będzie ci łatwiej nią operować:
Plik nagłówkowy np. Unit1.h
private:
AnsiString point;
Jeżeli separator chcesz pobrać zaraz po uruchomieniu programu to zrób to w konstruktorze klasy formularza lub w zdarzeniu OnCreate dla tego formularza:
Plik źródłowy np. Unit1.cpp
#include "Unit1.h"
#include <locale>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
point = (AnsiString)std::use_facet<std::numpunct<char> >(std::locale("")).decimal_point();
}
Zamiast tego co podał
polymorphism możesz użyć funkcji
GetLocalInfo z flagą
LOCALE_SDECIMAL.
Plik nagłówkowy np. Unit1.h
private: // User declarations
char cDecimal[2];
Plik źródłowy np. Unit1.cpp
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
GetLocaleInfoA(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, cDecimal, sizeof(cDecimal));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
float liczba;
String sep[] = {".", ","};
String decimal = (AnsiString)cDecimal;
for(int x = 0; x < ARRAYSIZE(sep); x++)
{
if( Edit1->Text.LastDelimiter( sep[x] ) && sep[x] != decimal )
{
Edit1->Text = StringReplace(Edit1->Text, sep[x], decimal, TReplaceFlags() << rfReplaceAll);
break;
}
}
liczba = Edit1->Text.ToDouble();
}