home *** CD-ROM | disk | FTP | other *** search
- { DIHtmlLabel example. }
-
- unit Play;
-
- {$I DI.inc}
-
- interface
-
- uses
- Windows, Messages, StdCtrls, Controls, ExtCtrls, Classes, Forms,
-
- VirtualTrees,
-
- DIHtmlLabel, ComCtrls;
-
- type
- TfrmPlay = class(TForm)
- LinkLabel: TDIHtmlLabel;
- Splitter1: TSplitter;
- Splitter2: TSplitter;
- Treeview: TVirtualStringTree;
- MemoHtml: TMemo;
- ScrollBar: TScrollBar;
- procedure FormCreate(Sender: TObject);
- procedure MemoHtmlChange(Sender: TObject);
- procedure btnRefreshClick(Sender: TObject);
- procedure TreeViewInitNode(
- Sender: TBaseVirtualTree;
- ParentNode, Node: PVirtualNode;
- var InitialStates: TVirtualNodeInitStates);
- procedure TreeViewInitChildren(
- Sender: TBaseVirtualTree;
- Node: PVirtualNode;
- var ChildCount: Cardinal);
- procedure TreeViewGetText(
- Sender: TBaseVirtualTree;
- Node: PVirtualNode;
- Column: TColumnIndex;
- TextType: TVSTTextType;
- var CellText: WideString);
- procedure btnDownClick(Sender: TObject);
- procedure btnUpClick(Sender: TObject);
- procedure ScrollBarScroll(Sender: TObject; ScrollCode: TScrollCode;
- var ScrollPos: Integer);
- procedure LinkLabelAfterPaint(Sender: TObject);
- end;
-
- implementation
-
- {$R *.DFM}
-
- uses
- Graphics,
- TypInfo,
-
- InfoStrings,
-
- DIHtmlRenderer,
-
- DIUtils;
-
- procedure TfrmPlay.FormCreate(Sender: TObject);
- begin
- LinkLabel.Caption := Lorem;
- MemoHtml.Text := Lorem;
- btnRefreshClick(Self);
- { Prevents flickering during updates and resizes. We should eventually
- implement a buffering mechanism into TDIHtmlLabel. Suggestions are welcome. }
- DoubleBuffered := True;
- end;
-
- { ---------------------------------------------------------------------------- }
-
- procedure TfrmPlay.MemoHtmlChange(Sender: TObject);
- begin
- Treeview.BeginUpdate;
- Treeview.Clear;
- LinkLabel.Caption := MemoHtml.Text;
- Treeview.RootNodeCount := 1;
- Treeview.FullExpand;
- Treeview.EndUpdate;
- end;
-
- { ---------------------------------------------------------------------------- }
-
- procedure TfrmPlay.btnRefreshClick(Sender: TObject);
- begin
- Treeview.BeginUpdate;
- Treeview.Clear;
- Treeview.RootNodeCount := 1;
- Treeview.FullExpand;
- Treeview.EndUpdate;
- end;
-
- { ---------------------------------------------------------------------------- }
-
- procedure TfrmPlay.TreeViewInitNode(Sender: TBaseVirtualTree; ParentNode,
- Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
- var
- NodeData, ParentNodeData: PNode;
- begin
- NodeData := Sender.GetNodeData(Node);
- if ParentNode = nil then
- begin
- NodeData^ := LinkLabel.NodeTree.Root;
- end
- else
- begin
- ParentNodeData := Sender.GetNodeData(ParentNode);
- NodeData^ := TParentNode(ParentNodeData^).Children.Items[Node.Index];
- end;
- if (NodeData^ is TParentNode) and TParentNode(NodeData^).Children.IsNotEmpty then
- Include(InitialStates, ivsHasChildren);
- end;
-
- { ---------------------------------------------------------------------------- }
-
- procedure TfrmPlay.TreeViewInitChildren(Sender: TBaseVirtualTree;
- Node: PVirtualNode; var ChildCount: Cardinal);
- var
- NodeData: PNode;
- begin
- NodeData := Sender.GetNodeData(Node);
- if NodeData^ is TParentNode then
- ChildCount := TParentNode(NodeData^).Children.Count;
- end;
-
- procedure TfrmPlay.TreeViewGetText(
- Sender: TBaseVirtualTree;
- Node: PVirtualNode;
- Column: TColumnIndex;
- TextType: TVSTTextType;
- var CellText: WideString);
- var
- NodeData: TNode;
- begin
- NodeData := PNode(Sender.GetNodeData(Node))^;
-
- CellText := NodeData.ClassName;
- case NodeData.GetNodeType of
-
- ntStyleNode: CellText := CellText + ' (' +
- GetEnumName(TypeInfo(TFontStyle), Integer((NodeData as TStyleNode).Style)) + ')';
-
- ntLinkNode: CellText := CellText + ' (' +
- GetEnumName(TypeInfo(TLinkState), Integer((NodeData as TLinkNode).State)) + ')';
-
- ntStringNode: CellText := CellText + ' ("' +
- (NodeData as TStringNode).Text + '")';
-
- ntActionNode: CellText := CellText + ' (' +
- GetEnumName(TypeInfo(TActionType), Integer((NodeData as TActionNode).Action)) + ')';
-
- end;
-
- if NodeData is TAreaNode then
- CellText := CellText + ' [X: ' + IntToStrW(TAreaNode(NodeData).StartingPoint.x) +
- ', Y: ' + IntToStrW(TAreaNode(NodeData).StartingPoint.y) + ']';
- end;
-
- { ---------------------------------------------------------------------------- }
-
- procedure TfrmPlay.btnDownClick(Sender: TObject);
- begin
- with LinkLabel do
- OffsetY := OffsetY + 20;
- end;
-
- { ---------------------------------------------------------------------------- }
-
- procedure TfrmPlay.btnUpClick(Sender: TObject);
- begin
- with LinkLabel do
- OffsetY := OffsetY - 20;
- end;
-
- { ---------------------------------------------------------------------------- }
-
- procedure TfrmPlay.ScrollBarScroll(Sender: TObject;
- ScrollCode: TScrollCode; var ScrollPos: Integer);
- begin
- if ScrollPos > (LinkLabel.TextHeight - LinkLabel.Height) then
- ScrollPos := LinkLabel.TextHeight - LinkLabel.Height;
- LinkLabel.OffsetY := -ScrollPos;
- end;
-
- { ---------------------------------------------------------------------------- }
-
- procedure TfrmPlay.LinkLabelAfterPaint(Sender: TObject);
- begin
- if LinkLabel.TextHeight > LinkLabel.Height then
- begin
- ScrollBar.PAGESIZE := LinkLabel.Height;
- ScrollBar.LargeChange := LinkLabel.Height;
- end
- else
- begin
- ScrollBar.PAGESIZE := LinkLabel.TextHeight;
- ScrollBar.LargeChange := LinkLabel.TextHeight;
- end;
- ScrollBar.max := LinkLabel.TextHeight;
- end;
-
- end.
-
-