Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.039 c
2-1128877637
intel
2005-10-09 21:07
2005.10.30
модули


5-1105980217
slart
2005-01-17 19:43
2005.10.30
Прорисовка "детей"


14-1128501028
MBo
2005-10-05 12:30
2005.10.30
Ветка об $ALIGN


14-1125937324
Piter
2005-09-05 20:22
2005.10.30
Помогите опознать песенку Майкла Джексона, пожалуйста


14-1128658997
root
2005-10-07 08:23
2005.10.30
Работа со штрих кодами





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский