小弟刚从VB转DELPHI,在编写时出现问题,把代码贴出来,大家帮看看:
unit main;interfaceuses
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 ;implementationuses 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.
unit main;interfaceuses
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 ;implementationuses 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.
解决方案 »
- 急,高手请进!!这是不是ADO的一个bug啊?在使用ADOQuery组件执行Select等语句时总是报“未指定的错误”
- delphi开发的应用程序windows中文版下运行正常,多语言版(英文核心,中文显示)下出现异常!
- 急!在线等待,有关DLL
- 谁知道有没有delphi帮助的汉化!!
- 画图的双缓冲问题!
- delphi7如何解决TIdHTTP抓回的gzip的页面乱码?
- ●●●如何判断用户是按Alt+F4关闭窗口还是按标题栏上的关闭按钮关闭的窗口?●●●
- delphi数据库问题
- 我用Delphi连接有密码的Access数据库时为什么联不上?
- 大侠!!!大侠!!!我怎样给动态生成的button添加click事件?????
- 请教如何取一个运行程序的输入框数值?
- Oemtoansi能否解释一下此函数?谢谢!
begin
mytools[seltools].toolscount:= mytools[seltools].toolscount+1;
setlength(mytools[seltools].tools ,mytools[seltools].toolscount);
index:= mytools[seltools].toolscount ; <<<<<<<<<<<<<
end
else
index:= toolsindex;
index:= mytools[seltools].toolscount;
----->>>>>>>>
index := mytools[seltools].toolscount - 1;
index 我的原意是刚才加完后的内容,我一对 mytools[seltools].tools[n].title 赋值就出错。
unit main;interfaceuses
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 refreshlv();
procedure RadioButton1Click(Sender: TObject);
procedure meditClick(Sender: TObject); private
{ Private declarations }
public
{ Public declarations }
end;var
frmMain: TfrmMain;
mytools : TMyTools;
seltools: TToolType ;implementationuses 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];
aa: TTools;
ss: string;
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
//在这出现问题,经常报错,是否动态数组我使用的不对。而且当不错时,我用 meditClick 时,显示的并不是我保存的内容,而是一些乱码和内存中其他的字符。!
editform.Caption:= mytools[seltools].tools[toolsindex].title ;
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 -1 ;
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 ;
if toolsindex = 0 then
item:=lv1.Items.Add
else
item:=lv1.Items[toolsindex-1]; 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.refreshlv();var
index: integer;
item: tlistitem;
str: string[1];
begin
lv1.Clear;
for index:=1 to mytools[seltools].toolscount do begin 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;procedure TfrmMain.RadioButton1Click(Sender: TObject);
begin
if tradiobutton(sender).Name ='RadioButton1' then
seltools:=ttleft
else
seltools:=ttright;
refreshlv;
end;procedure TfrmMain.meditClick(Sender: TObject);
var
index: integer;
begin
index:= lv1.ItemIndex+1;
if index >0 then
shownewform(index);
end;end.
还有edit的pas和dfm
我这里好搭建你的环境调试
还有调试步骤说清楚。
我的信箱是 [email protected] ,请发信给我,我回复时附带程序的整个工程压缩文件。
//toolsindex 0表示新建,那么toolsindex+1调用后就要还原为toolsindex-1
//你的代码风格需要改进啊,太乱
//如果有时间我给你写个样本。 begin
editform.Caption:= mytools[seltools].tools[toolsindex-1].title ; //<<<<<<<
editform.Edit1.Text:=mytools[seltools].tools[toolsindex-1].apppath ; //<<<<<<<
editform.Edit2.Text:=mytools[seltools].tools[toolsindex-1].para ; //<<<<<<<
editform.Edit3.Text:=mytools[seltools].tools[toolsindex-1].setpath ; //<<<<<<<
editform.Edit4.Text:=mytools[seltools].tools[toolsindex-1].runpass ; //<<<<<<<
editform.CheckBox1.Checked:=mytools[seltools].tools[toolsindex-1].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 - 1; //<<<<<<<<<<<
end
else
对了,因为我是从VB转过来了,所以我是按VB的代码风格来处理,我还特意按我的风格改进了代码的风格,能否指教一下DELPHI的代码风格是什么样的?能给个示例不?再次谢谢了!
点上门的管理后按提示操作即可