C++Builder 程序员博客
7 Sep
我利用c++ builder6制作了一个com组件,不过我建的工程没有改名,是project1,所以生成的dll也是project.dll,我想把这个名字改成别的,如何改啊??也就是说我要把这个工程名改了。
我试了一种方法,就是把工程另存为别的名字,运行之,虽然生成的dll名字改了,注册显示的也是新名字的,但是我在导入的时候还是原来的那个工程的名字。。。
直接rename就可以了!
组件的名称和文件的名称没有直接的关系.
COM组件名称是在注册表中登记的名字
3 Sep
各位好,我现在想创建的一个应用程序,类似资源管理器,左边是一个TreeView的控件,右边是工作用的界面,现在我想在TreeView控件里点击不同的节点时,右边可以切换成不同的工作界面,请问该怎么做,谢谢了
这两天都有人问这样的问题
思路lz描述的很清楚了 你就点击TreeView 获取节点标识
然后根据标识 显示对应的东西 有什么难点?
响应事件,切换界面。
经曲的资源管理器界面,一般是左边一个TreeView,右边一个ListView,顶部是Menu + ToolBar,底部是StatusBar
在TreeView的OnClick中,根据你的需求(谁知道你要切换什么界面呢),动态的增加删除右侧ListView中的项目就行了,或者交替显示多个不同的ListView。如此而已。
模糊的需求只能模糊的回答。
父节点+…+父节点+单击节点的名称=完整路径
listview显示路径中的所有文件和文件夹。
谢谢,右边的工作界面比较复杂,包括按钮和一些图表控件以及PageControl控件,基本的思路我明白了,刚学BCB,还不是很熟,谢谢zzbinfo和妖哥前辈们的解答
23 Aug
可是现在只能找到C++Builder5的组件大全,我想要6.0的。
顺便问一下,Delphi的组件和C++Builder的完全一样么?
感觉找一本基础的东西很难
语法不一样
控件的用法都一样的
(除了某些控件在版本自身上的差异)
谢谢!去找来看看!嘿
<
<
<
20 Aug
自制组件,如果属性与事件没有设置默认值,需要在构造函数清零吗?
还是编译器自动清零??
构造函数清零
不需要!
一般都需要初始化,这样安全些。
最好还是初始化一下。。。
写代码的一种习惯,一般都先初始化,防止出现非法访问.
19 Aug
人们说bcb6安装好后就有Fastnet组件,我的没有,是没安装好?我修复了下还是没有。
于是我想下这个组件然后安装。可是别人机子上的Fastnet组件是个独立出来的,而我的里面的比如NMFTP组件却安装到了Internet的下面。我是直接按
解压缩到某一目录下,在CB中Open Project–>
找到lib目录下的dclusr.bpk–>点击Contains–>Add–>
Browser–>找到NMFtp.pas–>点击OK添加进来–>再点击
Requires–>Add->找到lib目录下的bcbsmp.bpi–>添加进
来–>Compile之–>成功以后点击Install安装–>保存这
个工程–>把NMFtp.hpp拷贝到CB的Include目录下!
方法安装的。这里的问题出现在什么地方呢?望高手指点下。我怎么样才能把那么多的Fastnet组件一次安装好而不是一个一个的点呢??
菜单 component -》 install packages 在弹出对话框中 点击 “add”按钮, 选择bcbin目录下得dclnmf60.bpl然后加载即可
如上,问题已经解决。不过首先要把曾经安装的组件删除。
在此说声谢谢。
同谢
原来这样啊
菜鸟飘过
我的怎么也不行啊
17 Aug
各位大大 现在急需比较新的能用的破解版VCLSkins 下了五个版本 都或多或少有问题 请不吝赐予则个
邮箱:mpfgogo@gmail.com
三方控件少用
避免一些隐在的问题害你
<
我手上有几个版本 却没有发给你
可以结贴了 你懂的
貌似老妖的网站上有的,www.ccrun.com,帮老妖做回广告,哈。
您别说,还真有:http://www.ccrun.com/view.asp?id=159
<
VCLSkin的作者好像是中国人,如果经济能力允许,建议购买正版。
<
16 Aug
一个多线程程序,结束时提示invalid point operation,停在_FreeMem(Self);一行
我把其中一个线程注释掉就没有这个错误了,但跟踪发现把该线程手动结束、waitfor之后,再delete,都没有问题,最后程序是跑到一些我不了解的VCL库文件里才出错的
codeguard只给出一个错误
Error 00072. 0×310000 (Thread 0×07D0):
Bad parameter: A bad object (0×14D8190) has been passed to the function.
delete(0×014D8190)
Call Tree:
0×32AB16EB(=CC32100MT.DLL:0×01:0B06EB)
0×32AB0A5D(=CC32100MT.DLL:0×01:0AFA5D)
0×32AB1A52(=CC32100MT.DLL:0×01:0B0A52)
0×00697C9D(=mywork2.exe:0×01:296C9D)
0×7C92327A(=ntdll.dll:0×01:00227A)
0×32AB34A3(=CC32100MT.DLL:0×01:0B24A3)
但是看不懂……我已经在设置里打开了行号输出,但是这个报告没有给出任何行号,我只能找到那个0×014D8190的地址,但还是看不懂汇编
嗯,应该就是一个delete()函数的的参数不对,可能这个东西已经被释放掉了,但是在我的代码里找不到这样的函数,可能是VCL库里面的,就是不知道怎么找啊,读不懂CG给出的信息
把cg关掉,程序会提示出错吗?
一样出错,出了没有CG以外别的提示都是一样的,就是_FreeMem(Self)这个地方,可我不会从这个地方跟踪到底哪个东西出了问题
跟踪进vcl代码里面,其实对调试的意义不大了,还是仔细检查看看那句代码出的问题吧
晕,找到了,用一个对象直接对另一个对象赋值,但是这个类里面有new出来的TStringList,赋值时把指针也拷过来了,结果先释放的那个对象把被复制的TStringList释放了,后释放的那个对象就释放不成了……菜鸟啊~~以后再也不敢乱拷东西了
15 Aug
在界面上放了一个Tcxgrid控件,Tcxgrid包含一个Level,Level里面是一个TCxGridTableView,这个table包含a、b、c、d4列,通过a列来分组。请教一下:我知道a列的一个值(我知道某个组的值),我怎么找到这个组所在的行?
谢谢
在Delphi板块也发了:http://topic.csdn.net/u/20100814/17/7e623546-4806-4f8d-a19b-14e81c7c0672.html?67026
3 Aug
我想显示定义了三个80000点的数组。将数组显示给TChart,但是速度很慢,一会就会卡死,我有两个问题,一是怎么能更快的显示出来曲线,2是怎么样才能不卡死机,是我的数组定义太大了么?代码贴一下,希望高手帮忙指点,谢谢了
int i,k,m,n,pTempBuf;double a[80000],b[80000],c[80000];
AnsiString AxS,TempStr1,TempStr2,TempStr3;
int j;
j=RzComboBox1->Value.ToInt();
n=RzComboBox2->Value.ToInt()-1;
// Chart1->Visible=true;
// Chart2->Visible=true;
Chart3->Visible=true;
OpenDialog->Filter = "*.txt(原始数据)|*.txt";
if( OpenDialog->Execute() )
{
// LoadHistory = true;
FormMemo->Memo->Lines->LoadFromFile( OpenDialog->FileName );
Chart3->AutoRepaint = false;
Chart3->Series[0]->Clear();
Chart3->Series[1]->Clear();
Chart3->Series[2]->Clear();
for(i=n*2006+3,pTempBuf=0; i<n*2000+j; i++,pTempBuf++)
//{ if(i<50)
{ if( i=n*2006+3)
i=i+n*2006+3;
AxS = FormMemo->Memo->Lines->Strings[i];
k = AxS.Pos(". ");
//ThisDateTime = StrToDateTime(AxS.SubString(k,19));
TempStr1 = AxS.SubString(k+4,6);
TempStr2 = AxS.SubString(k+15,6);
TempStr3 = AxS.SubString(k+25,6);
a[pTempBuf] = TempStr1.Trim().ToDouble();
b[pTempBuf] = TempStr2.Trim().ToDouble()/10;
c[pTempBuf] = TempStr3.Trim().ToDouble()*10;
Chart3->Series[0]->AddXY(pTempBuf,a[pTempBuf],"",(TColor)clTeeColor);
Chart3->Series[1]->AddXY(pTempBuf,b[pTempBuf],"",(TColor)clTeeColor);
Chart3->Series[2]->AddXY(pTempBuf,c[pTempBuf],"",(TColor)clTeeColor);
// }
Chart3->AutoRepaint = true;
Chart3->Repaint();
}
}
因为需要显示80000个数据
如果一下都显示,不太好办,能否分段显示?就是移动式显示
<
怎么能让Chart快速的显示很多数据呢?大家有什么好的算法么?我的数据存在.txt中。
多线程 一个线程划一部分行不行呢
大数据量的曲线用fastlinechart,不要用linechart
用Fastline Series[3];
在for前加入
Series[0]->BeginUpdate();
Series[1]->BeginUpdate();
Series[2]->BeginUpdate();
在for结束后加入
Series[0]->EndUpdate();
Series[1]->EndUpdate();
Series[2]->EndUpdate();
<
<
<
大家都很厉害啊
点数太多了,还是要想办法减少点数
同时显示80000个点太多了,而且没有必要,主流显示器最多能显示多少像素?
tchart画画本来就是一件很慢的事,帮助里有一节详细说明了实时曲线的性能问题,并列举了大量建议,不妨看看
不过说到底,还是两条最有效,减少点数和升级硬件
用addarray
显示器本身就显示不了那么多的数据量
可以把for循环的范围缩小到TChart能显示的像素大小,这样即可以完美的显示又可以充分利用数据。
具体做法:
要算出i的步长,
int step=80000/TChart->Width;)//这里的TChart->Width应该是具体图表显示区域
for(i=n*2006+3,pTempBuf=0; i<n*2000+j; i++,pTempBuf+=step)
…
3 Aug
我想显示定义了三个80000点的数组。将数组显示给TChart,但是速度很慢,一会就会卡死,我有两个问题,一是怎么能更快的显示出来曲线,2是怎么样才能不卡死机,是我的数组定义太大了么?代码贴一下,希望高手帮忙指点,谢谢了
int i,k,m,n,pTempBuf;double a[80000],b[80000],c[80000];
AnsiString AxS,TempStr1,TempStr2,TempStr3;
int j;
j=RzComboBox1->Value.ToInt();
n=RzComboBox2->Value.ToInt()-1;
// Chart1->Visible=true;
// Chart2->Visible=true;
Chart3->Visible=true;
OpenDialog->Filter = "*.txt(原始数据)|*.txt";
if( OpenDialog->Execute() )
{
// LoadHistory = true;
FormMemo->Memo->Lines->LoadFromFile( OpenDialog->FileName );
Chart3->AutoRepaint = false;
Chart3->Series[0]->Clear();
Chart3->Series[1]->Clear();
Chart3->Series[2]->Clear();
for(i=n*2006+3,pTempBuf=0; i<n*2000+j; i++,pTempBuf++)
//{ if(i<50)
{ if( i=n*2006+3)
i=i+n*2006+3;
AxS = FormMemo->Memo->Lines->Strings[i];
k = AxS.Pos(". ");
//ThisDateTime = StrToDateTime(AxS.SubString(k,19));
TempStr1 = AxS.SubString(k+4,6);
TempStr2 = AxS.SubString(k+15,6);
TempStr3 = AxS.SubString(k+25,6);
a[pTempBuf] = TempStr1.Trim().ToDouble();
b[pTempBuf] = TempStr2.Trim().ToDouble()/10;
c[pTempBuf] = TempStr3.Trim().ToDouble()*10;
Chart3->Series[0]->AddXY(pTempBuf,a[pTempBuf],"",(TColor)clTeeColor);
Chart3->Series[1]->AddXY(pTempBuf,b[pTempBuf],"",(TColor)clTeeColor);
Chart3->Series[2]->AddXY(pTempBuf,c[pTempBuf],"",(TColor)clTeeColor);
// }
Chart3->AutoRepaint = true;
Chart3->Repaint();
}
}
因为需要显示80000个数据
如果一下都显示,不太好办,能否分段显示?就是移动式显示
<
怎么能让Chart快速的显示很多数据呢?大家有什么好的算法么?我的数据存在.txt中。
多线程 一个线程划一部分行不行呢
大数据量的曲线用fastlinechart,不要用linechart
用Fastline Series[3];
在for前加入
Series[0]->BeginUpdate();
Series[1]->BeginUpdate();
Series[2]->BeginUpdate();
在for结束后加入
Series[0]->EndUpdate();
Series[1]->EndUpdate();
Series[2]->EndUpdate();
<
<
<
大家都很厉害啊
点数太多了,还是要想办法减少点数
同时显示80000个点太多了,而且没有必要,主流显示器最多能显示多少像素?
tchart画画本来就是一件很慢的事,帮助里有一节详细说明了实时曲线的性能问题,并列举了大量建议,不妨看看
不过说到底,还是两条最有效,减少点数和升级硬件
用addarray
显示器本身就显示不了那么多的数据量
可以把for循环的范围缩小到TChart能显示的像素大小,这样即可以完美的显示又可以充分利用数据。
具体做法:
要算出i的步长,
int step=80000/TChart->Width;)//这里的TChart->Width应该是具体图表显示区域
for(i=n*2006+3,pTempBuf=0; i<n*2000+j; i++,pTempBuf+=step)
…