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

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

Окно подтверждения


snake-as ©   (2008-05-21 04:11:00) 

Здравствуйте. У меня очень простой вопрос. Мне нужно, чтобы когда пользователь хочет, напрмер, что-то создать, вылазило окошко "Введите имя...", если он нажимал Ок, то все проходило, если Cancel, напрмер, то нет. Я думаю, я понятно высказал, что хотел:) Подскажите, пожалуйста.


Anatoly Podgoretsky   (2008-05-21 15:52:00) [1]


> И нафига???

Когда посадишь какую ни будь важную базу, то поймешь.
Он же препятсвывает выключению Виндоус.


Ega23   (2008-05-21 15:50:00) [2]


> RTFM: WM_QUERYENDSESSION


И нафига???


Leonid Troyanovsky   (2008-05-21 15:42:00) [3]


> Ega23 ©   (21.05.08 12:21) [13]

> Вообще такой код пишется немного не так:

Конечно, не так.
RTFM: WM_QUERYENDSESSION

--
Regards, LVT.


Ega23   (2008-05-21 12:21:00) [4]

procedure TForm1.SpeedButton7Click(Sender: TObject);
begin
case messagebox(application.Handle,'Завершить работу программы?','Внимание!',mb_okcancel) of
idok: begin  application.Terminate; end;
idcancel: exit;
end;
end;


Вообще такой код пишется немного не так:


procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
 CanClose := (MessageBox(Handle, PChar('Завершить работу?'), PChar('Ахтунг!'),
                         MB_OKCANCEL or MB_ICONINFORMATION)=IDOK);
end;


Mozgan   (2008-05-21 12:15:00) [5]

Про 10 пост АБСАЛЮТНА согласен! Преподу не только превед, но и пальчиком по виску повертеть! :)))


Ega23   (2008-05-21 12:01:00) [6]

Преподу передавай привет.


Ega23   (2008-05-21 12:00:00) [7]


> Лучше Close, но почему тогла у нас с ВУЗе препод то и дело
> твердит про Application.terminate. Аж "пару" ставит если
> упоминается Close. Чудак однако :)


Ну вот, например:


procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 ShowMessage('Do something');
end;

procedure TForm1.Button8Click(Sender: TObject);
begin
 Application.Terminate;
end;

procedure TForm1.Button9Click(Sender: TObject);
begin
 Close;
end;



В случае Application.Terminate событие TForm.OnClose не отработает. А на нём много интересного может висеть : закрытие наборов данных, отпись в лог, уничтожение каких-то объектов и т.п.


Mozgan   (2008-05-21 11:54:00) [8]

про Application.terminate я согласен. Лучше Close, но почему тогла у нас с ВУЗе препод то и дело твердит про Application.terminate. Аж "пару" ставит если упоминается Close. Чудак однако :)


Ega23   (2008-05-21 11:43:00) [9]


> Ведь это тоже выбор.


Не за выбор, а за Application.Terminate в данной ситуации.


Mozgan   (2008-05-21 11:37:00) [10]

Почему убивать ??????

Ведь это тоже выбор.
Если нажата кнопка ОК - действие 1
Если нажата кнопка cancel - другое действие.

В принципе разницы нет, как мне кажется. Каждый решает проблему по-своему.


Ega23   (2008-05-21 11:17:00) [11]


> Mozgan   (21.05.08 11:16) [5]


Убить за такое.


Mozgan   (2008-05-21 11:16:00) [12]

А ещё такое код есть...
Только и правда, в орехи тебя. Сам туда иногда попадаю :))).
Но нужно как следует почитать книжки, хелпы.... и включать голову, экспериментируя.

procedure TForm1.SpeedButton7Click(Sender: TObject);
begin
 case messagebox(application.Handle,'Завершить работу программы?','Внимание!',mb_okcancel) of
 idok: begin  application.Terminate; end;
 idcancel: exit;
end;
end;


han_malign   (2008-05-21 10:39:00) [13]

uses Dialogs;
...
var nameStr: string;
...
if( InputQuery('Ты кто?', 'Введите имя', nameStr) )then begin
  LetsGo(nameStr);
end;


Юрий Зотов   (2008-05-21 10:23:00) [14]

Поправка - переменную Name назовите как-нибудь иначе.


Юрий Зотов   (2008-05-21 08:33:00) [15]

> snake-as ©   (21.05.08 04:11)  

Делаем форму (например, класс TForm2). На ней Edit1 (куда вводится имя) и 2 кнопки (ОК и Отмена). Настройки:

Форма.BorderStyle = bsDialog
OK.Default = True
Oтмена.Cancel = True
Oтмена.ModalResult = mrCancel

Пишем обработчик события OК.OnClick:

if Edit1.Text = '' then
 ShowMessage('Необходимо ввести имя')
else
 ModalResult := mrOK;

В другой форме есть кнопка (пункт меню и т.п.) "Создать". В обработчике события OnClick пишем:

var
 Name: string;
begin
 with TForm2.Create(nil) fo
 try
   if ShowModal = mrOk then
   begin
     Name = Edit1.Text; // Получаем строку, которую ввел юзер
     ... // Здесь создаем то, что хотели
   end;
 finally
   Free;
 end;
end;


brother   (2008-05-21 07:23:00) [16]

В орешник... Ошибка в 17 строке...
Автор, умей изъясняться и будет те счастье...


Наверх

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