Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2011, 17:42   #1
taracqk
Пользователь
 
Регистрация: 04.06.2011
Сообщений: 29
Радость PasswordChar в Inpubox

Привет народ. Возможно это глупый вопрос. Но можно ли сделать INputbox с полем ввода стиля password. Просто делаю запрос пароля а отдельную форму делать 1)лень 2) лишний мусор.
Буду благодарен за ответы
taracqk вне форума Ответить с цитированием
Старый 16.12.2011, 18:28   #2
Xardas
Сисадмин
Форумчанин
 
Аватар для Xardas
 
Регистрация: 28.12.2007
Сообщений: 320
По умолчанию

Да, возможно. WinAPI поможет. Ну или как вариант покопаться в модуле Dialogs, найти функцию InputQuery, там где прописаны свойства эдита, добавить строчку

Код:
PasswordChar := '*'
(лучше перекопировать к себе в проект) и пользоваться.

Последний раз редактировалось Xardas; 16.12.2011 в 18:32.
Xardas вне форума Ответить с цитированием
Старый 16.12.2011, 19:07   #3
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Если устроит условие Windows XP и выше, то есть отличная функа:

Код:
function LoginUser(const ACaption, ADescription: String; var AUser, APassword: string; var ASavePassword: Boolean): Boolean;
type
  PCredUIInfo = ^TCredUIInfo;
  TCredUIInfo = record
    cbSize: DWORD;
    hwndParent: HWND;
    pszMessageText: PChar;
    pszCaptionText: PChar;
    hbmBanner: HBITMAP;
  end;

var
  Lib: HMODULE;
  CredUIPromptForCredentials: function(pUiInfo: PCredUIInfo; pszTargetName: PChar; pContext: Pointer; dwAuthError: DWORD; pszUserName: PChar; ulUserNameBufferSize: ULONG; pszPassword: PChar; ulPasswordBufferSize: ULONG; var save: BOOL; dwFlags: DWORD): DWORD; stdcall;
  CredInfo: TCredUIInfo;
  User, Password: String;
  Save: BOOL;
const
  MAXBUFLEN                                = 10240;  // maximum login and password length in chars
  credui                                   = 'credui.dll';
  CredUIPromptForCredentialsName           = {$IFDEF UNICODE}
                                             'CredUIPromptForCredentialsW'
                                             {$ELSE}
                                             'CredUIPromptForCredentialsA'
                                             {$ENDIF};
  CREDUI_FLAGS_INCORRECT_PASSWORD          = $00001; // indicates the username is valid, but password is not
  CREDUI_FLAGS_DO_NOT_PERSIST              = $00002; // Do not show "Save" checkbox, and do not persist credentials
  CREDUI_FLAGS_REQUEST_ADMINISTRATOR       = $00004; // Populate list box with admin accounts
  CREDUI_FLAGS_EXCLUDE_CERTIFICATES        = $00008; // do not include certificates in the drop list
  CREDUI_FLAGS_REQUIRE_CERTIFICATE         = $00010;
  CREDUI_FLAGS_SHOW_SAVE_CHECK_BOX         = $00040;
  CREDUI_FLAGS_ALWAYS_SHOW_UI              = $00080;
  CREDUI_FLAGS_REQUIRE_SMARTCARD           = $00100;
  CREDUI_FLAGS_PASSWORD_ONLY_OK            = $00200;
  CREDUI_FLAGS_VALIDATE_USERNAME           = $00400;
  CREDUI_FLAGS_COMPLETE_USERNAME           = $00800;
  CREDUI_FLAGS_PERSIST                     = $01000; // Do not show "Save" checkbox, but persist credentials anyway
  CREDUI_FLAGS_SERVER_CREDENTIAL           = $04000;
  CREDUI_FLAGS_EXPECT_CONFIRMATION         = $20000; // do not persist unless caller later confirms credential via CredUIConfirmCredential() api
  CREDUI_FLAGS_GENERIC_CREDENTIALS         = $40000; // Credential is a generic credential
  CREDUI_FLAGS_USERNAME_TARGET_CREDENTIALS = $80000; // Credential has a username as the target
  CREDUI_FLAGS_KEEP_USERNAME               = $100000; // don't allow the user to change the supplied username
begin
  Lib := SafeLoadLibrary(credui);
  if Lib <> 0 then
  try
    CredUIPromptForCredentials := GetProcAddress(Lib, CredUIPromptForCredentialsName);
    if Assigned(CredUIPromptForCredentials) then
    begin
      FillChar(CredInfo, SizeOf(CredInfo), 0);
      CredInfo.cbSize := SizeOf(CredInfo);
      if Screen.FocusedForm <> nil then
        CredInfo.hwndParent := Screen.FocusedForm.Handle
      else if Screen.ActiveForm <> nil then
        CredInfo.hwndParent := Screen.ActiveForm.Handle
      else
        CredInfo.hwndParent := 0;
      CredInfo.pszCaptionText := PChar(ACaption);
      CredInfo.pszMessageText := PChar(ADescription);
      User := AUser + #0;
      Password := APassword + #0;
      Save := ASavePassword;
      SetLength(User, MAXBUFLEN);
      SetLength(Password, MAXBUFLEN);
      case CredUIPromptForCredentials(@CredInfo, nil, nil, 0, PChar(User), MAXBUFLEN, PChar(Password), MAXBUFLEN, Save, CREDUI_FLAGS_ALWAYS_SHOW_UI or CREDUI_FLAGS_DO_NOT_PERSIST or CREDUI_FLAGS_SHOW_SAVE_CHECK_BOX or CREDUI_FLAGS_GENERIC_CREDENTIALS) of
        NO_ERROR:
        begin
          AUser := PChar(User);
          APassword := PChar(Password);
          ASavePassword := Save;
          Result := True;
          Exit;
        end;
        ERROR_CANCELLED:
        begin
          Result := False;
          Exit;
        end;
      else
        raise Exception.Create('CredUIPromptForCredentials failed');
      end;
    end
    else
      RaiseLastOSError;
  finally
    FreeLibrary(Lib);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Login, Password: String;
  SavePassword: Boolean;
begin
  if not LoginUser('Вход в программу', 'Введите данные вашей учётки:', Login, Password, SavePassword) then
    Exit;

  if (Login <> 'aaa') and
     (Password <> 'bbb') then
    raise Exception.Create('Invalid login or password');

  // OK!
end;
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 16.12.2011, 20:03   #4
taracqk
Пользователь
 
Регистрация: 04.06.2011
Сообщений: 29
По умолчанию

Т_Т да ты что ? Блин из-за строки такая стена кода...ужас
taracqk вне форума Ответить с цитированием
Старый 16.12.2011, 20:04   #5
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

А ты посмотри на результат.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 16.12.2011, 20:28   #6
taracqk
Пользователь
 
Регистрация: 04.06.2011
Сообщений: 29
По умолчанию

Да я понимаю, что код наверно рабочий. просто у меня достаточно компактная программа (примерно 200строк) и ТАК мусорить из-за строки (одной) будет не хорошо. Я не говорю, что это плохо, просто не считаю это нужным.
taracqk вне форума Ответить с цитированием
Старый 16.12.2011, 20:29   #7
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
что код наверно рабочий
Я вообще-то имел в виду вид окна.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 16.12.2011, 20:40   #8
taracqk
Пользователь
 
Регистрация: 04.06.2011
Сообщений: 29
По умолчанию

Ну. ты же не говорил, на что именно смотреть . Результат может быть и окно и конечная работа нужного кода.
Ладно, всем спасибо. Вот нашел буквально на 20 строк http://www.delphisources.ru/pages/fa...tbox_pass.html
taracqk вне форума Ответить с цитированием
Старый 16.12.2011, 21:48   #9
Xardas
Сисадмин
Форумчанин
 
Аватар для Xardas
 
Регистрация: 28.12.2007
Сообщений: 320
По умолчанию

taracqk, чего было изобретать чего-то, если реально можно взять да подписать ОДНУ строчку к инпуту, взяв его код из модуля, откуда он вызывается
Xardas вне форума Ответить с цитированием
Старый 16.12.2011, 23:41   #10
taracqk
Пользователь
 
Регистрация: 04.06.2011
Сообщений: 29
По умолчанию

Проблема в том, что не очень потятно, как подключить измененный инпут к проекту
taracqk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск