Функциональные языки хорошо подходят для разработки веб-приложений, в частности Scala.
Посмотрите на Lift рамки для получения дополнительной информации.
Да, взгляните на TMS Scripter Studio Pro от TMS Software .
Добавьте максимальную гибкость и мощность в свои приложения с родным Паскаль или базовый сценарий и полная IDE (Интегрированная среда разработки) с визуальным дизайнером форм, объект инспектор и др.
Да, это возможно.Псевдокод для этого примерно такой
var
AParent:Tpanel;
Edit:TControl;
for i := 0 to ConfigItems.Count - 1 do
begin
if (ConfigItems[i].Type = 0) then Edit := TEdit.Create(AParent) as TControl
else Edit := TAnotherEditOrAnotherControlType.Create(APanel) as TControl;
//assume 20 pixels for each control, so thay will be placed one below another
Edit.Top := i * 20;
//Left in this case can be fixed
Edit.Left := 10;
Edit.Parent := AParent;
end;
Это создаст несколько TEdit или какой-либо другой элемент управления (скажем, TAnotherEditOrAnotherControlType, но если вы объявите переменную Edit как TControl, вы можете создать любой элемент управления, который вам нужен) на TPanel, объявленном как AParent. Конечно, вместо предложения IF вы можете объявить большой оператор CASE и создать элементы управления соответствующего типа. Важными строками являются
Здесь вы можете найти несколько примеров использования RTTI у Торри:
Да, мы можем :) Я сделал это для дизайнера страниц, который использует только текстовые поля, правила (линии) и графику, но он должен работать для всех зарегистрированных элементов управления.
[Аппроксимация кода манжеты]
var
i, itemCount: Integer;
AClassName: string;
AnItemClass: TSomeBaseClass;
AnItem: TSomeDrivedBaseClass
ARect: TRect;
begin
// just so we have an initail size
ARect.Left := 100;
ARect.Top := 100;
ARect.Bottom := 200;
ARect.Right := 200;
// Alist is a specialised TStringList
for i := 0 to itemCount - 1 do
begin
AClassName := Alist.ByKey['Class' + IntToStr(i)]; // locate class name
AnItemClass := TSomeBaseClass(GetClass(AClassName)); // ClassName must be registered
AnItem := AnItemClass.Create(OwnerComponent, ARect, AParent);
AnItem.LoadFromFile(IntToStr(i), AList); // specialised loader that reads and sets all necessary properties
AddItemToComponentList(AnItem); // Add to form / frame / panel whatever
end;
end;
Конечно, сначала вам понадобится «конструктор форм», который может изначально сохранить дизайн - сохранение происходит в обратном порядке ... Я оставлю это как упражнение для Читателя. С небольшими изменениями вы можете использовать Delphi и читать файл DFM :)
Вы можете сохранять и загружать файлы dfm из потоков и файлов. Вы можете сохранить / загрузить всю форму или только компонент и его дочерние элементы.
Например
Как двоичный:
AStream.WriteComponent(AComponent);
MyComponent:= Result:= AStream.ReadComponent(AComponent);
Как текст:
procedure WriteComponentAsText(AStream: TStream; AComponent: TComponent);
var
BinStream:TMemoryStream;
begin
BinStream := TMemoryStream.Create;
try
BinStream.WriteComponent(AComponent);
BinStream.Seek(0, soFromBeginning);
ObjectBinaryToText(BinStream, AStream);
finally
BinStream.Free
end;
end;
function ReadComponentAsText(AStream: TStream; AComponent: TComponent): TComponent;
var
BinStream:TMemoryStream;
begin
BinStream := TMemoryStream.Create;
try
ObjectTextToBinary(AStream, BinStream);
BinStream.Seek(0, soFromBeginning);
Result:= BinStream.ReadComponent(AComponent);
finally
BinStream.Free
end;
end;
Вам необходимо зарегистрировать любые классы, которые вы хотите сохранить или загрузить с помощью RegisterClass:
RegisterClass(TPanel);
Glade также использует файлы XML для описания графического интерфейса пользователя, который затем создается во время выполнения. Однако не знаю, можно ли его использовать с Delphi.