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.