Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];

Вниз

Как в InputBox отображать текст звёздочками?!   Найти похожие ветки 

 
Volf_555   (2006-02-21 20:51) [0]

Как в InputBox отображать текст звёздочками?!


 
TUser ©   (2006-02-21 21:00) [1]


> Как в TEdit отображать текст звёздочками?!

PasswordChar


 
Volf_555   (2006-02-21 21:03) [2]

PasswordChar есть в компоненте TEdit и подобных. А в InputBox нет


 
Volf_555   (2006-02-21 21:16) [3]

Нашёл самый простецкий способ! Вот он:

Из Dialogs.pas копируем в свой проэкт 2 функции и в первую функцию добавляем одну строчку:
function InputQuery(const ACaption, APrompt: string;
 var Value: string): Boolean;
var
 Form: TForm;
 Prompt: TLabel;
 Edit: TEdit;
 DialogUnits: TPoint;
 ButtonTop, ButtonWidth, ButtonHeight: Integer;
begin
 Result := False;
 Form := TForm.Create(Application);
 with Form do
   try
     Canvas.Font := Font;
     DialogUnits := GetAveCharSize(Canvas);
     BorderStyle := bsDialog;
     Caption := ACaption;
     ClientWidth := MulDiv(180, DialogUnits.X, 4);
     Position := poScreenCenter;
     Prompt := TLabel.Create(Form);
     with Prompt do
     begin
       Parent := Form;
       Caption := APrompt;
       Left := MulDiv(8, DialogUnits.X, 4);
       Top := MulDiv(8, DialogUnits.Y, 8);
       Constraints.MaxWidth := MulDiv(164, DialogUnits.X, 4);
       WordWrap := True;
     end;
     Edit := TEdit.Create(Form);
     with Edit do
     begin
       Parent := Form;
       Left := Prompt.Left;
       Top := Prompt.Top + Prompt.Height + 5;
       Width := MulDiv(164, DialogUnits.X, 4);
       PasswordChar:="*"; //Вот эту строчку добавляем и наслаждаемся :)
       MaxLength := 255;
       Text := Value;
       SelectAll;
     end;
     ButtonTop := Edit.Top + Edit.Height + 15;
     ButtonWidth := MulDiv(50, DialogUnits.X, 4);
     ButtonHeight := MulDiv(14, DialogUnits.Y, 8);
     with TButton.Create(Form) do
     begin
       Parent := Form;
       Caption := SMsgDlgOK;
       ModalResult := mrOk;
       Default := True;
       SetBounds(MulDiv(38, DialogUnits.X, 4), ButtonTop, ButtonWidth,
         ButtonHeight);
     end;
     with TButton.Create(Form) do
     begin
       Parent := Form;
       Caption := SMsgDlgCancel;
       ModalResult := mrCancel;
       Cancel := True;
       SetBounds(MulDiv(92, DialogUnits.X, 4), Edit.Top + Edit.Height + 15,
         ButtonWidth, ButtonHeight);
       Form.ClientHeight := Top + Height + 13;          
     end;
     if ShowModal = mrOk then
     begin
       Value := Edit.Text;
       Result := True;
     end;
   finally
     Form.Free;
   end;
end;


И

function GetAveCharSize(Canvas: TCanvas): TPoint;
var
 I: Integer;
 Buffer: array[0..51] of Char;
begin
 for I := 0 to 25 do Buffer[I] := Chr(I + Ord("A"));
 for I := 0 to 25 do Buffer[I + 26] := Chr(I + Ord("a"));
 GetTextExtentPoint(Canvas.Handle, Buffer, 52, TSize(Result));
 Result.X := Result.X div 52;
end;


И - ВСЁ! Можно наслаждаться!!!


 
easy ©   (2006-02-21 21:36) [4]

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

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.


 
Гаврила ©   (2006-02-21 22:56) [5]

А вот добавят в след версии где-нить Application.ProcessMessages в генофонд "между", и обломятся индейцы :-)


 
Volf_555   (2006-02-21 23:24) [6]


> easy ©   (21.02.06 21:36) [4]
> настоящий индеец не ищет легких путей? ;)
> ..............................................................

Это лёгкий код по-твоему? :)
Мои действия сводятся к простейшему:
1) скопировать из файла Dialog.pas 2 функции InputQuery и GetAveCharSize - это сможет сделать любой юзер без особых знаний Delphi :))
2) добавить ЕДИНСТВЕННУЮ строчку: PasswordChar:="*"; - и всё!!!


> Гаврила ©   (21.02.06 22:56) [5]
> А вот добавят в след версии где-нить Application.ProcessMessages
> в генофонд "между", и обломятся индейцы :-)

Это ты к чему? Что, мол, при запросе пароля отобразится окно ввода и сразу запустится программа? :)
Если да, то не трудно будет строчку Application.ProcessMessages убрать - и всё станет себе на места ;)


 
McSimm ©   (2006-02-21 23:57) [7]

> easy ©   (21.02.06 21:36)
Красиво !


 
easy ©   (2006-02-22 19:51) [8]


> McSimm ©   (21.02.06 23:57) [7]

ето не я..))
http://www.swissdelphicenter.ch/torry/showcode.php?id=1208



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

Форум: "Основная";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.041 c
2-1141731659
LostHero
2006-03-07 14:40
2006.03.26
Загрузка картинок


4-1136460435
Arazel
2006-01-05 14:27
2006.03.26
Как прочитать/записать MBR из под Win9x


4-1136211191
Человек
2006-01-02 17:13
2006.03.26
Hook клавиатуры


15-1141552539
Serg1981
2006-03-05 12:55
2006.03.26
Удаленное управление


2-1142077500
ЧиЧиЧи
2006-03-11 14:45
2006.03.26
про windows





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