Bueno, al final lo he pensado mejor y voy a hacer que imprima solo caracteres válidos pero la cosa es que consigo filtrarlo pero me lo muestra al final de lo que pego con Ctrl + V en vez de sustituir lo que pego por lo filtrado. Tengo esto:
Código PHP:
void __fastcall TForm1::EditValue1KeyPress(TObject *Sender, System::WideChar &Key)
{
if(Key == 0x16){
if(Clipboard()->HasFormat(CF_TEXT)){
String CBText = Clipboard()->AsText;
EditValue1->Text = SuprimirCaracteresInvalidos(CBText.UpperCase());
}
}else if((Key < '0' || (Key > '9' && (Key < 'A' || Key > 'F'))) && Key != '\b' && Key != 0x03 && Key != 0x18)
Key = NULL;
}
//---------------------------------------------------------------------------
String TForm1::SuprimirCaracteresInvalidos(String input)
{
int i, j;
String output = "";
String mask = "0123456789ABCDEF";
for(i = 1; input.Length() > 0 && i < input.Length(); i++){
for(j=1; j < mask.Length(); j++){
if(input[i] == mask[j]){
output += (WideString)input[i];
}
}
}
return output;
}
Además también me falta que al pegar con el menú contextual tenga el mismo comportamiento. El menú contextual o popup no lo he creado yo, es el de Windows y no se como hacer eso.