Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
1-1172676041
DenisNew
2007-02-28 18:20
2007.04.22
ширина закладки ttabsheet


15-1175115313
ProgRAMmer Dimonych
2007-03-29 00:55
2007.04.22
Ма-а-а-аленький вопрос по HTML


2-1175164323
DmitrichJ
2007-03-29 14:32
2007.04.22
Как узнать свой адрес к программе при запуске?


2-1175473970
Wood
2007-04-02 04:32
2007.04.22
Поиск и вставка.


15-1174934405
Kolan
2007-03-26 22:40
2007.04.22
&amp;laquo;Расстояние Левенштейна&amp;raquo;, поясните чуть-чуть&amp;#133





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский