Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как изменить функцию InputQuery, не переписывая её полностью? [D6, WinXP]


Volf_555 ©   (2006-02-22 21:02:00) 

Есть стандартная функция:
function InputQuery(const ACaption, APrompt: string;
 var Value: string): Boolean;

в её код мне надо добавить единственную строчку:
PasswordChar:='*';

Как мне добавить эту строчку в функцию, не переписывая её полностью? Может существует метод унаследования функций с добавлением новых возможностей без переписывания полностью всей функции?

Вот сама функция:

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 := 'OK';
       ModalResult := mrOk;
       Default := True;
       SetBounds(MulDiv(38, DialogUnits.X, 4), ButtonTop, ButtonWidth,
         ButtonHeight);
     end;
     with TButton.Create(Form) do
     begin
       Parent := Form;
       Caption := 'Cancel';
       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;
/CODE>


Volf_555   (2006-02-23 15:42:00) [1]

А что за блок условной компиляции? Расскажи подробней


Zeqfreed   (2006-02-23 15:30:00) [2]

Можно добавить блок условной компиляции, в котором и задавать PasswordChar. Но все-таки, лучше не править VCL и написать свой вариант где-нибудь в отдельном месте.


Volf_555   (2006-02-23 14:52:00) [3]


> Джо ©   (22.02.06 21:33) [4]
> > [3] Volf_555   (22.02.06 21:22)
> > Так и сделал :)
> > Создал новый юнит, туда поместил эти две функции,
>
> А зачем две? :)

Потому что без второй функции моя функция работать не будет.
И я в новый юнит поместил не лично свои функции, а борландовские.
В одной из них есть ссылка на другую функцию. По-этому две функции и вышло


Германн   (2006-02-23 02:03:00) [4]


> Джо ©   (22.02.06 21:33) [4]
>
> > [3] Volf_555   (22.02.06 21:22)
> > Так и сделал :)
> > Создал новый юнит, туда поместил эти две функции,
>
> А зачем две? :)


На всякий пожарный. © Бриллиатовая рука. :)))


Джо   (2006-02-22 21:33:00) [5]

> [3] Volf_555   (22.02.06 21:22)
> Так и сделал :)
> Создал новый юнит, туда поместил эти две функции,

А зачем две?:)


Volf_555   (2006-02-22 21:22:00) [6]

Так и сделал :)
Создал новый юнит, туда поместил эти две функции, добавил нужную строчку, подключил к своей программе - и всё заробатало!


Джо   (2006-02-22 21:16:00) [7]

А что мешает сделать своюфункцию, скажем InputPasswordQueryс приведенным тобой телом?


Джо   (2006-02-22 21:15:00) [8]

> Может существует метод унаследования функций с добавлением
> новых возможностей без

Нет.


Наверх

Титульная страница Поиск, карта сайта Написать письмо