//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);
}
TEdit вводимые символы
void __fastcall TForm2::Edit2KeyPress(TObject *Sender, char &Key)
{
if(!((Key>='0' && Key<='9') || (Key=='\b') || (Key=='\x03') || (Key=='\x16')))
Key = 0;
}
Как видно он предотвращает ввод в поле Edit2 всего кроме цифр. Но он не помогает от вставки любого текста. Как можно предотвратить такую вставку?
Цитата:
Originally posted by L0wFlea_sq
Как видно он предотвращает ввод в поле Edit2 всего кроме цифр. Но он не помогает от вставки любого текста. Как можно предотвратить такую вставку?
Как видно он предотвращает ввод в поле Edit2 всего кроме цифр. Но он не помогает от вставки любого текста. Как можно предотвратить такую вставку?
Ну, надо перехватить событие WM_PASTE. Намного проще воспользоваться специализированным компонентом, вроде TRxNumberEdit или TDBNumberEditEh.
Цитата:
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 всего кроме цифр. Но он не помогает от вставки любого текста. Как можно предотвратить такую вставку?
Вот небольшой код для TEdit:
void __fastcall TForm2::Edit2KeyPress(TObject *Sender, char &Key)
{
if(!((Key>='0' && Key<='9') || (Key=='\b') || (Key=='\x03') || (Key=='\x16')))
Key = 0;
}
Как видно он предотвращает ввод в поле Edit2 всего кроме цифр. Но он не помогает от вставки любого текста. Как можно предотвратить такую вставку?
Код:
Извиняюсь, что припозднился...