Конференция "Основная" » Как в InputBox_е изменить шрифт ??? [D7, WinXP]
 
  • Zhekson (18.07.08 12:02) [0]
    При инициализации приложения делаю вход по паролю. Теперь для скрытия пароля нужно полю для ввода пароля присвоить следующие значения:


      Font.Name := 'Wingdings';
      PasswordChar := 'l';



    Как эот сделать?
  • Zhekson (18.07.08 12:04) [1]
    виноват, использую InputQuery.

    if InputQuery('Password', 'Enter your password', PassWord) then
     if Password = 'lowhuk' then
     begin
    /////////////
     end;

  • Vlad Oshin © (18.07.08 12:51) [2]
    :)
    Выдрать исходник и поставить как надо

    procedure TForm3.Button1Click(Sender: TObject);
    var
     PassWord:string;

    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;

    function MyInputQuery(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
             Font.Name := 'Wingdings';
             PasswordChar := 'l';
           Parent := Form;
           Left := Prompt.Left;
           Top := Prompt.Top + Prompt.Height + 5;
           Width := MulDiv(164, DialogUnits.X, 4);
           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;

    begin
    if MyInputQuery('Password', 'Enter your password', PassWord) then
    if Password = 'lowhuk' then
    begin
    /////////////
    end;
  • Zhekson (18.07.08 15:51) [3]
    Vlad Oshin ©   (18.07.08 12:51) [2]
    спасибо, это то что нужно.

    Вот только такой прикол вышел, дома у меня проект откомпилировался без функции
    GetAveCharSize(Canvas: TCanvas): TPoint;

    , а на работе заартачился, говорит не нахожу
    VclUtils.dcu

    . А с чем это я мог прикрутить этот модуль?
  • Vlad Oshin © (18.07.08 16:13) [4]
    InputQuery и GetAveCharSize лежат в одном модуле,
    подключить его попробуйте, попробуйте подключить и то, что этот модуль использует

    да и
    DialogUnits: TPoint;
    GetAveCharSize(Canvas: TCanvas): TPoint

    вычисляется
    DialogUnits := GetAveCharSize(Canvas);

    попробуйте по аналогии вычислить, или задать жестко на худой конец
    DialogUnits.X := 20;
    DialogUnits.Y:= 20;
  • Zhekson (18.07.08 16:51) [5]
    Vlad Oshin ©   (18.07.08 16:13) [4]

    странно, в модуле Dialogs, есть ф-ция GetAveCharSize(Canvas), но при компиляции выскакивает ошибка необьявленного идентификатора GetAveCharSize.

    вичислить и задать жёстко удалось, но почему ошибка выскакивает, если модуль Dialogs, в котором есть эта функция, прописан???
  • Vlad Oshin © (18.07.08 17:36) [6]
    а если так:

    function MyGetAveCharSize(Canvas: TCanvas): TPoint;
    ..
        DialogUnits := MyGetAveCharSize(Canvas);
    -----------

    или так:

    ................
    var
     Form3: TForm3;

    function GetTextExtentPoint(DC: HDC; Str: PChar; Count: Integer;
     var Size: TSize): BOOL; stdcall;
    implementation

    {$R *.dfm}
    function GetTextExtentPoint; external gdi32 name 'GetTextExtentPointA';

    procedure TForm3.Button1Click(Sender: TObject);
    var
    PassWord:string;

    function MyGetAveCharSize(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;

    function MyInputQuery(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 := MyGetAveCharSize(Canvas);
        BorderStyle := bsDialog;
    .....
    --------------------
  • Германн © (19.07.08 01:30) [7]

    > Как в InputBox_е изменить шрифт ??? [D7, WinXP]
    >
    > Zhekson   (18.07.08 12:02)
    >
    > При инициализации приложения делаю вход по паролю. Теперь
    > для скрытия пароля нужно полю для ввода пароля присвоить
    > следующие значения:
    >
    >
    >   Font.Name := 'Wingdings';
    >   PasswordChar := 'l';
    >
    >
    > Как эот сделать?
    > <Цитата>
    >
    > Zhekson   (18.07.08 12:04) [1]
    >
    > виноват, использую InputQuery.
    >
    >

    А не проще ли создать свой собственный диалог для ввода пароля?
  • Zhekson (21.07.08 09:44) [8]
    Vlad Oshin ©   (18.07.08 17:36) [6]
    Да, работает. Спасибо.


    > А не проще ли создать свой собственный диалог для ввода
    > пароля?

    Если имеется ввиду создание формы, на которую нужно кинуть поле ввода пароля, лэйбл и кнопку, то как её эктивизировать раньше, чем главную форму?
  • Vlad Oshin © (21.07.08 10:28) [9]
    procedure TForm3.FormCreate(Sender: TObject);
    var
    f3:tform;
    begin
      f3:=tform.create(application);
      f3.Left:=10;
      f3.Top:=10;
      try
       f3.ShowModal;
      finally
        f3.Free;
      end;
    end;
  • Zhekson (21.07.08 10:53) [10]
    Vlad Oshin ©   (21.07.08 10:28) [9]
    Во, тоже вариант. Спасибо!
 
Конференция "Основная" » Как в InputBox_е изменить шрифт ??? [D7, WinXP]
Есть новые Нет новых   [134491   +13][b:0][p:0.001]