IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Модальная форма, из немодальной
сообщение
Сообщение #1


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


После метода Show формы нужно сделать "некоторые действия". Эта форма также должна быть модальной. Какие есть решения данного вопроса?
Callback функция - тяжеловатое решение: не хочется создавать тип функции, хранить параметры ф-ии, условие вызова (т.к. не всегда после show нужно выполнять "некоторые действия").
Есть ли какая-то информация по Callback методам? Или надо сделать фиктивную ф-ию, содержащую данный метод?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


Спасибо за подсказку, но мне как раз надо (наверное smile.gif ), чтобы форма была таковой.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Цитата(sheka @ 25.06.2012 16:28) *
мне как раз надо (наверное smile.gif ), чтобы форма была таковой.
Странное желание, но тебе виднее. Я бы не стал делать так, как делаешь ты. Если надо передавать параметры - делал бы вот так:

Модальная форма:
type
TParams = class
private
p : string;
public
constructor Create(param : string);
end;

TModalForm = class(TForm)
Edit1: TEdit;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
param : string;
procedure ShowWithFunc(Sender: TObject);
public
{ Public declarations }
procedure func(s : string);

// Магия - если надо стандартное поведение - вызываем DoShowModal без параметров
// если надо что-то добавить - добавляем. Ниже увидишь, как.
function DoShowModal (Params : TParams = nil) : Integer;
end;

// ...

{ TModalForm }
procedure TModalForm.func(s: string); // Это будет выполняться после Show
begin
Edit1.Text := s;
end;

procedure TModalForm.ShowWithFunc(Sender: TObject); // Ну, это твоя функция
begin
FormShow(Self);
func(param);
Self.OnShow := FormShow;
end;


function TModalForm.DoShowModal(Params: TParams): Integer;
begin
if Assigned(Params) then // Что-то передали? Значит, делаем доп. действия
begin
param := Params.p;
OnShow := ShowWithFunc;
end;

ShowModal;

if Assigned(Params) then // не забываем очистить память иначе будет утечка
Params.Free;
end;

procedure TModalForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caHide; // Чтобы быть уверенным, что форма не разрушится, а только скроется
end;

procedure TModalForm.FormShow(Sender: TObject);
begin
//
end;

{ TParams }
constructor TParams.Create(param: string);
begin
p := param;
// Собственно, ты можешь сделать гораздо больше одного конструктора
// и передавать любые данные, включая и процедуры обработки тоже
end;
А вот как это выглядит из главной формы:

// Это вызывает доп. действие после Show
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
ModalForm.DoShowModal(TParams.Create('123'));
end;

// Это - вызовет только стандартный метод ShowModal
procedure TForm1.Button1Click(Sender: TObject);
begin
ModalForm.DoShowModal;
end;
Идея понятна?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 25.04.2024 12:45
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name