Subject:
新的代码自动完成,好像有点问题,
[Print This Page]
Author:
3304xfq
Time:
2017-4-8 20:15
Subject:
新的代码自动完成,好像有点问题,
具体从哪个版本开始不清楚,发现从支持模糊匹配后,才有的问题
1.
dateutils.xxx 这时,有些常量比如OneMinute,不管是前面加上dateutils.还是单独打one,都不会弹出OneMinute,或其它常量
2.system.Break或是其它时,函数是不带参数,的但是显示成Break(...),一下子真不习惯,搞的有参数似的
3.list.items[idx],这样的属性 会只显示list.itms,没有后面的索引信息, 也没有这个items类型信息了
4.不清楚是否这个版本开始,以前没注意
假如代码定义了SystemMemory这个全局变量
打入"System.dd",这时发现dd打错了,又忘了"dd"这个函数名,想让他自动完成列出函数来
System.dd 这时在"M"位置.删除掉M重新打入M,会列出SystemMemory和其它system打头的变量
再按后面的点号,企图列出所有system的项目,会变成强制自动完成"SystemMemory..dd"
5.begin end 匹配问题,以前修复过,但是后来又出现了, 具体不好问题重现,下次如果还发现,我记下来告诉你
正常小代码量时begin end是正常的
整个工程的代码一多,
prog xxx;
begin //这里打回车,就会自动多出个end来
xxxx
xxxxx 这里仅几行代码,不多
xxxx
end;
甚至 有时
prog xxx;
begin //这里打回车,就会自动多出个end来
//这里没有代码,只有一个空行,甚至空行都没有
end;
你不嫌累,就去看看上次修复begin/end前后有差异, 后面我有发现的话,告诉你
谢谢了,业余,能还这么坚持维护这份代码
Author:
3304xfq
Time:
2017-4-8 20:37
补4
单独打入"System."时,也会变成"SystemMemory."
如果退格"system",这时再按点号,才正常弹出system下的东西
Author:
Passion
Time:
2017-4-10 10:50
感谢详尽的报告。第五个问题请问是什么版本发现的?自动begin end配对高版本IDE已经有了,我们只做了低版本的。
Author:
3304xfq
Time:
2017-4-10 12:00
5号问题,已经非常久了, 估计有1年左右了
只记的以前begin出问题,你修复过一次,好了,后来更新版本后,又出问题了
我遇到最多的还是
procedure
begin 打回车
//这里还没写写代码,连空行都没有,
end;
或是
if xx=xx /for xxx
begin 这里打回车,
//这里还没写写代码,连空行都没有,
end;
但这种问题,我只发现,unit中代码多了以后,才有, 单独建个工程去测试,是正常的
另外,模糊匹配问题,以前人提了,你加上了, 现在好像默认是模糊状态的,建议把这个设成老风格, 感觉 js之类的人,才更习惯单词大写匹配
Author:
3304xfq
Time:
2017-4-10 12:10
!!!!!发现一个begin/end的问题, 但不是唯一的,还有其它原因引起,!!!!!!
新建一个工程,上面放个按钮
procedure TForm1.Button1Click(Sender: TObject);
begin //你在这里按回车!!
if ZoomImageForm<>nil then
begin //你在这里打回车
if Key= //这里没写完
end;
end;
这只是刚才发现一个,代码不完整时begin出错问题, 平常我遇到的都是代码完整的,只是想加点代码,就在begin那里打个回车,多了个end
补一下我的环境
万年Win7/万年D7/ cnpack:1.1.2.890 2017/03/02
其它IDE级包:
DDEvExtensions,Gexperts,delphispeedup
Author:
npc8
Time:
2017-4-10 12:16
http://bbs.cnpack.org/viewthread ... p;extra=page%3D1###
捎带上我的问题
Author:
3304xfq
Time:
2017-4-10 21:36
最近几版(小几个月内),感觉自动完成功能不太好,很多时候不能弹出来
1.后面代码有错,比如这个过程中,后面的代码没写完的
procedure
begin
dateutils.xxx //后面有没写完的,很多时候,自动完成完全弹不出来,或是弹出来的是少的,甚至是错的
a=b;
c=d;
e= //没打完,想起来前面应该加东西,跳到dateutils那里想先把前面的写上,免的忘了....
end;
上面的,按理应该以行为单位解析,避免错误太多,代码完成功能,或是错误检查功能不能正常工作,这样 想修正,超累,纯人工
2.
procedure xxx;
begin
//这里代码有错
end;
procedure yyy;
begin
//这里会因为前面过程错误,害的后面不能自动完成功能
end;
3.
uses
xxxx,,,,xx;
或是sysutils,windows,"不存在单元",dateutils;
这时,后面代码完成也会有大问题
上面的,只说老是遇到这样的问题,或是最近几个版本,和以前的,差异太大了,不是很好用
我并不保证说按上面的去实验,立马就问题重现;
Author:
3304xfq
Time:
2017-4-11 13:19
继续吐嘈:
多语言的,默认会读取程序目录下txt文件, 如果某个文件读取失败,连程序都没办法启动了,直接崩溃干净
我在程序目录下,有一个"更新服务器说明.txt",程序在繁体下运行时,显示成下面的文件名
这时,CnCustomLangFileStorage会去遍历txt文件,然后报EFOpenError错误,然后就没然后了
所以,你内部读取时,建议加上try except end吧,避免万一某个文件不能读,或是被其它程序占用着
因为是控件创建时的代码, 除非改控件代码,或是删掉有问题的文件,不然外部代码一点办法都没
不能发图,复制了CallStack窗口内容给你看
"Call Stack"
TFileStream.Create('F:\temp\VideoSudio2\更新服?器?明.txt',32,0)
TFileStream.Create('F:\temp\VideoSudio2\更新服?器?明.txt',32)
TCnWideStringList.LoadFromFile('F:\temp\VideoSudio2\更新服?器?明.txt')
TCnCustomHashLangStorage.DoLoadFile('F:\temp\VideoSudio2\更新服?器?明.txt',$2595050)
TCnCustomHashLangStorage.IsLanguageFile(???)
TCnCustomLangFileStorage.InternalInit
TCnCustomLangFileStorage.SetStorageMode(???)
SetOrdProp(???,???,???)
TReader.ReadProperty($25056A0)
TReader.ReadDataInner($25056A0)
TReader.ReadData($25056A0)
TComponent.ReadState($2533B80)
TReader.ReadComponent(nil)
TReader.ReadDataInner($253AEB0)
TReader.ReadData($253AEB0)
TComponent.ReadState($2533B80)
TDataModule.ReadState($2533B80)
TReader.ReadRootComponent($253AEB0)
TStream.ReadComponent($253AEB0)
InternalReadComponentRes('TDataModule1',4194304,$253AEB0)
InitComponent(TDataModule1)
InitInheritedComponent($253AEB0,TDataModule)
TDataModule.Create()
Author:
3304xfq
Time:
2017-4-11 13:37
修正
查了代码你已经在外部加了try exceptend了, 不过,win下单独,或是iDE运行,还是崩溃掉了
好像是 delphi7.1 classes.pas 6351行
procedure TReader.ReadProperty(AInstance: TPersistent);
raise EReadError.CreateResFmt(@SPropertyException, [Name, DotSep, PropPath, E.Message]); 这里把文件名放到错误消息里,蹦掉了
测试方法
新建工程,放上
CnLangManager1
CnHashLangFileStorage1
CnLangTranslator1
三控件
CnHashLangFileStorage1的FStorageMode = smByFile
在程序目录下,建"更新服务器说明.txt" 内容无所谓 (其它文件名也行,只要这个文件名在其它语言下,显示有?的就行
然后在另一电脑上,共享目录中(或是在vmware中映射成本地盘符)运行程序
这时,
CnHashLangFileStorage1不管怎么设置,控件创建,初始化时,都会去优先用户代码,去检测程序当前目录中的txt文件
只要有文件名是"xxx?xxx.txt"的, 这个exe崩溃,不管单独运行,还是delphi中运行
建议改进读初始化文件,由用户选择是否自动化读取
Author:
Passion
Time:
2017-4-13 17:03
我在IsLanguageFile的判断里,针对DoLoadFile加了异常捕捉,读取文件失败时这里会判断为非语言文件,从而不加载此条目。github上的代码已更新。
Author:
3304xfq
Time:
2017-4-15 10:24
我更关心的是,代码自动完成功能,什么时候恢复成老样子, 半年或一年前那时候的方便性
Author:
3304xfq
Time:
2017-4-20 21:30
叔啊,一个星期了,倒不是追着你把这个问题解决掉,晚点也没事, 只是你表个态啊,改不改掉这些问题啊
Author:
Passion
Time:
2017-4-21 15:43
实在太忙,还没空查。
Author:
3304xfq
Time:
2017-4-21 17:08
还以为被抛弃了,,,,嗯.....我说的是问题
Author:
3304xfq
Time:
2017-5-6 06:30
一个月了,只好来催了,5月发的每日构建(2017-05-03),都没有处理上面问题
另外,补充个问题,不知道你能不能解决,或是不知道是不是插件引起的错误
(我装了cnpack,delphispeed,gexperts,ddevextensons ,Delphi7.1)
假如,代码原先是从while中的有Continue或是break,整个代码块拷出到if下面
例:
while true do
begin
if dateutils.HourOf(now)=1 then
break;
if dateutils.HourOf(now)=2 then
Continue;
break
end;
while用的不爽,改成if了,代码块直接复制到if里面
if true then
begin
if dateutils.HourOf(now)=1 then
break; //明显这里不是支持这个的
if dateutils.HourOf(now)=2 then
Continue; //明显这里不是支持这个的
end;
这样.编译时,代码少时,能够提示不是loop不允许用break.contiune,但代码多了会报内部错误的
不知道是插件装多了,还是其它什么原因,感觉N年前没遇到,最近1-2年遇到的次数多了些
代码多了,报内部错误,会郁闷很久,才发现是自己忘了改掉break.contiune
另外cnpack 2017-5-3不知道是不是心理作用,感觉代码完成功能,好像速度快了一些,快N些
Author:
Passion
Time:
2017-5-8 10:34
顶楼的第四个问题,可能是我们退格删除点号时没能重新获取列表导致的 ,目前已改成退格删除点号时让列表隐藏。
但按点号时应该会输入当前选中的条目并在后面加个点,不太清楚SystemMemory..dd这样是怎么来的,如果有可能,能否帮录个桌面操作视频让我理解一下?
其实好多问题我还没能彻底理解……
Welcome to CnPack Forum (http://bbs.cnpack.org/)
Powered by Discuz! 5.0.0