一对数组赋值就出现问题!
小弟刚从VB转DELPHI,在编写时出现问题,把代码贴出来,大家帮看看:
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ComCtrls,StdCtrls, XPMan, Math;
const
APPTITLE = 'MyToolsBar ' ;
type
TTool = record
title : string[100] ;
apppath : string[255] ;
para : string[100] ;
setpath : string[255] ;
runpass : string[50] ;
autorun : boolean ;
end ;
TTools = record
tools : array of TTool;
toolscount : integer;
end;
TToolType = (ttLeft=1,ttRight=2);
TMyTools = array[ttLeft..ttRight ] of TTools;
TfrmMain = class(TForm)
PopupMenu1: TPopupMenu;
mnew: TMenuItem;
medit: TMenuItem;
mremove: TMenuItem;
lv1: TListView;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
Button1: TButton;
XPManifest1: TXPManifest;
N1: TMenuItem;
mup: TMenuItem;
mdown: TMenuItem;
N2: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure mnewClick(Sender: TObject);
procedure shownewform(const toolsindex: integer = 0);
procedure lv1SelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
mytools : TMyTools;
seltools: TToolType ;
implementation
uses edit;
{$R *.dfm}
procedure TfrmMain.FormCreate(Sender: TObject);
begin
seltools:=ttLeft;
mytools[ttLeft].toolscount:=0;
mytools[ttright].toolscount:=0;
setlength(mytools[ttleft].tools,0);
setlength(mytools[ttright].tools,0);
end;
procedure TfrmMain.Button1Click(Sender: TObject);
var mp,np:tpoint;
begin
np.x:=button1.Left ;
np.Y:=button1.Top + button1.Height ;
mp:= ClientToScreen(np);
popupmenu1.Popup(mp.X,mp.Y);
end;
procedure TfrmMain.mnewClick(Sender: TObject);
begin
shownewform(0) ;
end;
procedure TfrmMain.shownewform(const toolsindex: integer = 0);
var
editform: tfrmedit;
index: integer;
item: tlistitem;
str: string[1];
begin
try
editform:=tfrmedit.Create(self);
editform.apptitle:= apptitle;
editform.saved:= false;
editform.Position:= poMainFormCenter;
if toolsindex = 0 then
begin
editform.Caption:= 'New tools ';
editform.Edit1.Text:= ' ';
editform.Edit2.Text:= ' ';
editform.Edit3.Text:= ' ';
editform.Edit4.Text:= ' ';
editform.CheckBox1.Checked:=false;
end
else
begin
editform.Caption:= mytools[seltools].tools[toolsindex].title ;
//一到此处,就出现问题。很奇怪,如果是 'aa '就不错,如果是 'afasdfasdf '就出错。郁!
editform.Edit1.Text:=mytools[seltools].tools[toolsindex].apppath ;
editform.Edit2.Text:=mytools[seltools].tools[toolsindex].para ;
editform.Edit3.Text:=mytools[seltools].tools[toolsindex].setpath ;
editform.Edit4.Text:=mytools[seltools].tools[toolsindex].runpass ;
editform.CheckBox1.Checked:=mytools[seltools].tools[toolsindex].autorun ;
end;
editform.ShowModal ;
if editform.saved then
begin
if toolsindex = 0 then //当为新增时
begin
mytools[seltools].toolscount:= mytools[seltools].toolscount+1;
setlength(mytools[seltools].tools ,mytools[seltools].toolscount);
index:= mytools[seltools].toolscount ;
end
else
index:= toolsindex;
mytools[seltools].tools[index].title:= editform.Edit1.Text;
mytools[seltools].tools[index].apppath:= editform.Edit2.Text;
mytools[seltools].tools[index].para:= editform.Edit3.Text;
mytools[seltools].tools[index].setpath:= editform.Edit4.Text;
mytools[seltools].tools[index].runpass:= editform.Edit5.Text;
mytools[seltools].tools[index].autorun:= editform.CheckBox1.Checked ;
item:=lv1.Items.Add;
item.Caption:=mytools[seltools].tools[index].title;
if mytools[seltools].tools[index].autorun then
str:= 'y '
else
str:= ' ';
item.SubItems.Add(str) ;
if length(mytools[seltools].tools[index].runpass)> 0 then
str:= 'y '
else
str:= ' ';
item.SubItems.Add(str) ;
end; // end editform.saved
finally
editform.Free ;
item:=nil;
item.Free;
end;
end;
procedure TfrmMain.lv1SelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
var
selitem: integer;
begin
selitem:= lv1.ItemIndex+1;
if selitem > 0 then
shownewform(selitem);
end;
end.
[解决办法]
你把dfm也贴出来
还有edit的pas和dfm
我这里好搭建你的环境调试
还有调试步骤说清楚。