Форум: "Прочее";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];
Вниздиалог ввод пароля НЕ 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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.046 c