Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-01-2009
Ðαяισš Ðαяισš is offline
Miembro
 
Registrado: dic 2008
Posts: 42
Poder: 0
Ðαяισš Va por buen camino
Smile Verificar Numeros Pegados

Hola

Otra ves tengo dudas..
Esta ves trata en como hacer para que al dar click a un boton pegue lo que esta copiado en "Clipboard"
pero el problema no es para pegar.. sino para que al pegar verifique si las letras y numeros pegados son Hexadecimales
Si no lo son entonces de un aviso como un mensaje que diga:

Los Numeros pegados no son valida, Solo se permiten numeros hexadecimales.

Código Delphi [-]
procedure TForm.PegarClick(Sender: TObject);
begin
Edit1.Clear;
Edit1.PasteFromClipboard;
// aqui iria la comprobacion de los numeros Hexadecimales 
// Por Defecto [0..1] [a..f] [A..F] si no es correcto iria esto:
raise exception.Create(''''+Key+'''' + ' Es Incorrecto, Solo Se Permiten Numeros Hexadecimales');
end;

Alguien Tiene idea de como hacer ello?

Gracias Por sus respuestas (A quienes lo hagan )

Última edición por dec fecha: 16-01-2009 a las 11:08:06.
Responder Con Cita
  #2  
Antiguo 16-01-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
El problema aquí es que no tienes forma directa de decirle al método PasteFromClipboard cuál debe ser el formato correcto.

Una solución pasa por usar el objeto Clipboard (de la unidad ClipBrd) para obtener el contenido del portapapeles directamente, analizarlo y actuar en consecuencia:

Código Delphi [-]
{$hints off}
(*
  Determina si la cadena dada corresponde a un número hexadecimal
*)
function isHexNumber(S: String): Boolean;
var
  V, Code: Integer;

begin
  Val('$' + S, V, Code);
  Result := Code = 0;
end;
{$hints on}

procedure TForm1.Button1Click(Sender: TObject);
begin
  // Verificamos primero que el portapapeles tenga texto
  if Clipboard.HasFormat(CF_TEXT) and isHexNumber(Clipboard.AsText) then
    Edit1.Text := Clipboard.AsText
  else
    raise Exception.Create('Formato incorrecto');
end;

Sin embargo, esto sólo te servirá si pegas el texto explícitamente mediante el botón. Pero no impides que se pegue directamente con Ctrl+V o Shift+Ins o el menú contextual. Para esto, tendrías que interceptar el mensaje WM_PASTE que el S.O manda al control de edición cuando se pega texto desde el portapapeles.

Lo ideal para ello sería crear un componente derivado de TEdit que implemente un manejador para dicho mensaje. Pero también puedes hacerlo 'al vuelo' reemplazando el procedimiento de ventana (el encargado de procesar los mensajes) del Edit como muestro a continuación:

Código Delphi [-]
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
  private
    OldEditWndProc: TWndMethod;
    procedure EditWndProc(var Message: TMessage);
  end;

implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
  // Guardamos una referencia al procedimiento original
  OldEditWndProc := Edit1.WindowProc;

  // Reemplazamos el procedimiento por uno nuestro
  Edit1.WindowProc := EditWndProc;
end;

procedure TForm1.EditWndProc(var Message: TMessage);
begin
  // Si recibimos el mensaje de pegado y el portapapeles tiene texto
  if (Message.Msg = WM_PASTE) and Clipboard.HasFormat(CF_TEXT) then
  begin
    // Lanzamos la excepción si el portapapeles no tiene un número hexadecimal
    if not isHexNumber(Clipboard.AsText) then
      raise Exception.Create('Formato incorrecto');
  end;

  // Llamamos al procedimiento original para no alterar el comportamiento del Edit.
  OldEditWndProc(Message);
end;

// Saludos
Responder Con Cita
  #3  
Antiguo 18-01-2009
Ðαяισš Ðαяισš is offline
Miembro
 
Registrado: dic 2008
Posts: 42
Poder: 0
Ðαяισš Va por buen camino
Unhappy No Sirvio

el codigo no sirvio.. me dice que "Clipboard" no esta definido.. :S:S

que es ClipBoard??

Aqui el una foto con el error ...



Espero Puedas Ayudarme Denuevo. Gracias
Responder Con Cita
  #4  
Antiguo 18-01-2009
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
NO he probado el código de roman, pero intuyo que está bien. Tu error se debe a que no añadiste a uses la unidad ClipBrd. Y eso que lo ha dejado dicho roman:

Cita:
Una solución pasa por usar el objeto Clipboard (de la unidad ClipBrd)
Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #5  
Antiguo 19-01-2009
Ðαяισš Ðαяισš is offline
Miembro
 
Registrado: dic 2008
Posts: 42
Poder: 0
Ðαяισš Va por buen camino
Bien Delphius anda muy bien.. gracias.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
verificar string mjjj Varios 3 18-08-2008 21:17:10
Verificar la Existencia de un Archivo sidneyb Varios 2 22-04-2008 22:16:19
Verificar CIF/NIF con c++ Builder Cecilioxx C++ Builder 2 14-02-2007 13:38:46
Verificar registro con trigger fedelphi Firebird e Interbase 3 20-12-2006 12:57:43
Verificar impresora Diegoval Impresión 1 11-05-2005 06:41:23


La franja horaria es GMT +2. Ahora son las 23:48:37.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi