ObjectTextToBinary過程執行的功能與ObjectBinaryToText相反
procedure ObjectTextToBinary(Input
var
SaveSeparator: Char;
Parser: TParser;
Writer: TWriter;
…
begin
Parser := TParser
SaveSeparator := DecimalSeparator;
DecimalSeparator :=
try
Writer := TWriter
try
Writer
ConvertObject;
finally
Writer
end;
finally
DecimalSeparator := SaveSeparator;
Parser
end;
end;
在程序流程和結構上與ObjectBinaryToText差不多
procedure ConvertObject;
var
InheritedObject: Boolean;
begin
InheritedObject := False;
if Parser
InheritedObject := True
else
Parser
Parser
ConvertHeader(InheritedObject)
while not Parser
not Parser
not Parser
Writer
while not Parser
Writer
Parser
end;
DFM文件與DFM腳本語言之間相互轉換的任務由ObjectResourceToText和ObjextTextToResource兩個過程完成
procedure ObjectResourceToText(Input
begin
Input
ObjectBinaryToText(Input
end;
ObjectTextToResource過程就比較復雜
procedure ObjectTextToResource(Input
var
Len: Byte;
Tmp: Longint;
MemoryStream: TMemoryStream;
MemorySize: Longint;
Header: array[
begin
MemoryStream := TMemoryStream
try
ObjectTextToBinary(Input
MemorySize := MemoryStream
FillChar(Header
MemoryStream
MemoryStream
if Len and $F
begin
if ffChildPos in TFilerFlags((Len and $F
begin
MemoryStream
case TValueType(Len) of
vaInt
vaInt
vaInt
end;
MemoryStream
end;
MemoryStream
end;
MemoryStream
StrUpper(@Header[
Byte((@Header[
Word((@Header[
Word((@Header[Len +
Longint((@Header[Len +
Output
Output
finally
MemoryStream
end;
end;
動態DFM文件是相對於靜態DFM文件而言
動態DFM文件的創建和使用分別如下兩種情況
● 在程序運行過程中
● 在Delphi開發環境中
由Delphi的窗體設計的常規方法生成的DFM文件在程序運行一開始就規定了部件的結構
在Delphi應用程序中有時需要在運行過程中創建控制
procedure TForm
var
Ctrl: TControl
begin
Ctrl := TEdit
Ctrl
Ctrl
Ctrl
Ctrl
InsertControl(Ctrl)
end;
動態插入控制的優點是可以在任何時刻
動態插入控制的不足之處是在插入控制前
在使用動態DFM文件時有兩點需要注意
● 每一個動態插入的控制或部件必須在程序中調用RegisterClass進行注冊
● 讀入DFM文件自動創建部件後
Delphi多種類型的可視部件
超媒體卡片設計要求卡片中的媒體數目和媒體種類是不受限制的
下面是超媒體卡片設計子系統中的部分源程序
⑴ 在應用程序中注冊對象
procedure TMainForm
begin
RegisterClass(TLabel)
RegisterClass(TEdit)
RegisterClass(TMemo)
RegisterClass(TButton)
RegisterClass(TPanel)
RegisterClass(TPanelP)
RegisterClass(TBitBtn)
…
end;
⑵ 創建和插入對象
procedure TMDIChild
var
Ctrl : TControl;
Point: TPoint;
begin
GetCursorPos(Point)
Point := BackGround
case CurToolIndex of
Ctrl := TLabel
TLabel(Ctrl)
TLabel(ctrl)
TLabel(ctrl)
TLabel(ctrl)
TLabel(ctrl)
TLabel(Ctrl)
TLabel(Ctrl)
TLabel(Ctrl)
TLabel(Ctrl)
TLabel(Ctrl)
TLabel(Ctrl)
TLabel(Ctrl)
TLabel(Ctrl)
TLabel(Ctrl)
TLabel(Ctrl)
BackGround
CurTool
CurTool := nil;
…
end;
Ctrl := TEdit
TEdit(ctrl)
TEdit(ctrl)
TEdit(ctrl)
TEdit(Ctrl)
BackGround
…
end;
…
end;
end;
⑵ 存取動態DFM文件
[
From:http://tw.wingwit.com/Article/program/Delphi/201311/25089.html