Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

TEdit вводимые символы

7.2K
29 ноября 2004 года
L0wFlea_sq
15 / / 23.11.2004
Вот небольшой код для TEdit:

void __fastcall TForm2::Edit2KeyPress(TObject *Sender, char &Key)
{
if(!((Key>='0' && Key<='9') || (Key=='\b') || (Key=='\x03') || (Key=='\x16')))
Key = 0;
}

Как видно он предотвращает ввод в поле Edit2 всего кроме цифр. Но он не помогает от вставки любого текста. Как можно предотвратить такую вставку?
10
30 ноября 2004 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by L0wFlea_sq
Как видно он предотвращает ввод в поле Edit2 всего кроме цифр. Но он не помогает от вставки любого текста. Как можно предотвратить такую вставку?


Ну, надо перехватить событие WM_PASTE. Намного проще воспользоваться специализированным компонентом, вроде TRxNumberEdit или TDBNumberEditEh.

246
02 декабря 2004 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by L0wFlea_sq
Вот небольшой код для TEdit:

void __fastcall TForm2::Edit2KeyPress(TObject *Sender, char &Key)
{
if(!((Key>='0' && Key<='9') || (Key=='\b') || (Key=='\x03') || (Key=='\x16')))
Key = 0;
}

Как видно он предотвращает ввод в поле Edit2 всего кроме цифр. Но он не помогает от вставки любого текста. Как можно предотвратить такую вставку?



Код:
//in hpp

#ifndef Unit1H
#define Unit1H
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>

class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TEdit *Edit1;
private:    // User declarations
    bool __fastcall ClipboardCheck(void);
    TWndMethod OldEditProc;
    void __fastcall NewEditProc(Messages::TMessage &Message);
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
};

extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------

//in cpp

#include <vcl.h>
#include <Clipbrd.hpp>
#include <mmsystem.h>
#pragma hdrstop

#include "Unit1.h"

#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    //Вместо Edit1KeyPress легче будет установить соотв. стиль    
    SetWindowLong(Edit1->Handle, GWL_STYLE, GetWindowLong(Edit1->Handle, GWL_STYLE) | ES_NUMBER);
    OldEditProc = Edit1->WindowProc;
    Edit1->WindowProc = NewEditProc;
}

bool __fastcall TForm1::ClipboardCheck(void)
{
     if(Clipboard()->HasFormat(CF_TEXT))
        {
           bool ReturnFlag = true;
           int BufferSize = Clipboard()->AsText.Length() + 1;

           char *Buffer = new char[BufferSize];

           ZeroMemory(Buffer, BufferSize);
           Clipboard()->GetTextBuf(Buffer, BufferSize);

           for(int i = 0; i < BufferSize - 1; i++)
              if(IsCharAlpha(Buffer))
                 {
                    ReturnFlag = false;
                    break;
                 }

           delete [] Buffer;

           return ReturnFlag;
        }
     return false;
}

void __fastcall TForm1::NewEditProc(Messages::TMessage &Message)

{
  if (Message.Msg == WM_PASTE) {
    if(ClipboardCheck())
        OldEditProc(Message);
    else {
        PlaySound("Beep", NULL, SND_ALIAS);
        return;
    }
  }
  else
    OldEditProc(Message);
}


Извиняюсь, что припозднился...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог