Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-05-2013
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: Jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 673
Poder: 14
olbeup Va camino a la fama
InputBox e InputQuery

Hace tiempo que no creo ningún hilo, pero estas funciones InputBox y InputQuery, por que no se han renovado o ampliado como lo han hecho Delphi.

Me explico, InputBox o InputQuery son funciones que devuelve el texto escrito, pero si ese texto que escribes es una contraseña, por que no se puede pasar un parámetro a estas funciones que muestre un asterisco (*) mientras escribes.

He modificado el Dialogs.pas de Delphi y me ha quedado asi:

InputBox:
Código Delphi [-]
function InputBox(const ACaption, APrompt, ADefault: string; const APassChar: Char = #0): string;
...

function InputBox(const ACaption, APrompt, ADefault: string; const APassChar: Char = #0): string;
begin
  Result := ADefault;
  InputQuery(ACaption, APrompt, Result, APassChar);
end;
InputQuery:
Código Delphi [-]
function InputQuery(const ACaption, APrompt: string; var Value: string; APassChar: Char = #0): Boolean;
...

function InputQuery(const ACaption, APrompt: string; Value: string; const APassChar: Char = #0): Boolean;
var
  Form: TForm;
  Prompt: TLabel;
  Edit: TEdit;
  DialogUnits: TPoint;
  ButtonTop, ButtonWidth, ButtonHeight: Integer;
begin
  Result := False;

  Form := TForm.Create(Application);
  with Form do
    try
      Canvas.Font := Font;
      DialogUnits := GetAveCharSize(Canvas);
      BorderStyle := bsDialog;
      Caption := ACaption;
      ClientWidth := MulDiv(180, DialogUnits.X, 4);
      ClientHeight := MulDiv(63, DialogUnits.Y, 8);
      Position := poScreenCenter;

      Prompt := TLabel.Create(Form);
      with Prompt do
      begin
        Parent := Form;
        AutoSize := True;
        Left := MulDiv(8, DialogUnits.X, 4);
        Top := MulDiv(8, DialogUnits.Y, 8);
        Caption := APrompt;
      end;

      Edit := TEdit.Create(Form);
      with Edit do
      begin
        Parent := Form;
        Left := Prompt.Left;
        Top := MulDiv(19, DialogUnits.Y, 8);
        Width := MulDiv(164, DialogUnits.X, 4);
        MaxLength := 255;
        Text := Value;
        PasswordChar := APassChar;
        SelectAll;
      end;

      ButtonTop := MulDiv(41, DialogUnits.Y, 8);
      ButtonWidth := MulDiv(50, DialogUnits.X, 4);
      ButtonHeight := MulDiv(14, DialogUnits.Y, 8);

      with TButton.Create(Form) do
      begin
        Parent := Form;
        Caption := SMsgDlgOK;
        ModalResult := mrOk;
        Default := True;
        SetBounds(MulDiv(38, DialogUnits.X, 4), ButtonTop, ButtonWidth,
          ButtonHeight);
      end;

      with TButton.Create(Form) do
      begin
        Parent := Form;
        Caption := SMsgDlgCancel;
        ModalResult := mrCancel;
        Cancel := True;
        SetBounds(MulDiv(92, DialogUnits.X, 4), ButtonTop, ButtonWidth,
          ButtonHeight);
      end;

      if ShowModal = mrOk then
      begin
        Value := Edit.Text;
        Result := True;
      end;
    finally
      Form.Free;
    end;
end;

Me funciona muy bien, siempre hay un pero, cuando quiero recompilar todo el proyecto lo que hago primero, es borrar todos los .dcu y el Dialogs.pas vuelve a su estado natural como estaba antes, lo que me lleva a copiar el Dialogs.pas modificado dentro del proyecto y volver a recompilar, la pregunta es ¿cómo puedo recompilar Dialogs.pas y que no tenga que copiarlo en donde esta el proyecto?.

Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.

Última edición por olbeup fecha: 16-05-2013 a las 10:20:40.
Responder Con Cita
  #2  
Antiguo 16-05-2013
Avatar de ozsWizzard
ozsWizzard ozsWizzard is offline
Miembro
 
Registrado: May 2004
Ubicación: Murcia
Posts: 190
Poder: 15
ozsWizzard Va por buen camino
Dos cosillas...

1ª Habiendo una forma fácil de hacer lo de los asterisco, yo no cambiaría los ".pas" de Delphi.

La forma de hacer lo de los asteriscos es esta:

Crear este procedimiento
Código Delphi [-]
procedure InputBoxSetPasswordChar(var Msg: TMessage);
var
  hInputForm, hEdit, hButton: HWND;
begin
  hInputForm := Screen.Forms[0].Handle;
  if (hInputForm <> 0) then
  begin
    hEdit := FindWindowEx(hInputForm, 0, 'TEdit', nil);
    {
      // Change button text:
      hButton := FindWindowEx(hInputForm, 0, 'TButton', nil);
      SendMessage(hButton, WM_SETTEXT, 0, Integer(PChar('Cancel')));
    }
    SendMessage(hEdit, EM_SETPASSWORDCHAR, Ord('*'), 0);
  end;
end;

Y justo antes de la llamada al InputQuery, por ejemplo, poner esta instrucción
Código Delphi [-]
   PostMessage(Handle, InputBoxMessage, 0, 0);



Si aún así prefieres la modificación, una vez hayas hecho copia de seguridad de los ".pas" originales y sus correspondientes dcu, deberías borrar las dcu de delphi. Su ubicación depende de la instalación y el IDE que tengas. En mi caso, para que te hagas una idea, la ruta es esta

"C:\Program Files\Embarcadero\RAD Studio\9.0\lib\win32\debug"

Saludos
__________________
La Madurez se llama...
~~~Gaia~~~
Responder Con Cita
  #3  
Antiguo 16-05-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: Sep 2004
Ubicación: En algún lugar.
Posts: 28.585
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por olbeup Ver Mensaje
He modificado el Dialogs.pas de Delphi y me ha quedado asi:
Desde aquí escucho las sirenas de peligro

Cita:
Empezado por ozsWizzard Ver Mensaje
1ª Habiendo una forma fácil de hacer lo de los asterisco, yo no cambiaría los ".pas" de Delphi.
Responder Con Cita
  #4  
Antiguo 17-05-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: Feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 15
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
olbeup,

Cita:
Empezado por olbeup
...InputBox o InputQuery...muestre un asterisco (*) mientras escribes...
Revisa este link:
Cita:
Show password characters in a InputBox : http://www.swissdelphicenter.ch/torr...de.php?id=1208
Una sugerencia: Nunca modifiques las unidades de Delphi, bajo ningún concepto.

Espero sea útil

Nelson.
Responder Con Cita
  #5  
Antiguo 17-05-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: Dec 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.120
Poder: 30
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola olbeup.

Yo coincido con lo que te han sugerido los compañeros. Aún suponiendo que todo resulte bién, depender de una unidad o componente para lograr cierta funcionalidad, es preferible que depender de un Delphi "a medida" para hacerlo.

Claro que eso no implica que no puedas hacerlo para experimentar, siempre tomando los recaudos necesarios...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 17-05-2013
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: Jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 673
Poder: 14
olbeup Va camino a la fama
Cita:
Empezado por ozsWizzard Ver Mensaje
Habiendo una forma fácil de hacer lo de los asterisco, yo no cambiaría los ".pas" de Delphi.
Así lo are, no cambiar las fuentes de delphi y gracias por la aportación

Cita:
Empezado por Casimiro Notevi Ver Mensaje
Desde aquí escucho las sirenas de peligro
Ya las oí yo cuando empece a poner la primera letra

Cita:
Empezado por nlsgarcia Ver Mensaje
Nunca modifiques las unidades de Delphi, bajo ningún concepto
Oido cocina y gracias por el link

Cita:
Empezado por ecfisa Ver Mensaje
Hola olbeup.

Yo coincido con lo que te han sugerido los compañeros. Aún suponiendo que todo resulte bién, depender de una unidad o componente para lograr cierta funcionalidad, es preferible que depender de un Delphi "a medida" para hacerlo.

Claro que eso no implica que no puedas hacerlo para experimentar, siempre tomando los recaudos necesarios...

Saludos.
Sabias palabras


La verdad no me siento muy cómodo modificando las fuentes de Delphi, lo que are en su defecto es crear otras funciones maqueadas que realicen el mismo cometido, sin modificar un sólo punto de Delphi.

Gracias a todos por su recomendaciones y aportaciones

Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.

Última edición por olbeup fecha: 17-05-2013 a las 09:19:52.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
ayuda con inputbox! gabriel2000 Varios 5 20-05-2011 06:03:09
Usar inputquery para insertar contraseña meme C++ Builder 2 08-01-2008 19:39:53
inputbox ????? douglas OOP 1 24-10-2007 07:00:33
InputBox fmtidona Varios 2 16-10-2006 19:52:32
Cambiar captions de botones en InputQuery Perio Varios 2 01-06-2005 16:59:41


La franja horaria es GMT +2. Ahora son las 15:17:44.


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