![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамическое создание формы [D7, XP]
Виталий_____ © (2007-09-12 08:21:00)Доброе время суток! Возникла необходимость запрашивать в ходе работы строковые и целочисленные значения. Нужно организовать динамически формируемый диалог. Проблема следующая: компоненты "накидываемые" на создаваемую форму не отображаются. Подскажите, чего я "забываю" делать.
function TFST.AscStr(TextQues:string):string;
var tmpf:TForm;
k:integer;
tmpe:TEdit;
tmpl:TLabel;
tmpb:TButton;
const SpaceSize:integer=10;
begin
tmpf:=TForm.Create(FStaroselcevTreug);
FStaroselcevTreug.InsertComponent(tmpf);
tmpf.Caption:='Запрос строкового параметра';
tmpl:=TLabel.Create(tmpf);
tmpf.InsertComponent(tmpl);
tmpl.Caption:=TextQues;
tmpl.AutoSize:=true;
tmpl.Left:=SpaceSize;
tmpl.Top:=SpaceSize;
tmpf.Width:=tmpl.Width+SpaceSize*2;
tmpe:=TEdit.Create(tmpf);
tmpf.InsertComponent(tmpe);
tmpe.Width:=tmpl.Width;
tmpe.Top:=tmpl.Top+tmpl.Height+SpaceSize;
tmpe.Left:=SpaceSize;
tmpb:=TButton.Create(tmpf);
tmpf.InsertComponent(tmpb);
tmpb.ModalResult:=MB_OK;
tmpb.Caption:='ok';
tmpb.Left:=tmpf.Width-(tmpb.Width mod 2);
tmpb.Top:=tmpe.Top+tmpe.Height+SpaceSize;
tmpf.BorderIcons:=[biSystemMenu];
tmpf.Height:=tmpb.top+tmpb.Height+SpaceSize;
tmpf.BorderStyle:=bsSingle;
tmpf.Position:=poOwnerFormCenter;
//k:=tmpf.ShowModal;
tmpf.Visible:=true;
tmpf.BringToFront;
ShowMessage(inttostr(k));
tmpl.Free;
tmpe.Free;
tmpb.Free;
tmpf.Free;
end;
Kolan (2007-09-12 17:45:00) [1]> tmpl:=TLabel.Create(tmpf);
> tmpf.InsertComponent(tmpl);
> tmpl.Caption:=TextQues;
> tmpl.AutoSize:=true;
> tmpl.Left:=SpaceSize;
> tmpl.Top:=SpaceSize;
> tmpf.Width:=tmpl.Width+SpaceSize*2;
Выдели эти блоки в отдельные функции вроде такой:
function CreateEdit(Caption: string; Left, Top, Wigth: Integer; Parent: TWinControl): TEdit;
Прочти про паттерны: Абстрактная фабрика и фабричный метод.
temp1209 (2007-09-12 16:59:00) [2]оффтоп:
а чем InputQuery не подошел?
Виталий_____ (2007-09-12 16:36:00) [3]Да, наверное так тоже можно. Во всяком случае сам разобрался. Заменил InsertComponent на InsertControl. Всем спасибо. Про free - спасибо, учтем.
Slym (2007-09-12 10:50:00) [4]одного tmpf.Free; хватит т.к. все остальное у тебя .Create( tmpf);
Palladin (2007-09-12 08:42:00) [5]tmpf.InsertComponent(tmpl);
замени на tmpl.Parent:=tmpf;
и
StaroselcevTreug.InsertComponent(tmpf); на
tmpf.Parent:=StaroselcevTreug;
соответственно