Topic: Создание элементов формы скриптом

Добрый день!
Интересует возможность создания элементов формы через скрипт так, чтобы было возможно обрабатывать внесенные в эти элементы данные.
А так же интересует возможность создания строк с данными в гриде без сохранения в БД (аналог временных данных)

Re: Создание элементов формы скриптом

Приветствую.


Так можно создавать колонки и строки в гриде

procedure Form1_OnShow (Sender: TObject; Action: string);
var
    NxTextColumn: TNxTextColumn;
begin
    // создаем 4 колонки
    Form1.TableGrid1.Columns.Clear;

    try
        Form1.TableGrid1.Columns.Add(TNxTextColumn);
    except
    end;

    try
        Form1.TableGrid1.Columns.Add(TNxTextColumn);
    except
    end;

    try
        Form1.TableGrid1.Columns.Add(TNxTextColumn);
    except
    end;

    try
        Form1.TableGrid1.Columns.Add(TNxTextColumn);
    except
    end;


    Form1.TableGrid1.Columns[0].Color := clWhite;
    Form1.TableGrid1.Columns[1].Color := clWhite;
    Form1.TableGrid1.Columns[2].Color := clWhite;
    Form1.TableGrid1.Columns[3].Color := clWhite;



    // добавляем необходимо число строк
    Form1.TableGrid1.AddRow(10);
end;


Также сделал для вас проект с примером, как создавать и читать значение с элементов

procedure Form1_Button1_OnClick (Sender: TObject; var Cancel: boolean);
var
    i: integer;
    Edit: TdbEdit;
begin
    for i := 1 to 10 do
    begin
        Edit := TdbEdit.Create(Form1);
        Edit.Parent := Form1;
        Edit.Top := i * 30;
        Edit.Left := 8;
        Edit.Name := 'Edit'+IntToStr(i);
    end;
end;


procedure Form1_Button2_OnClick (Sender: TObject; var Cancel: boolean);
var
    Edit: TdbEdit;
begin
    if Form1.FindComponent('Edit'+Form1.EditNumber.Text) is TdbEdit then
    begin
        Edit := TdbEdit(Form1.FindComponent('Edit'+Form1.EditNumber.Text));
        ShowMessage(Edit.Text);
    end;
end;

Проект с примером:

Post's attachments

Attachment icon Runtime created controls.zip 4.21 kb, 380 downloads since 2018-03-21 

Dmitry.

Re: Создание элементов формы скриптом

Подскажите пожалуйста как созданному через скрипт элементу, например Edit или Label назначить обработчик событий, например OnClick?

Re: Создание элементов формы скриптом

Edit := TdbEdit.Create(Form1);
Edit.Parent := Form1;
Edit.OnClick := @EditOnClick;

// событие
procedure EditOnClick (Sender: TObject);
begin

end;
Dmitry.

Re: Создание элементов формы скриптом

MenuItem:=TLabel.Create(frmHorMenu);
    MenuItem.Parent:=frmHorMenu;
    MenuItem.OnClick:=@MenuItemClick;
    MenuItem.OnMouseEnter:=@MenuItemHoover;
    MenuItem.OnMouseLeave:=@MenuItem;

Выдает ошибку для событий OnMouseEnter, OnMouseLeave. Что я делаю не так? Где можно посмотреть правильные названия доступных событий?

Re: Создание элементов формы скриптом

Вместо TLabel пишите TdbLabel

Dmitry.

Re: Создание элементов формы скриптом

procedure HorMenuCreate;
var MenuItem: TdbLabel;
    Pic: TImage;
    Img: TPicture;
begin
    //create horizontal menu items
    MenuItem:=TdbLabel.Create(frmHorMenu);
    MenuItem.Parent:=frmHorMenu;
    MenuItem.Top:=13;
    MenuItem.Left:=3;
    MenuItem.Width:=183;
    MenuItem.AutoSize:=false;
    MenuItem.Alignment:=taCenter;
    MenuItem.Font.Color:=$00ECECEB;
    MenuItem.Name:='H3000';
    MenuItem.Caption:='H3000 "Жидкий гранит"';
    MenuItem.OnClick:=@MenuItemClick;
    MenuItem.OnMouseEnter:=@MenuItemHoover;

При компиляции выдает Undeclared idetifier: OnMouseEnter

Re: Создание элементов формы скриптом

Какая версия программы у вас?

Dmitry.

Re: Создание элементов формы скриптом

5.6

Re: Создание элементов формы скриптом

К сожалению в данной версии это событие недоступно. Работает только в версии 6.хх

Dmitry.