CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  VCL组件使用和开发

自编可视化组件,怎么在自定义的属性里显示个按钮,点击后弹出个对话框?

楼主zzhong2()2005-11-18 11:36:09 在 C++ Builder / VCL组件使用和开发 提问

自编可视化组件,怎么在自定义的属性里显示个按钮,点击后弹出个对话框?就像TTreeView组件里的Items属性一样,在设计期,在Object   Inspector里一点Items属性,右边出个按钮,一点弹出个TreeView   Items   Editor对话框可在里面添加节点,多谢各位大侠回贴 问题点数:100、回复次数:5Top

1 楼constantine(飘遥的安吉儿)回复于 2005-11-18 12:12:49 得分 50

http://www.programfan.com/article/showarticle.asp?id=2566  
  这个你看看是不是对你有用delphi的Top

2 楼constantine(飘遥的安吉儿)回复于 2005-11-18 12:24:47 得分 0

实际上你的情况应该开发多一个设计期包,把属性编辑器放在里面Top

3 楼cczlp(不惑)回复于 2005-11-18 13:53:30 得分 50

提供一个简单的例子:  
  MyEdit.h  
  ====  
  //---------------------------------------------------------------------------  
   
  #ifndef   MyEditH  
  #define   MyEditH  
  //---------------------------------------------------------------------------  
  #include   <SysUtils.hpp>  
  #include   <Classes.hpp>  
  #include   <Controls.hpp>  
  #include   <StdCtrls.hpp>  
   
  #include   "DesignEditors.hpp"  
  //---------------------------------------------------------------------------  
  class   TMyText   :   public   TPersistent  
  {  
  private:  
        AnsiString   FMyText;  
  __published:  
  __property   AnsiString   MyText   =   {read   =   FMyText,   write   =   FMyText};  
  };  
  //---------------------------------------------------------------------------  
  class   PACKAGE   TMyEditor   :   public   TPropertyEditor  
  {  
          protected:  
          TPropertyAttributes   __fastcall   GetAttributes(void);  
          void   __fastcall   Edit(void);  
  public:  
          __fastcall   TMyEditor(const   _di_IDesigner   ADesigner,  
          int   APropCount);  
      //     __fastcall   ~TMyEditor();  
  };  
  //---------------------------------------------------------------------------  
   
  class   PACKAGE   TMyEdit   :   public   TCustomEdit  
  {  
  private:  
  TMyText   *FNewText;  
  protected:  
  public:  
  __fastcall   TMyEdit(TComponent*   Owner);  
          __fastcall   ~TMyEdit();  
  __published:  
  __property   TMyText   *NewText   =   {read   =   FNewText,   write   =   FNewText};  
  };  
  //---------------------------------------------------------------------------  
  #endif  
   
   
   
  Top

4 楼cczlp(不惑)回复于 2005-11-18 13:53:46 得分 0

MyEdit.cpp  
  ===========  
  //---------------------------------------------------------------------------  
  //编译时在Requires中添加designdgm.bpi,   designide.bpi  
  #include   <vcl.h>  
   
  #pragma   hdrstop  
   
  #include   "MyEdit.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(TMyEdit   *)  
  {  
  new   TMyEdit(NULL);  
  }  
  //---------------------------------------------------------------------------  
  __fastcall   TMyEdit::TMyEdit(TComponent*   Owner)  
  :   TCustomEdit(Owner)  
  {  
  NewText   =   new   TMyText;  
  }  
  //---------------------------------------------------------------------------  
  __fastcall   TMyEdit::   ~TMyEdit()  
  {  
  delete   NewText;  
  }  
  //---------------------------------------------------------------------------  
  namespace   Myedit  
  {  
  void   __fastcall   PACKAGE   Register()  
  {  
  TComponentClass   classes[1]   =   {__classid(TMyEdit)};  
  RegisterComponents("Standard",   classes,   0);  
                  TTypeInfo   tk;  
                  tk.Kind   =   tkString;  
                  tk.Name   =   "AnsiString";  
                  RegisterPropertyEditor(__typeinfo(TMyText),   __classid(TMyEdit),  
                  "NewText",   __classid(TMyEditor));  
  }  
  }  
  //---------------------------------------------------------------------------  
  __fastcall   TMyEditor::TMyEditor(const   _di_IDesigner   ADesigner,   int   APropCount)  
                  :   TPropertyEditor(ADesigner,   APropCount)  
  {  
  }  
  //---------------------------------------------------------------------------  
  //具有...  
  TPropertyAttributes   __fastcall   TMyEditor::GetAttributes(void)  
  {  
  return   TPropertyAttributes()<<paDialog;  
  }  
  //---------------------------------------------------------------------------  
  //显示对话框  
  void   __fastcall   TMyEditor::Edit(void)  
  {  
        ((TMyEdit   *)GetComponent(0))->NewText->MyText   =  
              InputBox("Input   text",   "NewText",   ((TMyEdit   *)GetComponent(0))->NewText->MyText);  
  }  
  //---------------------------------------------------------------------------  
  Top

5 楼zzhong2()回复于 2005-12-04 12:14:12 得分 0

多谢楼上两位大侠,结贴晚了点,海涵海涵Top

相关问题

  • 如何自定义一个对话框,然后在Applet中弹出该对话框(模式)
  • 组件属性弹出对话框问题
  • 自定义组件
  • 如何自定义文件对话框
  • 怎样自定义PropertySheet对话框
  • 如何关闭自定义对话框?
  • 弹出对话框
  • 对话框弹出
  • 弹出对话框
  • ........弹出对话框

关键词

  • 属性
  • 组件
  • tmyedit
  • tmytext
  • fastcall
  • 对话框
  • newtext
  • 弹出
  • fmytext
  • fnewtext

得分解答快速导航

  • 帖主:zzhong2
  • constantine
  • cczlp

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo