Редактор формы run-time

  • Автор темы Dmitrigan
  • Обновлено
  • 13, Jun 2015
  • #1
Всем привет! Есть ли что то готовое для добавления своему приложению на Дельфях визуального редактора формы? ну там набросать компонентов, можно даже без обработчиков событий.. сохранить -загрузить ... и т.п. если есть примеры, буду очень благодарен.

Dmitrigan


Рег
01 May, 2007

Тем
63

Постов
194

Баллов
559
  • 17, Jun 2015
  • #2
dmitrigan, post: 764159:Всем привет!
Есть ли что то готовое для добавления своему приложению на Дельфях визуального редактора формы? ну там набросать компонентов, можно даже без обработчиков событий.. сохранить -загрузить ... и т.п.
если есть примеры, буду очень благодарен.
Автора вспомнил Марко Канту Книга по-моему delphi для профессионалов Там глава посвящена это все описано хоршо У меня старая редакция и она дома (поэтому с названием могу ошибаться) если еще интересно будет скину название
 

LeshaRB


Рег
11 Jun, 2007

Тем
76

Постов
289

Баллов
679
  • 20, Jun 2015
  • #3
wserg, post: 764161:EControl Form Designer - не оно?
На мой взгляд самое то, тем более, что в соседнем топике выложили недавно ссылку на посл версию
 

Hazarin


Рег
11 Sep, 2007

Тем
68

Постов
200

Баллов
580
  • 11, Aug 2015
  • #4
eflc, post: 764166:Если у кого-нибудь есть ссылочка, буду багодарен




http://rghost.ru/6jPcCsGLW

Здесь elasticform и formdesigner За свежесть не отвечаю
 

LeshaRB


Рег
11 Jun, 2007

Тем
76

Постов
289

Баллов
679
  • 14, Aug 2015
  • #5
вот такой код я использую для подгрузки DFM раньше был очень короткий но заглючил с девками
https://www.devexpress.com/Support/Center/Question/Details/T275318

поэтому пришлось чуть поменять дельфовскуй исходную InitInheritedComponent1 constructor TForm11.Create(AOwner: TComponent); // override; Inherited CreateNew(AOwner); if (ClassType <> TForm11) and not(csDesigning in ComponentState) then

if not InitInheritedComponent1(Self, TForm) then

raise EResNotFound.CreateFmt('TForm11 res', [ClassName]);

OldCreateOrder := False;

function InternalReadComponentRes1(const ResName: UnicodeString;

HInst: THandle; var Instance: TComponent): Boolean; overload;

var

HRsrc: THandle;

begin { avoid possible EResNotFound exception }

if HInst = 0 then

HInst := HInstance;

HRsrc := FindResourceW(HInst, PWideChar(ResName), PWideChar(RT_RCDATA));

Result := HRsrc <> 0;

if not Result then

Exit;

with TResourceStream.Create(HInst, ResName, RT_RCDATA) do

try

Instance := ReadComponent(Instance);

finally

Free;

end;

Result := True;

end;

function ReadFromDFM(filename: UnicodeString;

var Instance: TComponent): Boolean;

var

fs: TFileStream;

Buffer: array [0 .. 0] of Byte;

ms: TMemoryStream;

begin

fs := TFileStream.Create(filename, fmOpenRead);

fs.Read(Buffer, 1); // read the first 4 bytes

fs.Seek(0, 0);

if Buffer[0] <> $FF then

begin // is it a DFM resource?

ms := TMemoryStream.Create;

ObjectTextToBinary(fs, ms);

ms.Seek(0, soFromBeginning);

ms.ReadComponent(Instance);

ms.Free;

fs.Free;

end

else

begin

fs.Free;

ReadComponentResFile(filename, Instance);

end;

end;

function InitInheritedComponent1(Instance: TComponent;

RootAncestor: TClass): Boolean;

function InitComponent1(ClassType: TClass): Boolean;

begin

Result := False;

if (ClassType = TComponent) or (ClassType = RootAncestor) then

Exit;

Result := InitComponent1(ClassType.ClassParent);

if ClassType.ClassParent.ClassParent = TForm11 then

Result := ReadFromDFM( ClassType.UnitName + '.dfm',

Instance) or Result

else

Result := InternalReadComponentRes1(ClassType.ClassName,

FindResourceHInstance(FindClassHInstance(ClassType)), Instance)

or Result;

end;

var

LocalizeLoading: Boolean;

begin

GlobalNameSpace.BeginWrite; // hold lock across all ancestor loads (performance)

try

LocalizeLoading := (Instance.ComponentState * [csInline, csLoading]) = [];

if LocalizeLoading then

BeginGlobalLoading; // push new loadlist onto stack

try

Result := InitComponent1(Instance.ClassType);

if LocalizeLoading then

NotifyGlobalLoading; // call Loaded

finally

if LocalizeLoading then

EndGlobalLoading; // pop loadlist off stack

end;

finally

GlobalNameSpace.EndWrite;

end;

end;
 

Rodnikzdorovya


Рег
01 Oct, 2009

Тем
60

Постов
198

Баллов
538
  • 08, Jun 2016
  • #6
Очень рекомендую такую разработку: http://oralayout.wix.com/oralayout#!blank-1/cjg9

- работает замечательно. Удобно что можно без перезапуска клиента накатывать обновления на систему.
 

DexAbsede


Рег
17 Nov, 2011

Тем
76

Постов
210

Баллов
620
  • 11, Dec 2016
  • #7
rodnikzdorovya, post: 764168:вот такой код я использую для подгрузки DFM
раньше был очень короткий но заглючил с девками

https://www.devexpress.com/Support/Center/Question/Details/T275318

поэтому пришлось чуть поменять дельфовскуй исходную InitInheritedComponent1

constructor TForm11.Create(AOwner: TComponent); // override;

Inherited CreateNew(AOwner);
if (ClassType <> TForm11) and not(csDesigning in ComponentState) then
if not InitInheritedComponent1(Self, TForm) then
raise EResNotFound.CreateFmt('TForm11 res', [ClassName]);

OldCreateOrder := False;

function InternalReadComponentRes1(const ResName: UnicodeString;
HInst: THandle; var Instance: TComponent): Boolean; overload;
var
HRsrc: THandle;
begin { avoid possible EResNotFound exception }
if HInst = 0 then
HInst := HInstance;
HRsrc := FindResourceW(HInst, PWideChar(ResName), PWideChar(RT_RCDATA));
Result := HRsrc <> 0;
if not Result then
Exit;

with TResourceStream.Create(HInst, ResName, RT_RCDATA) do
try
Instance := ReadComponent(Instance);
finally
Free;
end;
Result := True;
end;

function ReadFromDFM(filename: UnicodeString;
var Instance: TComponent): Boolean;
var
fs: TFileStream;
Buffer: array [0 .. 0] of Byte;
ms: TMemoryStream;
begin
fs := TFileStream.Create(filename, fmOpenRead);

fs.Read(Buffer, 1); // read the first 4 bytes
fs.Seek(0, 0);

if Buffer[0] <> $FF then
begin // is it a DFM resource?
ms := TMemoryStream.Create;

ObjectTextToBinary(fs, ms);

ms.Seek(0, soFromBeginning);
ms.ReadComponent(Instance);
ms.Free;
fs.Free;
end
else
begin
fs.Free;
ReadComponentResFile(filename, Instance);
end;
end;

function InitInheritedComponent1(Instance: TComponent;
RootAncestor: TClass): Boolean;

function InitComponent1(ClassType: TClass): Boolean;
begin
Result := False;
if (ClassType = TComponent) or (ClassType = RootAncestor) then
Exit;
Result := InitComponent1(ClassType.ClassParent);

if ClassType.ClassParent.ClassParent = TForm11 then
Result := ReadFromDFM( ClassType.UnitName + '.dfm',

Instance) or Result
else
Result := InternalReadComponentRes1(ClassType.ClassName,
FindResourceHInstance(FindClassHInstance(ClassType)), Instance)
or Result;

end;

var
LocalizeLoading: Boolean;
begin
GlobalNameSpace.BeginWrite; // hold lock across all ancestor loads (performance)
try
LocalizeLoading := (Instance.ComponentState * [csInline, csLoading]) = [];
if LocalizeLoading then
BeginGlobalLoading; // push new loadlist onto stack
try
Result := InitComponent1(Instance.ClassType);
if LocalizeLoading then
NotifyGlobalLoading; // call Loaded
finally
if LocalizeLoading then
EndGlobalLoading; // pop loadlist off stack
end;
finally
GlobalNameSpace.EndWrite;
end;
end;
sorry it doesnt work for me!!
 

Babak869


Рег
16 Apr, 2009

Тем
66

Постов
200

Баллов
550
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно