-
При инициализации приложения делаю вход по паролю. Теперь для скрытия пароля нужно полю для ввода пароля присвоить следующие значения:
Font.Name := 'Wingdings';
PasswordChar := 'l';
Как эот сделать?
-
виноват, использую InputQuery. if InputQuery('Password', 'Enter your password', PassWord) then
if Password = 'lowhuk' then
begin
end;
-
:) Выдрать исходник и поставить как надо
procedure TForm3.Button1Click(Sender: TObject); var PassWord:string;
function GetAveCharSize(Canvas: TCanvas): TPoint; var I: Integer; Buffer: array[0..51] of Char; begin for I := 0 to 25 do Buffer[I] := Chr(I + Ord('A')); for I := 0 to 25 do Buffer[I + 26] := Chr(I + Ord('a')); GetTextExtentPoint(Canvas.Handle, Buffer, 52, TSize(Result)); Result.X := Result.X div 52; end;
function MyInputQuery(const ACaption, APrompt: string; var Value: string): 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); Position := poScreenCenter; Prompt := TLabel.Create(Form); with Prompt do begin Parent := Form; Caption := APrompt; Left := MulDiv(8, DialogUnits.X, 4); Top := MulDiv(8, DialogUnits.Y, 8); Constraints.MaxWidth := MulDiv(164, DialogUnits.X, 4); WordWrap := True; end; Edit := TEdit.Create(Form); with Edit do begin Font.Name := 'Wingdings'; PasswordChar := 'l'; Parent := Form; Left := Prompt.Left; Top := Prompt.Top + Prompt.Height + 5; Width := MulDiv(164, DialogUnits.X, 4); MaxLength := 255; Text := Value; SelectAll; end; ButtonTop := Edit.Top + Edit.Height + 15; 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), Edit.Top + Edit.Height + 15, ButtonWidth, ButtonHeight); Form.ClientHeight := Top + Height + 13; end; if ShowModal = mrOk then begin Value := Edit.Text; Result := True; end; finally Form.Free; end; end;
begin if MyInputQuery('Password', 'Enter your password', PassWord) then if Password = 'lowhuk' then begin ///////////// end;
-
Vlad Oshin © (18.07.08 12:51) [2] спасибо, это то что нужно. Вот только такой прикол вышел, дома у меня проект откомпилировался без функции GetAveCharSize(Canvas: TCanvas): TPoint; , а на работе заартачился, говорит не нахожу VclUtils.dcu . А с чем это я мог прикрутить этот модуль?
-
InputQuery и GetAveCharSize лежат в одном модуле, подключить его попробуйте, попробуйте подключить и то, что этот модуль использует
да и DialogUnits: TPoint; GetAveCharSize(Canvas: TCanvas): TPoint
вычисляется DialogUnits := GetAveCharSize(Canvas);
попробуйте по аналогии вычислить, или задать жестко на худой конец DialogUnits.X := 20; DialogUnits.Y:= 20;
-
Vlad Oshin © (18.07.08 16:13) [4]
странно, в модуле Dialogs, есть ф-ция GetAveCharSize(Canvas), но при компиляции выскакивает ошибка необьявленного идентификатора GetAveCharSize.
вичислить и задать жёстко удалось, но почему ошибка выскакивает, если модуль Dialogs, в котором есть эта функция, прописан???
-
а если так:
function MyGetAveCharSize(Canvas: TCanvas): TPoint; .. DialogUnits := MyGetAveCharSize(Canvas); -----------
или так:
................ var Form3: TForm3;
function GetTextExtentPoint(DC: HDC; Str: PChar; Count: Integer; var Size: TSize): BOOL; stdcall; implementation
{$R *.dfm} function GetTextExtentPoint; external gdi32 name 'GetTextExtentPointA';
procedure TForm3.Button1Click(Sender: TObject); var PassWord:string;
function MyGetAveCharSize(Canvas: TCanvas): TPoint; var I: Integer; Buffer: array[0..51] of Char; begin for I := 0 to 25 do Buffer[I] := Chr(I + Ord('A')); for I := 0 to 25 do Buffer[I + 26] := Chr(I + Ord('a')); GetTextExtentPoint(Canvas.Handle, Buffer, 52, TSize(Result)); Result.X := Result.X div 52; end;
function MyInputQuery(const ACaption, APrompt: string; var Value: string): 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 := MyGetAveCharSize(Canvas); BorderStyle := bsDialog; ..... --------------------
-
> Как в InputBox_е изменить шрифт ??? [D7, WinXP] > > Zhekson (18.07.08 12:02) > > При инициализации приложения делаю вход по паролю. Теперь > для скрытия пароля нужно полю для ввода пароля присвоить > следующие значения: > > > Font.Name := 'Wingdings'; > PasswordChar := 'l'; > > > Как эот сделать? > <Цитата> > > Zhekson (18.07.08 12:04) [1] > > виноват, использую InputQuery. > >
А не проще ли создать свой собственный диалог для ввода пароля?
-
Vlad Oshin © (18.07.08 17:36) [6] Да, работает. Спасибо.
> А не проще ли создать свой собственный диалог для ввода > пароля?
Если имеется ввиду создание формы, на которую нужно кинуть поле ввода пароля, лэйбл и кнопку, то как её эктивизировать раньше, чем главную форму?
-
procedure TForm3.FormCreate(Sender: TObject); var f3:tform; begin f3:=tform.create(application); f3.Left:=10; f3.Top:=10; try f3.ShowModal; finally f3.Free; end; end;
-
Vlad Oshin © (21.07.08 10:28) [9] Во, тоже вариант. Спасибо!
|