|
Вопрос # 1 144/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
У меня к вам такой вопрос? В проекте 4 формы, Form1, Form2, Form3 и Form4. Главная - Form1. Мне нужно чтобы
к Form4 доступ был через пароль, тоесть когда
обращаюсь к Form4, всплывало окошко введите
пароль. Как мне это сделать?
И если можно то ещё, на форме две иконки первая
включает вторую, а форма отключает вторую и
включает первую, но они у меня на самом краю
формы и когда я мышку наведу на рабочий стол
(форма у меня 200Х200), то вторая так и остаётся
включенной. Как сделать так, чобы и рабочий стол
отключал вторую иконку и включал первую?
Заранее благодарен.
 |
Вопрос задал: Толков Геннадий Викторович (статус: Посетитель)
Вопрос отправлен: 26 ноября 2007, 21:24
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Feniks
Здравствуйте, Толков Геннадий Викторович!
Если я Вас правильно понял, то у Вас есть два варианта обработать нажатие на кнопку (например BtnShowForm4) на главной форме (форма1):
1. Вызвать функцию InputQuery('Введите пароль', 'Пароль', StrPassword) и если введеное значение совпадает с паролем, тогда открываем/показываем Форму4. Где-то так:
var
StrPasswprd: String;
begin
if InputQuery('Введите пароль', 'Пароль', StrPassword) then
if StrPassword='MyPass' then
Form4.Show
else
ShowMessage('Пароль неверный !!!');
end;
2. Второй способ чуть сложней. Надо создать новую форму для ввода пароля, если хотите, чтобы окно было посимпотичней. Назавем ее ФормаПасс. Далее делаем тоже самое, только сначало показываем модально ФормуПасс и при ее успешном закрытии проверям введенный пароль. Если он совпадает, показываем Форму4.
Вот и все. И ничего тут сложного. Только не забудьте свойство Visible Формы4 поставить в false, что бы она не появлялась сразу при старте прогаммы.
 |
Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 28 ноября 2007, 11:30
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 6; последнее сообщение — 28 ноября 2007, 11:33; участников в обсуждении: 3.
|
Мережников Андрей (статус: Абитуриент), 26 ноября 2007, 21:41 [#1]:
Уточните, если можно. Все формы на экране находятся одновременно? Form4 тоже всегда на экране или должна появляться только после ввода пароля? И что значит форма отключает вторую и включает первую? Форма сама по себе или при каком-то действии пользователя (например,клик мышкой по форме)?
|
|
Толков Геннадий Викторович (статус: Посетитель), 26 ноября 2007, 22:03 [#2]:
Здравствуйте Андрей.
Form4 должна появляться после ввода пароля
|
|
Feniks (статус: Бакалавр), 27 ноября 2007, 10:03 [#3]:
"И если можно то ещё, на форме две иконки первая
включает вторую, а форма отключает вторую и
включает первую, но они у меня на самом краю
формы и когда я мышку наведу на рабочий стол
(форма у меня 200Х200), то вторая так и остаётся
включенной. Как сделать так, чобы и рабочий стол
отключал вторую иконку и включал первую?
Заранее благодарен." Вы сами та хоть поняли, что спросили ? Бо мы нет. Переформулируйте правильно Ваш вопрос с укзанием имен Ваших форм, а не "первая... вторая..." Правильно заданный вопрос - это уже почти 90% ответа на него.
|
|
Мережников Андрей (статус: Абитуриент), 27 ноября 2007, 11:29 [#4]:
Так если Form4 должна появляться на экране только после ввода пароля,значит в какой-то из форм должна быть кнопка или пункт меню,которые собственно и вызывают появление Form4. Так поставьте в соответствующем обработчике вызов дополнительной формы для ввода пароля (модальную) до вызова Form4. а затем анализируйте значение,возвращаемое формой ввода пароля (PassForm)
|
|
Толков Геннадий Викторович (статус: Посетитель), 27 ноября 2007, 23:02 [#5]:
Я-же написал Главная - Form1, и кнопки есть которые открывают все формы, но одну форму(Form4) мне нужно открыть через пароль. Если можно пришлите код.
|
|
Feniks (статус: Бакалавр), 28 ноября 2007, 11:33 [#6]:
Можно еще так попробовать. Но для этого нужна отдельная форма.
const
InputBoxMessage = WM_USER + 200;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
procedure InputBoxSetPasswordChar(var Msg: TMessage); message InputBoxMessage;
public
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.InputBoxSetPasswordChar(var Msg: TMessage);
var
hInputForm, hEdit, hButton: HWND;
begin
hInputForm := Screen.Forms[0].Handle;
if (hInputForm <> 0) then
begin
hEdit := FindWindowEx(hInputForm, 0, 'TEdit', nil);
{
// Change button text:
hButton := FindWindowEx(hInputForm, 0, 'TButton', nil);
SendMessage(hButton, WM_SETTEXT, 0, Integer(PChar('Cancel')));
}
SendMessage(hEdit, EM_SETPASSWORDCHAR, Ord('*'), 0);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
InputString: string;
begin
PostMessage(Handle, InputBoxMessage, 0, 0);
InputString := InputBox('Input Box', 'Please Enter a Password', '');
end;
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|