读书人

一对数组赋值就出现有关问题

发布时间: 2012-02-12 17:16:34 作者: rapoo

一对数组赋值就出现问题!
小弟刚从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
我这里好搭建你的环境调试
还有调试步骤说清楚。

读书人网 >.NET

热点推荐