Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.22;
Скачать: CL | DM;

Вниз

диалог ввод пароля НЕ InputBox и InputQuery   Найти похожие ветки 

 
Romas81 ©   (2007-03-25 16:44) [0]

Подскажите пожалуйста... Хочу чтоб при нажатии на кнопке (Tbutton) у меня отобразился диалог ввода пароля... InputBox и InputQuery не подходят, они не прячут пароль звездочками, чего очень хочется... спасибо...


 
isasa ©   (2007-03-25 16:46) [1]

TForm .... ?


 
Romas81 ©   (2007-03-25 16:47) [2]

TForm не хотелось бы


 
homm ©   (2007-03-25 16:47) [3]

TFrom + TEdit.PasswordChar


 
Romas81 ©   (2007-03-25 16:49) [4]

т.е. аналога InputQuery со звездочками НЕТ ? а в win32 ?


 
RASkov   (2007-03-25 18:15) [5]

> [4] Romas81 ©   (25.03.07 16:49)

Найди библиотеку RxLib в ней есть компонент TRxLoginDialog, то что тебе надо....наверное.


 
Gero ©   (2007-03-25 18:26) [6]

«[2] Romas81 ©   (25.03.07 16:47)TForm не хотелось бы»

По какой причине?


 
RASkov   (2007-03-25 18:28) [7]

> [6] Gero ©   (25.03.07 18:26)

Видимо код нужно писать дополнительный...а не хоцца.


 
Gero ©   (2007-03-25 18:33) [8]

«[7] RASkov   (25.03.07 18:28)»

Быстрее написать, чем здесь торчать.


 
@BraIN ©   (2007-03-25 19:55) [9]

На самом деле, код InputQuery элементарно правится.


 
atruhin ©   (2007-03-25 22:23) [10]

Вот кто то приводил код:
настоящий индеец не ищет легких путей? ;)

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
const
InputBoxMessage = WM_USER + 200;
type
TForm1 = class(TForm)
  Button1: TButton;
  procedure Button1Click(Sender: TObject);
private
  { Private declarations }
  procedure InputBoxSetPasswordChar(var Msg: TMessage); message InputBoxMessage;
public
  { Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
InputString: string;
begin
PostMessage(Handle, InputBoxMessage, 0, 0);
InputString := InputBox("Input Box", "Please Enter a Password", "");
end;

procedure TForm1.InputBoxSetPasswordChar(var Msg: TMessage);
var
hInputForm, hEdit: HWND;
begin
hInputForm := Screen.Forms[0].Handle;
if (hInputForm <> 0) then
begin
  hEdit := FindWindowEx(hInputForm, 0, "TEdit", nil);
  SendMessage(hEdit, EM_SETPASSWORDCHAR, Ord("*"), 0);
end;
end;

end.


 
Romas81 ©   (2007-03-30 10:13) [11]

а пример-то не подкованый... звездочки не появляются


 
alien1769 ©   (2007-03-30 10:16) [12]

Ну хоть про звездочки сам допиши.


 
isasa ©   (2007-03-30 10:51) [13]

atruhin ©   (25.03.07 22:23) [10]
Што-то простенько, как то. А посложнее?
На основе TForm уже б давно написал, зайчиков по углам расклеил и пиво пил бы ...


 
Ketmar ©   (2007-03-30 12:00) [14]

фигня. CreateDialogIndirect() рулит. %-)


 
Romas81 ©   (2007-03-30 12:12) [15]

да я уже давно сделал в формах... интересны новые варианты... вот человек через API-функции премерчик подкинул, а че, интересный примерчик...


 
Ketmar ©   (2007-03-30 12:14) [16]

я завсегда это делал на API. потому что проще и удобней. и размер меньше. и нет лишних тформов. кинуть код?


 
Romas81 ©   (2007-03-30 12:16) [17]

конечно


 
Ketmar ©   (2007-03-30 12:38) [18]

что-то вроде этого (не скомпиляется, потому что резано "по-живому", но sapienti sat)
unit loginDlgU;

interface

uses
 Windows, Messages;

// returns: name#0pass or ""
function ApiInputPassword (): string;

implementation

{$R logindlg.res}

const
 INPUT_DIALOG = 1;
 IDC_NAME     = 101;
 IDC_PASS     = 102;

type
 PInputBoxData = ^TInputBoxData;
 TInputBoxData = record
   aCaption, aName, aPass: string;
 end;

function DlgProc (hwndDlg: HWND; msg: UINT; wparam: WPARAM; lparam: LPARAM): BOOL; stdcall;

 procedure InitDialog ();
 var
   pdata: PInputBoxData;
   wa, wr: TRect;
   menuH: HMENU;
 begin
   menuH := GetSystemMenu(hwndDlg, false);
   DeleteMenu(menuH, SC_CLOSE, MF_BYCOMMAND);

   ASSERT(lparam <> 0);
   pdata := Pointer(lparam);
   SetWindowLong(hwndDlg, GWL_USERDATA, lparam);
   SetWindowText(hwndDlg, PChar(pdata^.aCaption));
   SetDlgItemText(hwndDlg, IDC_NAME, PChar(pdata^.aName));
   SetDlgItemText(hwndDlg, IDC_PASS, PChar(pdata^.aPass));
   //SetFocus(GetDlgItem(hwndDlg, IDC_EDIT));
   // center dialog
   SystemParametersInfo(SPI_GETWORKAREA, 0, @wa, 0);
   GetWindowRect(hwndDlg, wr);
   //Dec(wr.Right, wr.Left); Dec(wr.Bottom, wr.Top);
   SetWindowPos(hwndDlg, HWND_TOPMOST,
     wa.Left+((wa.Right-wa.Left)-(wr.Right-wr.Left)) div 2,
     wa.Top+((wa.Bottom-wa.Top)-(wr.Bottom-wr.Top)) div 2,
     0, 0, SWP_SHOWWINDOW or SWP_NOSIZE);

   ShowWindow(hwndDlg, SW_SHOWNORMAL);
 end;

 function HandleCommand (): Boolean;
 var
   pdata: PInputBoxData;
 begin
   result := false;
   if HiWord(wparam) = BN_CLICKED then
   begin
     result := true;
     if LoWord(wparam) = IDOK then
     begin
       pData := Pointer(GetWindowLong(hwndDlg, GWL_USERDATA));
       SetLength(pData.aName, SendDlgItemMessage(hwndDlg, IDC_NAME, WM_GETTEXTLENGTH, 0, 0));
       GetDlgItemText(hwndDlg, IDC_NAME, PChar(pData.aName), Length(pData.aName)+1);

       SetLength(pData.aPass, SendDlgItemMessage(hwndDlg, IDC_PASS, WM_GETTEXTLENGTH, 0, 0));
       GetDlgItemText(hwndDlg, IDC_PASS, PChar(pData.aPass), Length(pData.aPass)+1);
       EndDialog(hwndDlg, LoWord(wparam));
     end;
   end;
 end;

begin
 result := false;
 case msg of
   WM_INITDIALOG:
     begin
       InitDialog();
       result := true;
       exit;
     end;
   WM_COMMAND: begin result := HandleCommand(); exit; end;
 end;
end;

function ApiInputPassword (): string;
var
 data: TInputBoxData;
 res: Integer;
begin
 data.aCaption := "authentication";

 data.aName := ""; data.aPass := "";
 result := "";

 res := DialogBoxParam(hInstance, MakeIntResource(INPUT_DIALOG),
          0{GetActiveWindow()}, @DlgProc, LPARAM(@data));
 if res = IDOK then result := data.aName+#0+data.aPass else result := "";
end;

end.

и logindlg.rc:

#define INPUT_DIALOG   1
#define IDC_NAME   101
#define IDC_PASS   102

INPUT_DIALOG DIALOG 10, 14, 217, 68
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION
CAPTION "INPUTDIALOG"
FONT 8, "MS Sans Serif"
/*LANGUAGE LANG_RUSSIAN, 1*/
{
LTEXT "user name:", 88, 4, 4, 208, 8
EDITTEXT IDC_NAME, 4, 12, 208, 12, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP
LTEXT "password:", 89, 4, 26, 208, 8
EDITTEXT IDC_PASS, 4, 34, 208, 12, ES_AUTOHSCROLL | ES_PASSWORD | WS_BORDER | WS_TABSTOP
DEFPUSHBUTTON "OK", IDOK, 162, 50, 50, 14
}


 
Ketmar ©   (2007-03-30 12:43) [19]

центрирование диалога -- идиотизм, я знаю. для этого флажок есть.


 
clickmaker ©   (2007-03-30 13:09) [20]


> для этого флажок есть

сей флажок отцентрует по экрану, а иногда хочется по окну-владельцу


 
Ketmar ©   (2007-03-30 13:13) [21]

ну, я-то тоже по экрану центрирую. точнее, по workarea. то есть -- дублирую функционал флажка. %-)



Страницы: 1 вся ветка

Текущий архив: 2007.04.22;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.084 c
2-1175270259
Dmitry_177
2007-03-30 19:57
2007.04.22
переменная SYSTEMTIME определить что она пустая


15-1175156627
Cyrax
2007-03-29 12:23
2007.04.22
Как проще всего сдвинуть звук в mpeg-файле ?


2-1175684999
bagos
2007-04-04 15:09
2007.04.22
цвета


15-1174736919
Kostafey
2007-03-24 14:48
2007.04.22
Порекомендуйте как правильно организовать GUI


15-1175207940
рожке
2007-03-30 02:39
2007.04.22
intel d945 plrn не выключается