//----------------------------------------------------------
const
FilerSignature: array[1..4] of Char = 'TPF0';
procedure TReader.ReadSignature;
var
Signature: Longint;
begin
Read(Signature, SizeOf(Signature));
if Signature <> Longint(FilerSignature) then ReadError(@SInvalidImage);
end;
我以为Button1的单元事件,换成下面的代码:
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
Memo1.Lines.LoadFromFile(Opendialog1.FileName);
end;
试试如何
function CreateControlByName(ControlName, AClassName: String; AOwner: TWinControl = nil): TControl;
var
Cls : TControlClass;
begin
Result := nil;
Cls := TControlClass(GetClass(AClassName));
if Cls = nil then exit;
Result := Cls.Create(AOwner);
if (AOwner <> nil) and (Result.InheritsFrom(TWinControl)) then
Result.Parent := AOwner;
Result.Name := ControlName;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
FileName: String;
AStream: TMemoryStream;
TextStream: TStringStream;
begin
if OpenDialog1.Execute then
begin
FileName := OpenDialog1.FileName;
procedure TForm1.FormResize(Sender: TObject);
begin
Memo1.Height := Self.Height - 100;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
TempControl: TControl;
TempStr, NullStr: String;
CurrNode: TTreeNode;
I, J: Integer;
ControlName, ClassType: String;
begin
TreeView1.Items.Clear;
ControlList.Clear;
for I := 0 to Memo1.Lines.Count - 1 do
begin
TempStr := Trim(Memo1.Lines[I]);
if Pos('object', TempStr) > 0 then
begin
TempStr := Trim(Copy(TempStr, 8, Length(TempStr)));
J := Pos(':', TempStr);
ControlName := Copy(TempStr, 1, J - 1);
ClassType := Copy(TempStr, J + 2, Length(TempStr));
NullStr := Memo1.Lines[I];
J := Pos('object', NullStr);
NullStr := Copy(NullStr, 1, J - 1);
J := Length(NullStr) Div 2;
if J = 0 then
begin
ClassType := 'TForm';
CurrNode := TreeView1.Items.AddChild(nil, ControlName);
TempControl := nil;
end
else
begin
if J > CurrNode.Level then
CurrNode := TreeView1.Items.AddChild(CurrNode, ControlName)
else
if J = CurrNode.Level then
CurrNode := TreeView1.Items.AddChild(CurrNode.Parent, ControlName)
else
if J < CurrNode.Level then
begin
CurrNode := CurrNode.Parent;
if CurrNode <> nil then
CurrNode := CurrNode.Parent;
CurrNode := TreeView1.Items.AddChild(CurrNode, ControlName);
end;
for J := 0 to ControlList.Count - 1 do
begin
if TControl(ControlList[J]).Name = CurrNode.Parent.Text then
begin
TempControl := TControl(ControlList[J]);
Break;
end;
end;
end;
TempControl := CreateControlByName(ControlName, ClassType, TWinControl(TempControl));
ControlList.Add(TempControl);
if ClassType = 'TForm' then
TempControl.Show;
end;
end;
SetProperty;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ControlList.Clear;
ControlList.Free;
end;
procedure TForm1.SetProperty;
var
I, J, K, M: Integer;
TempControl: TControl;
TempNode: TTreeNode;
TempStr, PropName, PropValue: String;
Label
NextControl;
begin
for I := 0 to ControlList.Count - 1 do
begin
TempControl := TControl(ControlList[I]);
for J := 0 to Memo1.Lines.Count - 1 do
begin
TempStr := Trim(Memo1.Lines[J]);
if (TempStr = ('object ' + TempControl.Name + ': ' + TempControl.ClassName)) or (TempControl.ClassName = 'TForm') then
begin
for K := J + 1 to Memo1.Lines.Count - 1 do
begin
TempStr := Trim(Memo1.Lines[K]);
if (Pos('object', TempStr) > 0) or (Pos('On', TempStr) > 0) or (TempStr = 'end') then GOTO NextControl;