Ver Mensaje Individual
  #14  
Antiguo 20-05-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por cascarrabias Ver Mensaje
aun asi, lo que no entiendo es poque no se puede cancelar simplemente el mensage al recibirlo?
Yo creo que porque el mensaje se manda directamente al Edit, no a la aplicación. Por eso el ApplicationEvents no puede detectarlo; nunca pasa por ahí.

Lo que puedes hacer es interceptarlo a nivel del TEdit, por ejemplo:

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, AppEvnts;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
  private
    OldEditWndProc: TWndMethod;
    procedure EditWndProc(var Message: TMessage);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  OldEditWndProc := Edit1.WindowProc; // guardar el manejador de mensajes original
  Edit1.WindowProc := EditWndProc;  // reemplazar el manejador por uno nuestro
end;

procedure TForm1.EditWndProc(var Message: TMessage);
begin
  if Message.Msg <> EM_SETPASSWORDCHAR then
    // llamar al manejador de mensajes original
    OldEditWndProc(Message);
end;

end.

Aquí lo que se hace es reemplazar al vuelo el procedimiento que maneja los mensajes del control Edit1. El procedimiento de reemplazo simplemente filtra el mensaje EM-SETPASSWORDCHAR, y deja el resto al procedimiento original.

Pero claro, tal como dice Javier, basta un GetText para obtener el texto al descubierto.

// Saludos

Última edición por roman fecha: 20-05-2008 a las 01:33:09. Razón: Sobraba un Button1 :)
Responder Con Cita