Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.06.15;
Скачать: CL | DM;

Вниз

Окно подтверждения   Найти похожие ветки 

 
snake-as ©   (2008-05-21 04:11) [0]

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


 
brother ©   (2008-05-21 07:23) [1]

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


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

> 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;


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

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


 
han_malign ©   (2008-05-21 10:39) [4]

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


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

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

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


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


> Mozgan   (21.05.08 11:16) [5]


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


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

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

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

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


 
Ega23 ©   (2008-05-21 11:43) [8]


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


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


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

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


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


> Лучше 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 не отработает. А на нём много интересного может висеть : закрытие наборов данных, отпись в лог, уничтожение каких-то объектов и т.п.


 
Ega23 ©   (2008-05-21 12:01) [11]

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


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

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


 
Ega23 ©   (2008-05-21 12:21) [13]

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;


 
Leonid Troyanovsky ©   (2008-05-21 15:42) [14]


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

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

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

--
Regards, LVT.


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


> RTFM: WM_QUERYENDSESSION


И нафига???


 
Anatoly Podgoretsky ©   (2008-05-21 15:52) [16]


> И нафига???

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



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

Текущий архив: 2008.06.15;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.012 c
15-1209850978
Германн
2008-05-04 01:42
2008.06.15
Размер панели задач


15-1209937314
tButton
2008-05-05 01:41
2008.06.15
case n of


2-1211277741
StiTch
2008-05-20 14:02
2008.06.15
Уменожение и деление


15-1209568345
Foo Fighters
2008-04-30 19:12
2008.06.15
как отключить функцию автодетекта в звуковой карте?


2-1211216137
Константин
2008-05-19 20:55
2008.06.15
Обращение к параметру в SQL запрос по имени