![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Использование RTTI [D6]
trof © (2002-12-07 19:55:00)Добрый день.
Есть у меня приложение с MDI-интерфейсом, которое работает с базой. В некоторых режимах я хочу сделать, чтоб окна у меня отображались как модальные. На этапе проектирования задал FormStyle=fsMDIChild, а метод ShowModal для дочерних окон не работает. Пытался до вызова конструктора поменять в RTTI вышеуказанное свойство - ничего не даёт (игнорируется). Можкт я что-то нетак сделал? Помогите, кто сталкивался. Вот кусок кода, который показывает принцип желаемого действия, но не работает :-(( :
function TBaseEditForm.ShowDirectory(ViewClass: TFormClass;
const FieldName: string): variant;
var
ViewForm:TBaseViewForm;
begin
if ViewClass.ClassInfo<>nil then
TForm(ViewClass.ClassInfo).FormStyle:=fsNormal;
Application.CreateForm(ViewClass,ViewForm);
with ViewForm do
begin
try
ShowModal;
Result:=ViewDataSet.FieldByName(FieldName).Value
except
Result:=Null
end;
Free
end
end;
trof (2002-12-07 21:42:00) [1]Спасибо. Только не понятно with TBaseViewForm.Create(Application) do ; - разве коппилятор сам не создаёт аналогичную переменную?
Александр Павлов (2002-12-07 21:04:00) [2]Лечится переопределением метода CreateParams() создаваемой формы:
procedure CreateParams(var Params: TCreateParams); override;
...
procedure TФорма.CreateParams(var Params: TCreateParams);
begin
if FIAmMDI then FormStyle := fsMDIChild
else FormStyle := fsNormal;
inherited CreateParams(Params);
end;
Зам.: в процедуре реализации формы, с целью эк-мии памяти, создавать форму можно без переменной экземпляра:
with TBaseViewForm.Create(Application) do ;
С уважением.