# TGNumberEntry+ TGNumberEntryField 继承 TGTextEntry, TGNumberFormat TGNumberEntry 继承 TGCompositeFrame, TGWidget, TGNumberFormat ## class **TGNumberFormat** ```cpp class TGNumberFormat { public: enum EStyle { // Style of number entry field kNESInteger = 0, // Integer kNESRealOne = 1, // Fixed fraction real, one digit kNESRealTwo = 2, // Fixed fraction real, two digit kNESRealThree = 3, // Fixed fraction real, three digit kNESRealFour = 4, // Fixed fraction real, four digit kNESReal = 5, // Real number kNESDegree = 6, // Degree kNESMinSec = 7, // Minute:seconds kNESHourMin = 8, // Hour:minutes kNESHourMinSec = 9, // Hour:minute:seconds kNESDayMYear = 10, // Day/month/year kNESMDayYear = 11, // Month/day/year kNESHex = 12 // Hex }; enum EAttribute { // Attributes of number entry field kNEAAnyNumber = 0, // Any number kNEANonNegative = 1, // Non-negative number kNEAPositive = 2 // Positive number }; enum ELimit { // Limit selection of number entry field kNELNoLimits = 0, // No limits kNELLimitMin = 1, // Lower limit only kNELLimitMax = 2, // Upper limit only kNELLimitMinMax = 3 // Both lower and upper limits }; enum EStepSize { // Step for number entry field increase kNSSSmall = 0, // Small step kNSSMedium = 1, // Medium step kNSSLarge = 2, // Large step kNSSHuge = 3 // Huge step }; virtual ~TGNumberFormat() { } ClassDef(TGNumberFormat,0) // Class defining namespace for several enums used by TGNumberEntry }; ``` **TGNumberEntryField** ```cpp TGNumberEntryField(const TGWindow *p, Int_t id, Double_t val, GContext_t norm, FontStruct_t font = GetDefaultFontStruct(), UInt_t option = kSunkenFrame | kDoubleBorder, Pixel_t back = GetWhitePixel()); TGNumberEntryField(const TGWindow *parent = 0, Int_t id = -1, Double_t val = 0, EStyle style = kNESReal, EAttribute attr = kNEAAnyNumber, ELimit limits = kNELNoLimits, Double_t min = 0, Double_t max = 1); virtual void SetNumber(Double_t val); virtual void SetIntNumber(Long_t val); virtual void SetTime(Int_t hour, Int_t min, Int_t sec); virtual void SetDate(Int_t year, Int_t month, Int_t day); virtual void SetHexNumber(ULong_t val); virtual void SetText(const char* text, Bool_t emit = kTRUE); virtual Double_t GetNumber() const; virtual Long_t GetIntNumber() const; virtual void GetTime(Int_t& hour, Int_t& min, Int_t& sec) const; virtual void GetDate(Int_t& year, Int_t& month, Int_t& day) const; virtual ULong_t GetHexNumber() const; virtual Int_t GetCharWidth(const char* text = "0") const; virtual void IncreaseNumber(EStepSize step = kNSSSmall, Int_t sign = 1, Bool_t logstep = kFALSE); virtual void SetFormat(EStyle style, EAttribute attr = kNEAAnyNumber); virtual void SetLimits(ELimit limits = kNELNoLimits, Double_t min = 0, Double_t max = 1); virtual void SetState(Bool_t state); virtual void SetLogStep(Bool_t on = kTRUE) { // Set logarithmic steps fStepLog = on; } virtual EStyle GetNumStyle() const { // Get the numerical style return fNumStyle; } virtual EAttribute GetNumAttr() const { // Get the numerical attribute return fNumAttr; } virtual ELimit GetNumLimits() const { // Get the numerialc limit attribute return fNumLimits; } virtual Double_t GetNumMin() const { // Get the lower limit return fNumMin; } virtual Double_t GetNumMax() const { // Get the upper limit return fNumMax; } virtual Bool_t IsLogStep() const { // Is log step enabled? return fStepLog; } virtual Bool_t HandleKey(Event_t* event); virtual Bool_t HandleFocusChange (Event_t* event); virtual void TextChanged(const char *text = 0); virtual void ReturnPressed(); virtual void Layout(); virtual Bool_t IsEditable() const { return kFALSE; } virtual void InvalidInput(const char *instr) { Emit("InvalidInput(char*)", instr); } //*SIGNAL* virtual void SavePrimitive(std::ostream &out, Option_t * = ""); ``` **TGNumberEntry** ```cpp TGNumberEntry(const TGWindow *parent = 0, Double_t val = 0, Int_t digitwidth = 5, Int_t id = -1, EStyle style = kNESReal, EAttribute attr = kNEAAnyNumber, ELimit limits = kNELNoLimits, Double_t min = 0, Double_t max = 1); virtual ~TGNumberEntry(); virtual void SetNumber(Double_t val) { // Set the numeric value (floating point representation) fNumericEntry->SetNumber(val); } virtual void SetIntNumber(Long_t val) { // Set the numeric value (integer representation) fNumericEntry->SetIntNumber(val); } virtual void SetTime(Int_t hour, Int_t min, Int_t sec) { // Set the numeric value (time format) fNumericEntry->SetTime(hour, min, sec); } virtual void SetDate(Int_t year, Int_t month, Int_t day) { // Set the numeric value (date format) fNumericEntry->SetDate(year, month, day); } virtual void SetHexNumber(ULong_t val) { // Set the numeric value (hex format) fNumericEntry->SetHexNumber(val); } virtual void SetText(const char* text) { // Set the value (text format) fNumericEntry->SetText(text); } virtual void SetState(Bool_t enable = kTRUE); virtual Double_t GetNumber() const { // Get the numeric value (floating point representation) return fNumericEntry->GetNumber(); } virtual Long_t GetIntNumber() const { // Get the numeric value (integer representation) return fNumericEntry->GetIntNumber (); } virtual void GetTime(Int_t& hour, Int_t& min, Int_t& sec) const { // Get the numeric value (time format) fNumericEntry->GetTime(hour, min, sec); } virtual void GetDate(Int_t& year, Int_t& month, Int_t& day) const { // Get the numeric value (date format) fNumericEntry->GetDate(year, month, day); } virtual ULong_t GetHexNumber() const { // Get the numeric value (hex format) return fNumericEntry->GetHexNumber(); } virtual void IncreaseNumber(EStepSize step = kNSSSmall, Int_t sign = 1, Bool_t logstep = kFALSE) { // Increase the number value fNumericEntry->IncreaseNumber(step, sign, logstep); } virtual void SetFormat(EStyle style, EAttribute attr = TGNumberFormat::kNEAAnyNumber) { // Set the numerical format fNumericEntry->SetFormat(style, attr); } virtual void SetLimits(ELimit limits = TGNumberFormat::kNELNoLimits, Double_t min = 0, Double_t max = 1) { // Set the numerical limits. fNumericEntry->SetLimits(limits, min, max); } virtual EStyle GetNumStyle() const { // Get the numerical style return fNumericEntry->GetNumStyle(); } virtual EAttribute GetNumAttr() const { // Get the numerical attribute return fNumericEntry->GetNumAttr(); } virtual ELimit GetNumLimits() const { // Get the numerical limit attribute return fNumericEntry->GetNumLimits(); } virtual Double_t GetNumMin() const { // Get the lower limit return fNumericEntry->GetNumMin(); } virtual Double_t GetNumMax() const { // Get the upper limit return fNumericEntry->GetNumMax(); } virtual Bool_t IsLogStep() const { // Is log step enabled? return fNumericEntry->IsLogStep(); } virtual void SetButtonToNum(Bool_t state); void SetNumStyle(EStyle style) { SetFormat(style, GetNumAttr()); } //*SUBMENU* void SetNumAttr(EAttribute attr = kNEAAnyNumber) { SetFormat(GetNumStyle(), attr); } //*SUBMENU* void SetNumLimits(ELimit limits = kNELNoLimits) { SetLimits(limits, GetNumMin(), GetNumMax()); } //*SUBMENU* void SetLimitValues(Double_t min = 0, Double_t max = 1) { SetLimits(GetNumLimits(), min, max); } //*MENU* virtual void SetLogStep(Bool_t on = kTRUE); //*TOGGLE* *GETTER=IsLogStep virtual void Associate(const TGWindow *w); virtual Bool_t ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2); virtual void ValueChanged(Long_t val); //*SIGNAL* virtual void ValueSet(Long_t val); //*SIGNAL* TGNumberEntryField *GetNumberEntry() const { // Get the number entry field return fNumericEntry; } TGButton *GetButtonUp() const { // Get the up button return fButtonUp; } TGButton *GetButtonDown() const { // Get the down button return fButtonDown; } virtual Bool_t IsEditable() const { return kFALSE; } UInt_t GetDefaultHeight() const { return fNumericEntry->GetDefaultHeight(); } virtual void SavePrimitive(std::ostream &out, Option_t * = ""); virtual TGLayoutManager *GetLayoutManager() const; ``` ## code ```cpp #include "TGNumberEntry.h" // TGNumberEntry TGNumberEntry *fYearEntry = new TGNumberEntry(frame, 2016/*初始值*/, 5/*能容纳位数*/, IDs,TGNumberFormat::kNESInteger,TGNumberFormat::kNEAPositive,TGNumberFormat::kNELLimitMin, 1995/*min*/,2020/*max*/); frame->AddFrame(fYearEntry, new TGLayoutHints(kLHintsLeft, 5, 5, 2, 2)); // fYearEntry->Connect("ValueSet(Long_t)", "MyMainFrame", this, "DoSetlabel()"); // (fYearEntry->GetNumberEntry())->Connect("ReturnPressed()", "MyMainFrame", this,"DoSetlabel()"); ``` ## example