diff --git a/packages/fcl-web/src/fphtml.pp b/packages/fcl-web/src/fphtml.pp
index 52b7d2d5b4..b9399a23cb 100644
--- a/packages/fcl-web/src/fphtml.pp
+++ b/packages/fcl-web/src/fphtml.pp
@@ -57,25 +57,69 @@ type
THTMLCustomEntityProducer = class (THTMLContentProducer)
private
- FOnWritePage: TWriterEvent;
+ FOnWriteEntity: TWriterEvent;
FEntity: THtmlEntities;
protected
- function WriteContent (aWriter : THTMLWriter) : THTMLCustomElement; override;
- procedure DoWritePage (aWriter : THTMLWriter); virtual;
+ procedure DoWriteEntity (aWriter : THTMLWriter); virtual;
+ Property OnWriteEntity : TWriterEvent read FOnWriteEntity write FOnWriteEntity;
+ Property Entity : THtmlEntities read FEntity write FEntity default heHtml;
public
constructor Create(AOwner: TComponent); override;
- Property OnWritePage : TWriterEvent read FOnWritePage write FOnWritePage;
- Property Entity : THtmlEntities read FEntity write FEntity default heHtml;
+ function WriteContent (aWriter : THTMLWriter) : THTMLCustomElement; override;
end;
- { THTMLCustomPagContentProducer }
+ { THTMLEntityContentProducer }
THTMLEntityProducer = class (THTMLCustomEntityProducer)
published
- Property OnWritePage;
+ Property OnWriteEntity;
Property Entity;
end;
+ { THTMLCustomPageProducer }
+
+ THTMLCustomPageProducer = class (THTMLCustomEntityProducer)
+ private
+ FHeaderProducer : THTMLContentProducer;
+ FOnWriteHeader: TWriterEvent;
+ FOnWriteVisualBody: TWriterEvent;
+ FOnWriteVisualFooter: TWriterEvent;
+ FOnWriteVisualHeader: TWriterEvent;
+ FVisualHeaderProducer : THTMLContentProducer;
+ FVisualBodyProducer : THTMLContentProducer;
+ FVisualFooterProducer : THTMLContentProducer;
+ protected
+ procedure DoWriteEntity (aWriter : THTMLWriter); override;
+ procedure DoWriteHeader (aWriter : THTMLWriter); virtual;
+ procedure DoWriteVisualHeader (aWriter : THTMLWriter); virtual;
+ procedure DoWriteVisualBody (aWriter : THTMLWriter); virtual;
+ procedure DoWriteVisualFooter (aWriter : THTMLWriter); virtual;
+ Property HeaderProducer : THTMLContentProducer read FHeaderProducer write FHeaderProducer;
+ Property VisualHeaderProducer : THTMLContentProducer read FVisualHeaderProducer write FVisualHeaderProducer;
+ Property VisualBodyProducer : THTMLContentProducer read FVisualBodyProducer write FVisualBodyProducer;
+ Property VisualFooterProducer : THTMLContentProducer read FVisualFooterProducer write FVisualFooterProducer;
+ Property OnWriteHeader : TWriterEvent read FOnWriteHeader write FOnWriteHeader;
+ Property OnWriteVisualHeader : TWriterEvent read FOnWriteVisualHeader write FOnWriteVisualHeader;
+ Property OnWriteVisualBody : TWriterEvent read FOnWriteVisualBody write FOnWriteVisualBody;
+ Property OnWriteVisualFooter : TWriterEvent read FOnWriteVisualFooter write FOnWriteVisualFooter;
+ public
+ constructor Create(AOwner: TComponent); override;
+ end;
+
+ { THTMLPageProducer }
+
+ THTMLPageProducer = class (THTMLCustomPageProducer)
+ published
+ property OnWriteHeader;
+ property OnWriteVisualHeader;
+ property OnWriteVisualBody;
+ property OnWriteVisualFooter;
+ Property HeaderProducer;
+ Property VisualHeaderProducer;
+ Property VisualBodyProducer;
+ Property VisualFooterProducer;
+ end;
+
{ THTMLCustomDatasetContentProducer }
THTMLCustomDatasetContentProducer = class (THTMLContentProducer)
@@ -88,11 +132,11 @@ type
procedure WriteFooter (aWriter : THTMLWriter);
procedure WriteRecord (aWriter : THTMLWriter);
protected
- function WriteContent (aWriter : THTMLWriter) : THTMLCustomElement; override;
procedure DoWriteHeader (aWriter : THTMLWriter; var el : THTMLCustomElement); virtual;
procedure DoWriteFooter (aWriter : THTMLWriter); virtual;
procedure DoWriteRecord (aWriter : THTMLWriter); virtual;
public
+ function WriteContent (aWriter : THTMLWriter) : THTMLCustomElement; override;
Property OnWriteHeader : TWriterElementEvent read FOnWriteHeader write FOnWriteHeader;
Property OnWriteFooter : TWriterEvent read FOnWriteFooter write FOnWriteFooter;
Property OnWriteRecord : TWriterEvent read FOnWriteRecord write FOnWriteRecord;
@@ -119,11 +163,10 @@ type
FSize: integer;
FUseValues: boolean;
procedure SetItems(const AValue: TStrings);
- protected
- function WriteContent (aWriter : THTMLWriter) : THTMLCustomElement; override;
public
constructor create (aOwner : TComponent); override;
destructor destroy; override;
+ function WriteContent (aWriter : THTMLWriter) : THTMLCustomElement; override;
published
property Items : TStrings read FItems write SetItems;
property UseValues : boolean read FUseValues write FUseValues default false;
@@ -318,7 +361,7 @@ begin
next;
end;
finally
- if opened then
+ if not opened then
close;
end;
finally
@@ -401,8 +444,11 @@ begin
with aWriter.Option(FItem.asstring) do
begin
if FUseValues then
- sel := (FValue.AsString = FPreSelected)
- else
+ begin
+ if assigned(FValue) then
+ sel := (FValue.AsString = FPreSelected)
+ end
+ else if assigned(FItem) then
sel := (FItem.AsString = FPreSelected);
if assigned (FIsPreSelected) then
FIsPreSelected (self, sel);
@@ -514,14 +560,14 @@ function THTMLCustomEntityProducer.WriteContent(aWriter: THTMLWriter
): THTMLCustomElement;
begin
result := aWriter.StartElement(THtmlEntitiesClasses[FEntity]);
- DoWritePage(aWriter);
+ DoWriteEntity(aWriter);
aWriter.EndElement(THtmlEntitiesClasses[FEntity]);
end;
-procedure THTMLCustomEntityProducer.DoWritePage(aWriter: THTMLWriter);
+procedure THTMLCustomEntityProducer.DoWriteEntity(aWriter: THTMLWriter);
begin
- if assigned (FOnWritePage) then
- FOnWritePage (self, aWriter);
+ if assigned (FOnWriteEntity) then
+ FOnWriteEntity (self, aWriter);
end;
constructor THTMLCustomEntityProducer.Create(AOwner: TComponent);
@@ -530,5 +576,56 @@ begin
FEntity := heHtml;
end;
+{ THTMLCustomPageProducer }
+
+procedure THTMLCustomPageProducer.DoWriteEntity(aWriter: THTMLWriter);
+begin
+ inherited DoWriteEntity(aWriter);
+ DoWriteHeader(aWriter);
+ aWriter.Startbody;
+ DoWriteVisualHeader(aWriter);
+ DoWriteVisualBody(aWriter);
+ DoWriteVisualFooter(aWriter);
+ awriter.Endbody;
+end;
+
+procedure THTMLCustomPageProducer.DoWriteHeader(aWriter: THTMLWriter);
+begin
+ if assigned(FOnWriteHeader) then
+ FOnWriteHeader(self,aWriter);
+ if assigned(FHeaderProducer) then
+ aWriter.AddElement(FHeaderProducer.WriteContent(aWriter));
+end;
+
+procedure THTMLCustomPageProducer.DoWriteVisualHeader(aWriter: THTMLWriter);
+begin
+ if assigned(FOnWriteVisualHeader) then
+ FOnWriteVisualHeader(self,aWriter);
+ if assigned(FVisualHeaderProducer) then
+ aWriter.AddElement(FVisualHeaderProducer.WriteContent(aWriter));
+end;
+
+procedure THTMLCustomPageProducer.DoWriteVisualBody(aWriter: THTMLWriter);
+begin
+ if assigned(FOnWriteVisualBody) then
+ FOnWriteVisualBody(self,aWriter);
+ if assigned(FVisualBodyProducer) then
+ aWriter.AddElement(FVisualBodyProducer.WriteContent(aWriter));
+end;
+
+procedure THTMLCustomPageProducer.DoWriteVisualFooter(aWriter: THTMLWriter);
+begin
+ if assigned(FOnWriteVisualFooter) then
+ FOnWriteVisualFooter(self,aWriter);
+ if assigned(FVisualFooterProducer) then
+ aWriter.AddElement(FVisualFooterProducer.WriteContent(aWriter));
+end;
+
+constructor THTMLCustomPageProducer.Create(AOwner: TComponent);
+begin
+ inherited Create(AOwner);
+ Entity := heHtml;
+end;
+
end.