100分求bcb2010自定义组件安装方法

时间:2022-06-12 21:01:41
组件是.cpp和.h文件,已经编绎通过,可以生成bpl文件。

现在的问题是怎样把这个自定义的组件安装到IDE的工具面板中,使之可以像TEdit那样可以在设计期放在窗体中。

请告诉详细的方法,分不够可以再加。

谢谢!

28 个解决方案

#1


Component-->Install Packages-->找到bpl文件添加,确定.

如果你的组件写的标准,新建一个工程时,在对应的选项卡下就可以看到有新的组件图标。拖放到窗体上即可。

#2


楼主这个问题我觉得没有那么简单,肯定还有下文 100分求bcb2010自定义组件安装方法

#3


引用 2 楼 zzbinfo 的回复:
楼主这个问题我觉得没有那么简单,肯定还有下文


那是肯定的。这帖子没有20个回复结不了帐的。水源大牛请准备好搜索引擎。

#4


引用 1 楼 ccrun 的回复:
Component-->Install Packages-->找到bpl文件添加,确定.

如果你的组件写的标准,新建一个工程时,在对应的选项卡下就可以看到有新的组件图标。拖放到窗体上即可。

我用Component-->Install Packages-->找到bpl文件加入过,成功,而且在Install Component窗体能看到新加的组件,和dbgo之类的组件是并列的。
但,这似乎毫无意义,根本就没办法使用。
这并不是我要的效果,我是想把组件加入到工具面板中的samples之类的面板中。

#5


引用 4 楼 mmit 的回复:
引用 1 楼 ccrun 的回复:
Component-->Install Packages-->找到bpl文件添加,确定.

如果你的组件写的标准,新建一个工程时,在对应的选项卡下就可以看到有新的组件图标。拖放到窗体上即可。

我用Component-->Install Packages-->找到bpl文件加入过,成功,而且在Install Component窗体能看到新加的组件,和d……


你需要修改你的组件单元中,关于RegisterComponents函数的参数。
至于"这似乎毫无意义,根本就没办法使用。",不清楚你的组件是如何写的,实现了什么功能。

#6


//妖哥请看:

//RichEdit4.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "RichEdit4.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
// ValidCtrCheck is used to assure that the components created do not have
// any pure virtual functions.
//
static inline void ValidCtrCheck(TRichEdit4 *)
{
  new TRichEdit4(NULL);
}
//---------------------------------------------------------------------------
__fastcall TRichEdit4::TRichEdit4(TComponent* Owner)
: TCustomRichEdit(Owner)
{
  hWnd_Richedit41 = NULL;
  WantTabs = true;
}
//---------------------------------------------------------------------------
namespace Richedit41
{
  void __fastcall PACKAGE Register()
  {
    TComponentClass classes[1] = {__classid(TRichEdit4)};
    RegisterComponents(L"Samples", classes, 0);
  }
}
//---------------------------------------------------------------------------
void __fastcall TRichEdit4::CreateParams(Controls::TCreateParams &Params)
{
  hWnd_Richedit41 = LoadLibraryW(L"msftedit.dll");
  if ((int)hWnd_Richedit41 == HINSTANCE_ERROR) hWnd_Richedit41 = 0;
  TCustomRichEdit::CreateParams(Params);
  CreateSubClass(Params, L"RichEdit50W");
}
//---------------------------------------------------------------------------
void   __fastcall   TRichEdit4::CreateWnd(void)
{
 TCustomRichEdit::CreateWnd();
}
//---------------------------------------------------------------------------
void   __fastcall   TRichEdit4::DestroyWnd(void)
{
 TCustomRichEdit::DestroyWnd();
}
//---------------------------------------------------------------------------
__fastcall  TRichEdit4::~TRichEdit4()
{
  if ((int)hWnd_Richedit41 != NULL) FreeLibrary(hWnd_Richedit41);
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------

//RichEdit4.h
#ifndef RichEdit4H
#define RichEdit4H
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Classes.hpp>
#include <ComCtrls.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
//---------------------------------------------------------------------------
class PACKAGE TRichEdit4 : public TCustomRichEdit
{
private:
HINSTANCE hWnd_Richedit41;
protected:
virtual   void   __fastcall   CreateParams(Controls::TCreateParams &Params);
virtual   void   __fastcall   CreateWnd(void);
virtual   void   __fastcall   DestroyWnd(void);
public:
__fastcall TRichEdit4(TComponent* Owner);
__fastcall  ~TRichEdit4();
__published:
};
//---------------------------------------------------------------------------
#endif

#7


另外有件事请妖哥帮忙.
我有时候发错了帖子不能编辑修改,请妖哥给我一个编辑的权限.

#8


引用 7 楼 mmit 的回复:
另外有件事请妖哥帮忙.
我有时候发错了帖子不能编辑修改,请妖哥给我一个编辑的权限.


Sorry, CSDN的帖子和回复,只有对应版块的版主才能编辑,普通用户没有权限,并且版主也没有办法管理用户的权限。

我先帮你看看组件的问题。

#9


本帖最后由 ccrun 于 2010-09-08 18:06:28 编辑
我来了。你在6楼所发的代码,直接编译虽然没有错误,但是生成的bpl加载到IDE以后,会发现Samples下面根本没有RichEdit4这个新组件的图标,原因就是:RichEdit4.cpp单元中,注册组件的部分,名字空间不正确,这里的名字空间应该和你的单元同名才对:
namespace Richedit41
{
  void __fastcall PACKAGE Register()
  {
  TComponentClass classes[1] = {__classid(TRichEdit4)};
  RegisterComponents(L"Samples", classes, 0);
  }
}
将红色部分改成:
namespace RichEdit4
就可以了。

#10


妖哥真神,这种错误都能发现。

现在可以安装组件了,在SAMPLES面板也看得到组件。

但,将此组件置入一个空窗体,编绎链接,则会出错,首先是提示找不到RichEdit4.bpi,然后提示UNIT1.cpp里RichEdit4::什么什么错误。。。。

下面是改好后的源码:
//RichEdit4.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "RichEdit4.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
// ValidCtrCheck is used to assure that the components created do not have
// any pure virtual functions.
//
static inline void ValidCtrCheck(TRichEdit4 *)
{
  new TRichEdit4(NULL);
}
//---------------------------------------------------------------------------
__fastcall TRichEdit4::TRichEdit4(TComponent* Owner)
: TCustomRichEdit(Owner)
{
  hWnd_Richedit4 = NULL;
  WantTabs = true;
}
//---------------------------------------------------------------------------
namespace Richedit4
{
  void __fastcall PACKAGE Register()
  {
  TComponentClass classes[1] = {__classid(TRichEdit4)};
  RegisterComponents(L"Samples", classes, 0);
  }
}
//---------------------------------------------------------------------------
void __fastcall TRichEdit4::CreateParams(Controls::TCreateParams &Params)
{
  hWnd_Richedit4 = LoadLibraryW(L"msftedit.dll");
  if ((int)hWnd_Richedit4 == HINSTANCE_ERROR) hWnd_Richedit4 = 0;
  TCustomRichEdit::CreateParams(Params);
  CreateSubClass(Params, L"RichEdit50W");
}
//---------------------------------------------------------------------------
void __fastcall TRichEdit4::CreateWnd(void)
{
 TCustomRichEdit::CreateWnd();
}
//---------------------------------------------------------------------------
void __fastcall TRichEdit4::DestroyWnd(void)
{
 TCustomRichEdit::DestroyWnd();
}
//---------------------------------------------------------------------------
__fastcall TRichEdit4::~TRichEdit4()
{
  if ((int)hWnd_Richedit4 != NULL) FreeLibrary(hWnd_Richedit4);
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------

//RichEdit4.h
#ifndef RichEdit4H
#define RichEdit4H
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Classes.hpp>
#include <ComCtrls.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
//---------------------------------------------------------------------------
class PACKAGE TRichEdit4 : public TCustomRichEdit
{
private:
HINSTANCE hWnd_Richedit4;
protected:
virtual void __fastcall CreateParams(Controls::TCreateParams &Params);
virtual void __fastcall CreateWnd(void);
virtual void __fastcall DestroyWnd(void);
public:
__fastcall TRichEdit4(TComponent* Owner);
__fastcall ~TRichEdit4();
__published:
};
//---------------------------------------------------------------------------
#endif
//---------------------------------------------------------------------------

麻烦妖哥再帮我看看,问题出在哪。

#11


本帖最后由 ccrun 于 2010-09-08 19:42:10 编辑
假设组件包是aa.bpl
将组件包生成的aa.bpi和aa.lib所在的路径,加入到工程选项的lib目录中:
Project-->Options-->Directories and conditionals右侧的Library path-->找到上述的路径,Add进来,再编译即可。

#12


引用 11 楼 ccrun 的回复:
假设组件包是aa.bpl
将组件包生成的aa.bpi和aa.lib所在的路径,加入到工程选项的lib目录中:
Project-->Options-->Directories and conditionals右侧的Library path-->找到上述的路径,Add进来,再编译即可。


现在的问题是只有aa.bpl,没有aa.bpi和aa.lib

#13


不可能。你好好找找吧。看看工程目录中设置的lib文件输出到哪个目录去了?

#14


引用 13 楼 ccrun 的回复:
不可能。你好好找找吧。看看工程目录中设置的lib文件输出到哪个目录去了?

我就写了一个.cpp和一个.h,然后用Install Component菜单安装的。

#15


建议你安装到一个新的package中,这样会产生独立的对应的bpi和lib文件。默认的话,应该是安装到dclusr.bpl中去了。

#16


引用 15 楼 ccrun 的回复:
建议你安装到一个新的package中,这样会产生独立的对应的bpi和lib文件。默认的话,应该是安装到dclusr.bpl中去了。

选安装到新package,会要求输入package名字,比如,输入RichEdit4,这时就会生成一个RichEdit4.bpl文件。但,还是没有bpi和lib。
我上面所说的错误,就是这种情况。

#17


引用 9 楼 ccrun 的回复:
我来了。你在6楼所发的代码,直接编译虽然没有错误,但是生成的bpl加载到IDE以后,会发现Samples下面根本没有RichEdit4这个新组件的图标,原因就是:RichEdit4.cpp单元中,注册组件的部分,名字空间不正确,这里的名字空间应该和你的单元同名才对:
namespace Richedit41
{
  void __fastcall PACKAGE Register()
  ……

100分求bcb2010自定义组件安装方法
躺着看……

#18


应该还目录设置的问题,我整了一个例子,你去这里下载看看:
http://down.ccrun.com/temp/richedit4.7z

BTW:我个人习惯设置工程目录的最终输出到Bin目录下,Lib目录设置为_Lib

#19


引用 18 楼 ccrun 的回复:
应该还目录设置的问题,我整了一个例子,你去这里下载看看:
http://down.ccrun.com/temp/richedit4.7z

BTW:我个人习惯设置工程目录的最终输出到Bin目录下,Lib目录设置为_Lib


问题在于我不会整包,我只会写.cpp和.h,用若干个cpp和h组成一个大的程序,生成obj连接成exe。

不过,妖哥整的工程我编绎了,通过,也能安装,也能出现在面板上。

但是,之后,新建一个空窗体,放上一个TRichEdit4控件,运行,然后就杯具了。

显示:无法启动此程序,因为计算机中丢失了borlndmm.dat。尝试重新安装该程序以解决此问题。

不知道这是什么原因?

#20


找不到borlndmm相关这个不怕,你用Release模式编译以后就可以了。
记的设置一下release配置中,取消Use Dynamic library前面的对钩。

#21


引用 20 楼 ccrun 的回复:
找不到borlndmm相关这个不怕,你用Release模式编译以后就可以了。
记的设置一下release配置中,取消Use Dynamic library前面的对钩。

我用静态连接,通过了!

程序可以运行了。

但是,这个RichEdit还是不能贴入图片。

何故?

另外,那个找不到borlndmm.dat可能是我系统的原因,因为我刚才发现一个别的软件也突然不能运行了(不是我编的软件),也是报这个错。

是不是我今天折腾这个RichEdit,把系统给折腾坏了?要不要重装windows?

#22


汗,费这么大劲,原来是想在RichEdit中帖图啊。貌似你这个代码没有多大用处的。因为你的组件是从TCustomRichEdit继承的,应该还是原生的版本。而不是2.0以后的RichEdit。
关于支持贴图及其他富文本格式的RichEdit,实现起来挺麻烦的(如果你参考过RichView组件的源码就知道了)

#23


引用 22 楼 ccrun 的回复:
汗,费这么大劲,原来是想在RichEdit中帖图啊。貌似你这个代码没有多大用处的。因为你的组件是从TCustomRichEdit继承的,应该还是原生的版本。而不是2.0以后的RichEdit。
关于支持贴图及其他富文本格式的RichEdit,实现起来挺麻烦的(如果你参考过RichView组件的源码就知道了)

拷,就为了这破事,把我的windows都整残了。

要实现这个功能,除了用第三方控件之外,有其他简单点的办法没?

#24


我以前只简单的加载过RichEdit2.0,没有再深层次的研究过。至于在RichEdit中插入位图,通过richole单元的支持,也是可以实现的。但是并不完美。

如果你愿意花点时间研究一下RichView的实现,可能收获比较多,但是工作量也很大。

#25


引用 24 楼 ccrun 的回复:
我以前只简单的加载过RichEdit2.0,没有再深层次的研究过。至于在RichEdit中插入位图,通过richole单元的支持,也是可以实现的。但是并不完美。

如果你愿意花点时间研究一下RichView的实现,可能收获比较多,但是工作量也很大。


生命有限,就不去做无谓重复了。

还是决定用第三方控件了。

今天一天的折腾,已经让人元气大伤了。

#26


妖哥,突然想到一个问题:

能不能以第三方控件为基础,自制组件?

比如,以RxRichEdit为基础,自制一个RichEdit控件,不就可以实现相应的功能了吗?

是否可行?能不能脱离第三方控件运行、安装?

#27


如果你要从RxRichEdit之类的三方组件继承的话,这就是依赖该组件了。
安装时需要带上原三方组件的bpl包。不合适。

#28


引用 27 楼 ccrun 的回复:
如果你要从RxRichEdit之类的三方组件继承的话,这就是依赖该组件了。
安装时需要带上原三方组件的bpl包。不合适。


确实不合适,谢谢妖哥指教!

#1


Component-->Install Packages-->找到bpl文件添加,确定.

如果你的组件写的标准,新建一个工程时,在对应的选项卡下就可以看到有新的组件图标。拖放到窗体上即可。

#2


楼主这个问题我觉得没有那么简单,肯定还有下文 100分求bcb2010自定义组件安装方法

#3


引用 2 楼 zzbinfo 的回复:
楼主这个问题我觉得没有那么简单,肯定还有下文


那是肯定的。这帖子没有20个回复结不了帐的。水源大牛请准备好搜索引擎。

#4


引用 1 楼 ccrun 的回复:
Component-->Install Packages-->找到bpl文件添加,确定.

如果你的组件写的标准,新建一个工程时,在对应的选项卡下就可以看到有新的组件图标。拖放到窗体上即可。

我用Component-->Install Packages-->找到bpl文件加入过,成功,而且在Install Component窗体能看到新加的组件,和dbgo之类的组件是并列的。
但,这似乎毫无意义,根本就没办法使用。
这并不是我要的效果,我是想把组件加入到工具面板中的samples之类的面板中。

#5


引用 4 楼 mmit 的回复:
引用 1 楼 ccrun 的回复:
Component-->Install Packages-->找到bpl文件添加,确定.

如果你的组件写的标准,新建一个工程时,在对应的选项卡下就可以看到有新的组件图标。拖放到窗体上即可。

我用Component-->Install Packages-->找到bpl文件加入过,成功,而且在Install Component窗体能看到新加的组件,和d……


你需要修改你的组件单元中,关于RegisterComponents函数的参数。
至于"这似乎毫无意义,根本就没办法使用。",不清楚你的组件是如何写的,实现了什么功能。

#6


//妖哥请看:

//RichEdit4.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "RichEdit4.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
// ValidCtrCheck is used to assure that the components created do not have
// any pure virtual functions.
//
static inline void ValidCtrCheck(TRichEdit4 *)
{
  new TRichEdit4(NULL);
}
//---------------------------------------------------------------------------
__fastcall TRichEdit4::TRichEdit4(TComponent* Owner)
: TCustomRichEdit(Owner)
{
  hWnd_Richedit41 = NULL;
  WantTabs = true;
}
//---------------------------------------------------------------------------
namespace Richedit41
{
  void __fastcall PACKAGE Register()
  {
    TComponentClass classes[1] = {__classid(TRichEdit4)};
    RegisterComponents(L"Samples", classes, 0);
  }
}
//---------------------------------------------------------------------------
void __fastcall TRichEdit4::CreateParams(Controls::TCreateParams &Params)
{
  hWnd_Richedit41 = LoadLibraryW(L"msftedit.dll");
  if ((int)hWnd_Richedit41 == HINSTANCE_ERROR) hWnd_Richedit41 = 0;
  TCustomRichEdit::CreateParams(Params);
  CreateSubClass(Params, L"RichEdit50W");
}
//---------------------------------------------------------------------------
void   __fastcall   TRichEdit4::CreateWnd(void)
{
 TCustomRichEdit::CreateWnd();
}
//---------------------------------------------------------------------------
void   __fastcall   TRichEdit4::DestroyWnd(void)
{
 TCustomRichEdit::DestroyWnd();
}
//---------------------------------------------------------------------------
__fastcall  TRichEdit4::~TRichEdit4()
{
  if ((int)hWnd_Richedit41 != NULL) FreeLibrary(hWnd_Richedit41);
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------

//RichEdit4.h
#ifndef RichEdit4H
#define RichEdit4H
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Classes.hpp>
#include <ComCtrls.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
//---------------------------------------------------------------------------
class PACKAGE TRichEdit4 : public TCustomRichEdit
{
private:
HINSTANCE hWnd_Richedit41;
protected:
virtual   void   __fastcall   CreateParams(Controls::TCreateParams &Params);
virtual   void   __fastcall   CreateWnd(void);
virtual   void   __fastcall   DestroyWnd(void);
public:
__fastcall TRichEdit4(TComponent* Owner);
__fastcall  ~TRichEdit4();
__published:
};
//---------------------------------------------------------------------------
#endif

#7


另外有件事请妖哥帮忙.
我有时候发错了帖子不能编辑修改,请妖哥给我一个编辑的权限.

#8


引用 7 楼 mmit 的回复:
另外有件事请妖哥帮忙.
我有时候发错了帖子不能编辑修改,请妖哥给我一个编辑的权限.


Sorry, CSDN的帖子和回复,只有对应版块的版主才能编辑,普通用户没有权限,并且版主也没有办法管理用户的权限。

我先帮你看看组件的问题。

#9


本帖最后由 ccrun 于 2010-09-08 18:06:28 编辑
我来了。你在6楼所发的代码,直接编译虽然没有错误,但是生成的bpl加载到IDE以后,会发现Samples下面根本没有RichEdit4这个新组件的图标,原因就是:RichEdit4.cpp单元中,注册组件的部分,名字空间不正确,这里的名字空间应该和你的单元同名才对:
namespace Richedit41
{
  void __fastcall PACKAGE Register()
  {
  TComponentClass classes[1] = {__classid(TRichEdit4)};
  RegisterComponents(L"Samples", classes, 0);
  }
}
将红色部分改成:
namespace RichEdit4
就可以了。

#10


妖哥真神,这种错误都能发现。

现在可以安装组件了,在SAMPLES面板也看得到组件。

但,将此组件置入一个空窗体,编绎链接,则会出错,首先是提示找不到RichEdit4.bpi,然后提示UNIT1.cpp里RichEdit4::什么什么错误。。。。

下面是改好后的源码:
//RichEdit4.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "RichEdit4.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
// ValidCtrCheck is used to assure that the components created do not have
// any pure virtual functions.
//
static inline void ValidCtrCheck(TRichEdit4 *)
{
  new TRichEdit4(NULL);
}
//---------------------------------------------------------------------------
__fastcall TRichEdit4::TRichEdit4(TComponent* Owner)
: TCustomRichEdit(Owner)
{
  hWnd_Richedit4 = NULL;
  WantTabs = true;
}
//---------------------------------------------------------------------------
namespace Richedit4
{
  void __fastcall PACKAGE Register()
  {
  TComponentClass classes[1] = {__classid(TRichEdit4)};
  RegisterComponents(L"Samples", classes, 0);
  }
}
//---------------------------------------------------------------------------
void __fastcall TRichEdit4::CreateParams(Controls::TCreateParams &Params)
{
  hWnd_Richedit4 = LoadLibraryW(L"msftedit.dll");
  if ((int)hWnd_Richedit4 == HINSTANCE_ERROR) hWnd_Richedit4 = 0;
  TCustomRichEdit::CreateParams(Params);
  CreateSubClass(Params, L"RichEdit50W");
}
//---------------------------------------------------------------------------
void __fastcall TRichEdit4::CreateWnd(void)
{
 TCustomRichEdit::CreateWnd();
}
//---------------------------------------------------------------------------
void __fastcall TRichEdit4::DestroyWnd(void)
{
 TCustomRichEdit::DestroyWnd();
}
//---------------------------------------------------------------------------
__fastcall TRichEdit4::~TRichEdit4()
{
  if ((int)hWnd_Richedit4 != NULL) FreeLibrary(hWnd_Richedit4);
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------

//RichEdit4.h
#ifndef RichEdit4H
#define RichEdit4H
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Classes.hpp>
#include <ComCtrls.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
//---------------------------------------------------------------------------
class PACKAGE TRichEdit4 : public TCustomRichEdit
{
private:
HINSTANCE hWnd_Richedit4;
protected:
virtual void __fastcall CreateParams(Controls::TCreateParams &Params);
virtual void __fastcall CreateWnd(void);
virtual void __fastcall DestroyWnd(void);
public:
__fastcall TRichEdit4(TComponent* Owner);
__fastcall ~TRichEdit4();
__published:
};
//---------------------------------------------------------------------------
#endif
//---------------------------------------------------------------------------

麻烦妖哥再帮我看看,问题出在哪。

#11


本帖最后由 ccrun 于 2010-09-08 19:42:10 编辑
假设组件包是aa.bpl
将组件包生成的aa.bpi和aa.lib所在的路径,加入到工程选项的lib目录中:
Project-->Options-->Directories and conditionals右侧的Library path-->找到上述的路径,Add进来,再编译即可。

#12


引用 11 楼 ccrun 的回复:
假设组件包是aa.bpl
将组件包生成的aa.bpi和aa.lib所在的路径,加入到工程选项的lib目录中:
Project-->Options-->Directories and conditionals右侧的Library path-->找到上述的路径,Add进来,再编译即可。


现在的问题是只有aa.bpl,没有aa.bpi和aa.lib

#13


不可能。你好好找找吧。看看工程目录中设置的lib文件输出到哪个目录去了?

#14


引用 13 楼 ccrun 的回复:
不可能。你好好找找吧。看看工程目录中设置的lib文件输出到哪个目录去了?

我就写了一个.cpp和一个.h,然后用Install Component菜单安装的。

#15


建议你安装到一个新的package中,这样会产生独立的对应的bpi和lib文件。默认的话,应该是安装到dclusr.bpl中去了。

#16


引用 15 楼 ccrun 的回复:
建议你安装到一个新的package中,这样会产生独立的对应的bpi和lib文件。默认的话,应该是安装到dclusr.bpl中去了。

选安装到新package,会要求输入package名字,比如,输入RichEdit4,这时就会生成一个RichEdit4.bpl文件。但,还是没有bpi和lib。
我上面所说的错误,就是这种情况。

#17


引用 9 楼 ccrun 的回复:
我来了。你在6楼所发的代码,直接编译虽然没有错误,但是生成的bpl加载到IDE以后,会发现Samples下面根本没有RichEdit4这个新组件的图标,原因就是:RichEdit4.cpp单元中,注册组件的部分,名字空间不正确,这里的名字空间应该和你的单元同名才对:
namespace Richedit41
{
  void __fastcall PACKAGE Register()
  ……

100分求bcb2010自定义组件安装方法
躺着看……

#18


应该还目录设置的问题,我整了一个例子,你去这里下载看看:
http://down.ccrun.com/temp/richedit4.7z

BTW:我个人习惯设置工程目录的最终输出到Bin目录下,Lib目录设置为_Lib

#19


引用 18 楼 ccrun 的回复:
应该还目录设置的问题,我整了一个例子,你去这里下载看看:
http://down.ccrun.com/temp/richedit4.7z

BTW:我个人习惯设置工程目录的最终输出到Bin目录下,Lib目录设置为_Lib


问题在于我不会整包,我只会写.cpp和.h,用若干个cpp和h组成一个大的程序,生成obj连接成exe。

不过,妖哥整的工程我编绎了,通过,也能安装,也能出现在面板上。

但是,之后,新建一个空窗体,放上一个TRichEdit4控件,运行,然后就杯具了。

显示:无法启动此程序,因为计算机中丢失了borlndmm.dat。尝试重新安装该程序以解决此问题。

不知道这是什么原因?

#20


找不到borlndmm相关这个不怕,你用Release模式编译以后就可以了。
记的设置一下release配置中,取消Use Dynamic library前面的对钩。

#21


引用 20 楼 ccrun 的回复:
找不到borlndmm相关这个不怕,你用Release模式编译以后就可以了。
记的设置一下release配置中,取消Use Dynamic library前面的对钩。

我用静态连接,通过了!

程序可以运行了。

但是,这个RichEdit还是不能贴入图片。

何故?

另外,那个找不到borlndmm.dat可能是我系统的原因,因为我刚才发现一个别的软件也突然不能运行了(不是我编的软件),也是报这个错。

是不是我今天折腾这个RichEdit,把系统给折腾坏了?要不要重装windows?

#22


汗,费这么大劲,原来是想在RichEdit中帖图啊。貌似你这个代码没有多大用处的。因为你的组件是从TCustomRichEdit继承的,应该还是原生的版本。而不是2.0以后的RichEdit。
关于支持贴图及其他富文本格式的RichEdit,实现起来挺麻烦的(如果你参考过RichView组件的源码就知道了)

#23


引用 22 楼 ccrun 的回复:
汗,费这么大劲,原来是想在RichEdit中帖图啊。貌似你这个代码没有多大用处的。因为你的组件是从TCustomRichEdit继承的,应该还是原生的版本。而不是2.0以后的RichEdit。
关于支持贴图及其他富文本格式的RichEdit,实现起来挺麻烦的(如果你参考过RichView组件的源码就知道了)

拷,就为了这破事,把我的windows都整残了。

要实现这个功能,除了用第三方控件之外,有其他简单点的办法没?

#24


我以前只简单的加载过RichEdit2.0,没有再深层次的研究过。至于在RichEdit中插入位图,通过richole单元的支持,也是可以实现的。但是并不完美。

如果你愿意花点时间研究一下RichView的实现,可能收获比较多,但是工作量也很大。

#25


引用 24 楼 ccrun 的回复:
我以前只简单的加载过RichEdit2.0,没有再深层次的研究过。至于在RichEdit中插入位图,通过richole单元的支持,也是可以实现的。但是并不完美。

如果你愿意花点时间研究一下RichView的实现,可能收获比较多,但是工作量也很大。


生命有限,就不去做无谓重复了。

还是决定用第三方控件了。

今天一天的折腾,已经让人元气大伤了。

#26


妖哥,突然想到一个问题:

能不能以第三方控件为基础,自制组件?

比如,以RxRichEdit为基础,自制一个RichEdit控件,不就可以实现相应的功能了吗?

是否可行?能不能脱离第三方控件运行、安装?

#27


如果你要从RxRichEdit之类的三方组件继承的话,这就是依赖该组件了。
安装时需要带上原三方组件的bpl包。不合适。

#28


引用 27 楼 ccrun 的回复:
如果你要从RxRichEdit之类的三方组件继承的话,这就是依赖该组件了。
安装时需要带上原三方组件的bpl包。不合适。


确实不合适,谢谢妖哥指教!