Cita:
Empezado por cascarrabias
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; Edit1.WindowProc := EditWndProc; end;
procedure TForm1.EditWndProc(var Message: TMessage);
begin
if Message.Msg <> EM_SETPASSWORDCHAR then
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