AddForms

отредактировано 22:39 Раздел: FastScript
Добрый день
Существует следующий текст на дельфи
procedure TForm1.ButtonClick(Sender: TObject);
var Form:TForm;
begin
fsScript.Clear;
fsScript.Parent:=fsGlobalUnit;
if Assigned(Application.FindComponent('Form'))
then Application.FindComponent('Form').Free;
Form:=TForm.Create(Application);
Form.Name:='Form';
with TButton.Create(Form) do
begin
Parent:=Form;
Name:='Button1';
end;
fsScript.AddForm(Form);
fsScript.Lines:=Memo1.Lines;
if fsScript.Compile then fsScript.Execute
else ShowMessage(fsScript.ErrorMsg);
end;
и Скрипт
begin
Form.Button1.Caption:='QQ';
Form.ShowModal;
end.
При первом вызове скрипта Заголовок кнопки изменяется, при следующих нет.
Чем это можно объяснить и как это избежать?
Заранее благодарен за ответ

Комментарии

  • отредактировано 22:39
    Метод AddForm годится только для статического использования, т.к. вносит изменения в архитектуру ранее добавленного класса TForm. Для динамически создаваемых форм одного типа его использовать нельзя. В этом случае надо добавлять все объекты формы вручную в скрипт, и обращаться к ним по их имени (без имени формы).
  • отредактировано 22:39
    Отвечаю на собственный вопрос.
    Ограничение по добавлению
    динамических форм можно обойти следующим образом
    procedure TForm1.ButtonClick(Sender: TObject);
    var Form:TForm;
    begin
    fsScript.Clear;
    fsScript.Parent:=nil;// Это важно тогда он не будет искать в глобал юните
    if Assigned(Application.FindComponent('Form'))
    then Application.FindComponent('Form').Free;
    Form:=TForm.Create(Application);
    Form.Name:='Form';
    with TButton.Create(Form) do
    begin
    Parent:=Form;
    Name:='Button1';
    end;
    fsScript.AddClass(Form.ClassType);
    fsScript.AddForm(Form);
    fsScript.Parent:=fsGlobalUnit
    fsScript.Lines:=Memo1.Lines;
    if fsScript.Compile then fsScript.Execute
    else ShowMessage(fsScript.ErrorMsg);
    end;
    и Скрипт
    begin
    Form.Button1.Caption:='QQ';
    Form.ShowModal;
    end.


Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.