Форум: "Начинающим";
Текущий архив: 2005.10.30;
Скачать: [xml.tar.bz2];
ВнизКак в поле ввода пароля вводимый пароль отображать звёздочками? Найти похожие ветки
← →
Volf_555 (2005-10-02 15:28) [0]Необходимо, чтобы во время ввода пароля пароль отображался звёздочками - как это осуществить?
if InputQuery("Окно ввода пароля", "Введите пароль:",P) then
if P="555" then //Когда вводится пароль - пароль виден
begin
MainForm.Show;
end else
begin
ShowMessage("Вы ввели неправильный пароль!");
end;
← →
Eraser © (2005-10-02 15:39) [1]
> Volf_555 (02.10.05 15:28)
Написать свой InputQuery.
← →
Volf_555 (2005-10-02 15:43) [2]Каким образом? Приведи код
← →
Eraser © (2005-10-02 16:04) [3]
> Volf_555 (02.10.05 15:43) [2]
Дык тут код почти и не надо писАть.
Всё в редакторе форм делается, в основном.
← →
злобная танька (2005-10-02 16:06) [4]PasswordChar
← →
Volf_555 (2005-10-02 16:22) [5]и как же этот PasswordChar использовать то?
var
P:PasswordChar
Этот код не срабатывает
← →
Adder © (2005-10-02 16:38) [6]
> Volf_555 (02.10.05 15:43) [2]
> Каким образом? Приведи код
кто мешает открыть модуль Dialogs.pas, найти в нём функцию InputQuery, и посмотреть код самому?
А потом написать свой InputPwdQuery ?
Тем более, что в данном конкретном случае все "написание" можно свести к копированию пары функций из TDialogs в свой модуль, описанию пары строковых констант и вписыванию в код фунции строки PasswordChar:="*"; (в том месте, где создается TEdit).
Заодно узнаете, как создать форму в рантайм.
← →
Adder © (2005-10-02 16:42) [7]Простой пример (за Вас код писать никто не будет - поэтому всё упрощено)
program Project1;
uses
Forms,
Unit1 in "Unit1.pas" {Form1},
Unit2 in "Unit2.pas";
{$R *.res}
var p:string;
begin
if not InputPwdQuery("Окно ввода пароля", "Введите пароль:",P) then exit;
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
unit Unit2;
interface
uses Windows, Messages, SysUtils, CommDlg, Classes, Graphics, Controls,
Forms, StdCtrls;
function InputPwdQuery(const ACaption, APrompt: string;
var Value: string): Boolean;
implementation
const
SMsgDlgOK="OK";
SMsgDlgCancel="Cancel";
function GetAveCharSize(Canvas: TCanvas): TPoint;
..............................Скопировано из Dialogs.pas
function InputPwdQuery(const ACaption, APrompt: string;
var Value: string): Boolean;
..............................Скопировано из Dialogs.pas
и подправлено как нужно
← →
begin...end © (2005-10-02 16:46) [8]File -> New -> Other... -> Dialogs -> Password Dialog
← →
Adder © (2005-10-02 17:00) [9]
> begin...end © (02.10.05 16:46) [8]
Можно и так - но при этом созданный диалог будет (как минимум) присутствовать в ресурсах (имхо). Созданный в рантайм - существует только во время выполнения функции, его создающей и уничтожающей.
← →
Phoenix9000 © (2005-10-04 13:52) [10]Ребята, что вы паритесь??? Есть более изящный выход:
Если ввод пароля идет в поле Edit, измените свойство PasswordChar на значение * , и у вас при вводе пароля все будет отображаться звездочками.
Но это сработает только если диалог пароля сконструирован как отдельная форма с полем Edit, а не через код программы : if InputQuery("Окно ввода пароля", "Введите пароль:",P) then...
← →
Phoenix9000 © (2005-10-04 13:56) [11]РЕБЯТА, ест другой способ, но он требует построение диалога пароля как новой формы программы, где есть поле Edit и две кнопки - ок и cancel.
Нажатия кнопок комментировать не буду, и так понятно что есть что, а с полем Edit нужно сделать следующее : сменить свойство Edit"a PasswordChar на значение * . В этом случае все вводимое в это поле будет отображаться только звездочками.
← →
MYSTERYO (2005-10-05 09:54) [12]
> Phoenix9000 © (04.10.05 13:52) [10]
> Phoenix9000 © (04.10.05 13:56) [11]
Да уж, об этом способе все и забыли... Читай
> Adder © (02.10.05 17:00) [9]
← →
Phoenix9000 © (2005-10-05 11:25) [13]To Mysteryo
А чем эта форма помешает???
У нас количество создаваемых форм в проекте не ограничено. Да и строго под нужды подходит.
← →
SMATMP © (2005-10-06 18:20) [14]А забыли многие об этом способе, поскольку некоторые утилиты (не буду их здесь называть дабы не рекламировать) позволяют подсмотреть под звездочками содержание TEdit. Поэтому PasswordChar лучше всего оставить при своем значении #0, а при наборе пароля перехватывать коды клавиш, записывать любым приемлимым методом в массив, который потом использовать вместо значения Edit.Text, а в Edit при этом отправлять "*".
← →
Phoenix9000 © (2005-10-07 11:03) [15]To Smatmp
Ну о реализации автор не писал. А если уж боимся подсмотра значений, то можно вообще не вставлять edit. Пусть программа считывает значение нажатых клавиш в память, и сопостовляет с заданным паролем. Или есть немного "идиотский" способ :-) . Алгоритм примерно такой : Можно сделать два Edit , один из которых скрытый. в скрытом будет происходить ввод пароля. И этот скрытый будет связан со вторым, который просто будет отображать звездочки. Тогда подсматривать будет нечего - все равно звездочки будут, в то же время для пользователя будет информативное отображение введенного пароля. Но повторю - способ идиотский!!!!! :-)
← →
SMATMP © (2005-10-07 16:49) [16]Ничего не имею против. Только незнание законов физики ни в коей мере не освобождает от их безукоснительного их соблюдения. Время тетенек, прошедших х-недельные компьютерные курсы если и не прошло, то близится к закату. Человек (я имею в виду Volf_555) хочет из каких-то соображений закрыть вводимый пароль. Используя PasswordChar он подвергает себя потенциальному риску (об этом было сказано выше), поскольку другому человеку не потребуется даже смотреть код программы, не говоря уже о других действиях. Поэтому у меня появилось желание постелить первому человеку (поскольку он созидает) своего рода соломку. На самом деле это только соломинка. Поэтому советую ему изучить хотя бы поверхностно тему шифрования. Но это уже другая тема...
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2005.10.30;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.041 c