CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Własność Increment komponentu SpinEdit.

Własność Increment komponentu SpinEdit.

problemy z funkcjonowaniem bibliotek, komponentów itp.

Własność Increment komponentu SpinEdit.

Nowy postprzez manin » wtorek, 14 stycznia 2014, 11:09

Witam ponownie.
Czy istnieje jakiś sposób na to aby przy użyciu SpinEdita zmieniać wartość zmiennej double inaczej niż tylko o wartości całkowite? Przeszukałem forum i post tutaj wskazuje na to, że tak (chyba, że nie zrozumiałem kontekstu).
Używam Buildera 6 i za każdym razem, gdy zmieniam własność Increment na liczbę inną niż całkowitą otrzymuję błąd "is not a valid integer value", a wpisanie w SpinEdicie liczby zmiennoprzecinkowej powoduje jej zokrąglenie.
Avatar użytkownika
manin
Bladawiec
Bladawiec
 
Posty: 5
Dołączył(a): poniedziałek, 2 grudnia 2013, 14:59
Podziękował : 2
Otrzymał podziękowań: 0
System operacyjny: WinXP
Kompilator: C++ Builder 6
Gadu Gadu: 0
    Windows XPFirefox

Re: Własność Increment komponentu SpinEdit.

Nowy postprzez Mironas » wtorek, 14 stycznia 2014, 13:11

W SpinEdit można wpisywać wyłącznie liczby całkowite.

Proponuję użyć zwykłego komponentu TEdit i dodatkowo TUpDown. Aby w TEdit ograniczyć wpisywanie tylko do liczb możesz utworzyć takie zdarzenie:
KOD cpp:     UKRYJ  
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
  if ( !(isdigit(Key) || Key==VK_BACK || Key==DecimalSeparator) )
    Key = 0;
  else if ( (Key==DecimalSeparator) && (Edit1->Text.Pos(DecimalSeparator)>0) )
    Key = 0;
}
 
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 446
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 21
Otrzymał podziękowań: 63
System operacyjny: Windows 10
Kompilator: C++Builder 10.2 Tokyo
TMS Components Pack
Gadu Gadu: 0
    Windows XPChrome

Re: Własność Increment komponentu SpinEdit.

Nowy postprzez Cyfrowy Baron » wtorek, 14 stycznia 2014, 17:26

SpinEdit inkrementuje tylko liczy całkowite. Możesz posłużyć się jednak komponentem TCSpinButton z palety Samples w połączeniu z komponentem TEdit. Umieść na formularzu komponent CSpinButton1 i Edit1. We właściwości FocusControl komponentu CSpinButton1 wybierz Edit1. Utwórz zdarzenia OnDownClick i OnUpClick dla komponentu CSpinButton1. W zdarzeniach umieść taki kod:

KOD cpp:     UKRYJ  
void __fastcall TForm1::CSpinButton1DownClick(TObject *Sender)
{
  double x = StrToFloatDef( reinterpret_cast<TEdit *>(CSpinButton1->FocusControl)->Text, 0.2);
  x -= 0.2;
  reinterpret_cast<TEdit *>(CSpinButton1->FocusControl)->Text = FloatToStrF(x, ffFixed, 7, 1);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::CSpinButton1UpClick(TObject *Sender)
{
  double x = StrToFloatDef( reinterpret_cast<TEdit *>(CSpinButton1->FocusControl)->Text, 0.2);
  x += 0.2;
  reinterpret_cast<TEdit *>(CSpinButton1->FocusControl)->Text = FloatToStrF(x, ffFixed, 7, 1);
}


W przykładzie inkrementowana jest wartość 0.2, ale możesz oczywiście użyć dowolnej.

Nie wiem, czy w C++Builder 6 występuje funkcja StrToFLoatDef, więc masz tu jeszcze kod bez tej funkcji:

KOD cpp:     UKRYJ  
double MyStrToFloatDef(String sText, double x)
{
  double Result;
  try{ Result = sText.ToDouble(); } catch(...) { Result = x;}

  return Result;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CSpinButton1DownClick(TObject *Sender)
{
  double x = MyStrToFloatDef( reinterpret_cast<TEdit *>(CSpinButton1->FocusControl)->Text, 0.2);
  x -= 0.2;
  reinterpret_cast<TEdit *>(CSpinButton1->FocusControl)->Text = FloatToStrF(x, ffFixed, 7, 1);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::CSpinButton1UpClick(TObject *Sender)
{
  double x = MyStrToFloatDef( reinterpret_cast<TEdit *>(CSpinButton1->FocusControl)->Text, 0.2);
  x += 0.2;
  reinterpret_cast<TEdit *>(CSpinButton1->FocusControl)->Text = FloatToStrF(x, ffFixed, 7, 1);
}
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4727
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 444
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows 7Firefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Biblioteki i komponenty

Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] i 2 gości

cron