找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 4615|回复: 4

【VB】【开源】AG ADV-Edit

[复制链接]

85

主题

175

回帖

3990

积分

用户组: 超级版主

No. 418

UID
418
精华
14
威望
53 点
宅币
1974 个
贡献
1582 次
宅之契约
0 份
在线时间
252 小时
注册时间
2014-8-9
发表于 2015-12-17 23:26:55 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
一个开源文本编辑控件。
相应设置过后,按下[F2]就可以显示Intelisence:
0.jpg
当然是可以定制颜色的:
A.JPG
拥有NP++的判断磁盘文件是否已经修改的实用功能,
而且经过了特别处理,不会增加资源占用:
4.JPG
如果自定义了程序语言,可以添加删除注释:
2.jpg
其他功能形同Notepad:
3.jpg
1.JPG
不足之处:加载文本速度略显慢。。。。
遗憾,遗憾,遗憾......没有语法高亮。
着仅仅是个Demo,大家可以一起加入开发。

内部附带一个用PB开发的IW控件,用于显示Intelisence
以下是IW控件的开发文档:
  1. AG Computing IntelliSence Dialog Window Library Specification
  2. 《AGC代码提示控件 - 使用说明》
  3. 零、导读:
  4.         必读:一。
  5.         有win32经验的开发者:四(1)。
  6.         普通开发者:四(1)、四(3)。
  7.         想要全部掌握的开发者:四(1)、四(2)、四(3)、五。
  8.         针对使用者:四(2)。
  9.         闲来无事者:六。
  10.         看来你是对我有意思:七。
  11. 一、声明:
  12.         本程序发行使用遵循《AGC自由软件授权协议》。若您不同意该协议,请不要使用本程序。
  13. 二、基本信息:
  14.         作者:cyycoish
  15.         网站:[url]http://www.0xaa55.com[/url]
  16.         当前版本:1.0.0 (Beta) 。日期:2015年12月17日19:13
  17.         平台:win32。
  18.         编译:PowerBasic(R) for Windows(R) 10.
  19. 三、介绍:
  20.         "AG Computing IntelliSence Dialog Window Library",简称“IW”,提供一系列API用来显示IntelliSence窗口,供代码编辑器一类的软件使用。
  21. 四、详细信息:

  22. (1) 开发者篇:
  23. 注意:以下导出函数为VisualBasic 6.0的声明方式

  24. 导出函数:
  25. Declare Function IWShow Lib "IW.DLL" (ByVal hParent As Long, ByVal hControl As Long, ByVal X As Long, ByVal Y As Long, ByVal w As Long, ByVal h As Long) As Long
  26. 作用:显示IW窗口。
  27. 参数说明:
  28. 参数     用途
  29. hParent  IW的父窗体句柄,该父窗体包含hControl句柄所指的控件(即编辑器控件)和IW控件窗体的父窗体。  
  30. hControl IW控件作用的文本编辑控件句柄,如Win32下的Edit/TextBox控件的句柄。
  31. X        设置IW控件显示的左上角X坐标(Left),该坐标相对于hParent所指的父窗体左上角:坐标(0,0)处。
  32. Y        设置IW控件显示的左上角Y坐标(Top),该坐标相对于hParent所指的父窗体左上角:坐标(0,0)处。
  33. w        设置IW控件显示宽度(Width)。
  34. h        设置IW控件显示高度(Height)。
  35. 返回值:IWSHow函数返回IWShow的窗体回调函数返回值。
  36. 其他:所有窗体大小参数均以像素为单位。其中X,Y属性在IWShow函数执行完毕后可以使用IWMove过程修改。w,h属性可以使用IWSize过程修改。IWShow与IWMove必须使用在IW窗体关闭/销毁以前。若IW窗体未被关闭(IWGetHwnd函数返回值不为0),则执行IWShow函数会首先调用IWClose函数关闭/销毁IW窗体。

  37. 导出函数:
  38. Declare Function IWGetHwnd Lib "IW.DLL" () As Long
  39. 作用:返回IW控件窗体句柄。
  40. 其他:若IW窗体被关闭,则返回0。

  41. 导出函数:
  42. Declare Function IWClose Lib "IW.DLL" () As Long
  43. 作用:正常关闭/销毁IW窗口。
  44. 返回值:IWSHow函数返回IWShow的窗体回调函数返回值。
  45. 其他:使用IWShow函数创建IW窗体200毫秒以内使用该函数无效。要在IW窗体创建后200毫秒以内销毁IW窗口,请使用IWDestroyImmediately函数。这个原因主要是因为IW回调函数处理文本编辑控件消息延迟所致。

  46. 导出函数:
  47. Declare Function IWDestroyImmediately Lib "IW.DLL" () As Long
  48. 作用:强制关闭/销毁IW窗口。
  49. 返回值:IWSHow函数返回IWShow的窗体回调函数返回值。
  50. 其他:通常情况下使用IWClose函数而不要使用IWDestroyImmediately函数关闭窗体。因为使用IWDestroyImmediately函数会导致IW窗体闪退。(例如使用IWClose函数同时发送了两次间隔时间很短的WM_KEYDOWN消息,而父文本编辑器控件未处理第二个WM_KEYDOWN消息而是在IW窗体被关闭前将消息投递给了IW窗体,IW窗体将会出现闪退现象。)IWClose函数保证了IW窗体在创建200毫秒以后才能被销毁。若想立即关闭IW窗体(在使用IWShow函数后200毫秒以内关闭窗体),请使用IWDestroyImmediately函数。

  51. 导出函数:
  52. Declare Sub IWMove Lib "IW.DLL" (ByRef X As Long, ByRef Y As Long, ByVal bSetupFlag As Boolean)
  53. 作用:移动IW窗口或者获取IW窗口的位置,但是不会改变IW窗口的大小。
  54. 参数说明:
  55. 参数 用途
  56. X    获取/设置IW窗口的横坐标(Left属性)。
  57. Y    获取/设置IW窗口的纵坐标(Top属性)。
  58. bSetupFlag 这个布尔值如果为真,将会改变IW窗体的位置到X,Y参数所指的地方。为假则会将IW窗体的位置按引用传递给X,Y变量,而不改变IW窗体位置。
  59. 其他:X,Y参数均以父窗体(IWShow的hParent句柄所指的窗体)的左上角(0,0)处为起点。其单位均为像素。

  60. 导出函数:
  61. Declare Sub IWSize Lib "IW.DLL" (ByRef w As Long, ByRef h As Long, ByVal bSetupFlag As Boolean)
  62. 作用:改变IW窗体大小,而“不”改变窗体位置。
  63. 参数说明:
  64. 参数 用途
  65. w    获取/设置IW窗口的宽度(Width属性)。
  66. h    获取/设置IW窗口的高度(Height属性)。
  67. bSetupFlag 这个布尔值如果为真,将会改变IW窗体的大小为w,h参数所指的大小。为假则会将IW窗体的大小按引用传递给w,h变量,而不改变IW窗体大小。
  68. 其他:w,h参数单位均为像素。

  69. 导出函数:
  70. Declare Sub IWClear Lib "IW.DLL" ()
  71. 作用:清除IW窗体内列表显示的所有内容。
  72. 其他:销毁IW窗体后,IW列表框显示内容也会被清除。下一次调用IWShow函数,先前的列表框内容不会出现了。

  73. 导出函数:
  74. Declare Sub IWAdd Lib "IW.DLL" (ByVal szText As String, ByVal Proprety As Integer)
  75. 作用:按顺序为IW列表框添加内容。
  76. 参数说明:
  77. 参数     用途
  78. szText   用于显示在列表框行项上的内容。该参数为一个以0结尾的ANSI字符串。
  79. Proprety 在每行文字前显示一个16*16像素大小的图标。取值范围及图标类型如下:
  80.          0:不显示图标(或者说显示一个空白的,露出背景(白色)的16*16像素大小图标)。
  81.                  1:显示一个黑色的问号“?”。
  82.                  2:显示一个“属性”图标(一只左手握着一张卡片)。
  83.                  3:显示一个“方法”图标(一个绿色的向右移动的方块的静态图)。
  84.                  4:显示一个“事件”图标(一个黄色的闪电)。
  85.                  5:一个立体的蓝色方块。(用来表示“数据类型关键字”)。
  86.                  6:一个立体的红色方块。
  87.                  7:一个蓝色三棱锥。(用来表示“流程控制关键字”)。
  88.                  8:一个红色三棱锥。
  89.                  9:一个蓝色球体。
  90.                 10:一个红色球体。(可以用来表示C语言预处理语句等。)
  91.                 11:一个黑色的大写拉丁字母“A”。
  92.                 12:一个黑色的简体中文汉字“字”。
  93.                 13-其他整数:相当于0(不显示图标)。
  94. 其他:IWAdd函数会在IW窗体出现后累加显示IW列表框中的内容。若想清除列表框中所有内容,请使用IWClear函数,或者调用IWShow重新显示IW窗口。不能删除IW列表框中指定的某一行内容。因为————我没写啊。。

  95. 导出函数:
  96. Declare Sub IW_Internal_Pre_Option_1 Lib "IW.DLL" (ByVal key As Boolean)
  97. 作用:使用“特殊方式”处理IW按键事件。即不使用IW列表框的常规消息处理函数处理IW窗体/IW列表框接收的“某些”按键消息。
  98. 参数说明:
  99. 参数 用途
  100. key  如果key为真,则表明开启该功能。该函数要在IWShow使用之前使用方可有效。而且key的状态不会因为IW窗体销毁而改变。实际上key的状态会在IW.DLL调用结束后销毁。下次调用又会变成默认的False。
  101. 其他:该函数的存在是为了弥补IW消息框消息处理函数在某些时候不能接收到WM_KEYDOWN消息wParam为VK_UP等值的“无奈手段”。因为在测试某些情况时,IW列表框接受不到VK_UP、VK_DOWN等。这会导致IW不能选择列表项,或者无法正常关闭窗体。结果就是VB6的程序崩溃(在调试时连着IDE一起挂[你不设置VB6IDE的运行前保存,所有的代码都没了,当场哭晕。]因为VB6IDE有着“先天心脏病”——DLL挂了,IDE跟着一起“殉情”(非常麻烦)请看本说明附注。)。实际上IW_Internal_Pre_Option_1打开了全局键盘鼠标消息处理。从而保证能够不漏消息,当然如果你钩了R3/R0函数除外。这没什么神秘的,这里不装逼————其实在定时器中使用了GetAsyncKeyState函数接获消息。大家在能使用正常消息处理函数时就不要开启这个Option。毕竟是IW——“内部”——预先——选项——1.

  102. SUB IWSetFont ALIAS "IWSetFont" (BYREF lpNewFont AS LOGFONT) EXPORT   
  103. 作用:设置IW列表框的字体。
  104. 参数说明:
  105. 参数      用途
  106. lpNewFont 一个指向LOGFONT结构体的32位指针。
  107. 其他:关于该函数使用,我就偷懒了,会开发Win32的人都会使用,写了一段C代码,大家凑合着看(cyy太懒):
  108.         // 设置字体参数
  109.         LOGFONT LogFont;
  110.         memset(&LogFont, 0, sizeof(LOGFONT));
  111.         lstrcpy(LogFont.lfFaceName, "Courier New");
  112.         LogFont.lfWeight = 400;
  113.         LogFont.lfHeight = -44;
  114.         LogFont.lfCharSet = 134;
  115.         LogFont.lfOutPrecision = 3;
  116.         LogFont.lfClipPrecision = 2;
  117.         LogFont.lfOrientation = 45;
  118.         LogFont.lfQuality = 1;
  119.         LogFont.lfPitchAndFamily = 2;
  120.         // 创建字体
  121.         HFONT hFont = CreateFontIndirect(&LogFont);
  122.         // 取得控件句柄
  123.         HWND hWndStatic = GetDlgItem(hDlg, IDC_STATIC_INFO);
  124.         // 设置控件字体
  125.         ::SendMessage(hWndStatic, WM_SETFONT, (WPARAM)hFont, 0);
  126. 注意!!使用IWShow函数时候已经将字体设置为hControl句柄指向的编辑器控件(就是IW的父编辑器控件)一样的字体了。
  127.        
  128. 反正我尽力保证低故障率,所以出现了诸如IW_Internal_Pre_Option_1,IWDestroyImmediately等函数,这是cyy本人水平低下的表现。大家请勿过多吐槽(本人小心脏受不了)。

  129. (2) 使用者篇:
  130. 这个IW控件和其他的智能感知提示框没啥不一样,注意的是个别不同之处:1.选中列表项后按下空格键,会覆盖文本编辑控件上的输入项,然后在输入项后+空格(和Visual C++编辑器不一致)。2.选中列表项后按下回车键,会覆盖文本编辑控件上的输入项,但是不会添加回车。(和VisualC++编辑器“一致”,但是和VisualBasic编辑器不一致。)3.在IW窗体出现时按下左/右键头按键,会关闭IW窗口(和VisualBasic编辑器不一致。)

  131. (3)其他注意事项:
  132. IW控件仅仅提供基本信息显示,诸如窗体显示大小,位置等等,需要自己计算哒(具体在AGC的Edit工程中有例子的[下载地址[url]www.0xaa55.com[/url]自己搜一下VB TextEditor控件])。

  133. 五、附注
  134. 开发win32标准dll供VB6调用注意事项:
  135. 0.千万不要在DLL中使用C的exit();函数。用几次崩几次,蹦嘚你没脾气。保证正常退出。即执行LIBMAIN的XXX_DETACH;
  136. 1.PB开发,勿在任何回调函数中使用MsgBox“很可能”会挂掉(不是挂起)进程。
  137. 2.单线程勿用Sleep();卡得飞起。
  138. 3.VB6数组传地址,VB6字符串传首地址。VB6传C注意字符串格式编码问题。C的DLL字符串传VB6同样注意编码。必要时自己编写ANSI 2 UTF8等(VB6没有,VBdNet就强)。但是充分利用VB6的StrConv。
  139. 4.注意啊!各位,一定要在VB6中的[“工具”菜单]-[选项]-[环境]-[程序启动时]-选择[保存改变]或者[提示保存改变]不然代码丢得不要不要的。否则自己勤按Ctrl+S咯。

  140. 六、杂项
  141. 1) 关于开源:今后Alpha版不会开源,RL版(Realse)开源。
  142. 2) cyy信奉少些注视多写标识符。宁愿去写一个Dim intLocalCounterRangeFrom0To10 As Integer 然后写:For intLocalCounterRangeFrom0To10 = 0 To 10: intArray(intLocalCounterRangeFrom0To10) = Value我也不写诸如“Fuck the array inject Value into it.”等注释。

  143. 七、其他声明。
  144. 本软件包括程序IW.DLL及其文档版权归cyycoish所有。
  145. 本人技术水平有限,文档难免出错,请见谅。
  146. 联系方式:cyycoish@热邮.com(hotmail)

  147. cyycoish
  148. 2015年12月17日21:52
复制代码


这些编辑器组件不定期更新,请期待后续版本。
下载地址: Edit-RL.exe (334.97 KB, 下载次数: 12)

Ps:12个图标画得好累!

本帖被以下淘专辑推荐:

In the beginning I was not the best.
And the world was also not the best.
But I still know that I am who I am.
Because I think that it is good.
I have been working hard.
I have been keeping growth with the world.
And it was so.
回复

使用道具 举报

85

主题

175

回帖

3990

积分

用户组: 超级版主

No. 418

UID
418
精华
14
威望
53 点
宅币
1974 个
贡献
1582 次
宅之契约
0 份
在线时间
252 小时
注册时间
2014-8-9
 楼主| 发表于 2015-12-17 23:35:11 | 显示全部楼层
2楼来at重要人物:
@0xAA55
@美俪女神
In the beginning I was not the best.
And the world was also not the best.
But I still know that I am who I am.
Because I think that it is good.
I have been working hard.
I have been keeping growth with the world.
And it was so.
回复 赞! 靠!

使用道具 举报

1111

主题

1651

回帖

7万

积分

用户组: 管理员

一只技术宅

UID
1
精华
244
威望
743 点
宅币
24237 个
贡献
46222 次
宅之契约
0 份
在线时间
2297 小时
注册时间
2014-1-26
发表于 2015-12-19 22:55:56 | 显示全部楼层
你这个用菜单栏显示统计的代码行数和列数,这创意不错!
另外,代码自动完成,我习惯了VB的Alt+→,而不是F2。我觉得Alt + →是个不错的组合。我的VC6就是这么设置的(虽然现在我已经抛弃了它)
回复 赞! 靠!

使用道具 举报

1

主题

60

回帖

333

积分

用户组: 中·技术宅

UID
6035
精华
0
威望
2 点
宅币
266 个
贡献
0 次
宅之契约
0 份
在线时间
29 小时
注册时间
2020-7-7
发表于 2020-7-8 10:40:59 | 显示全部楼层
本帖最后由 china_shy_wzb 于 2020-7-20 14:03 编辑

怎样画图标,一个好的应用
回复 赞! 靠!

使用道具 举报

0

主题

48

回帖

69

积分

用户组: 小·技术宅

UID
8099
精华
0
威望
2 点
宅币
17 个
贡献
0 次
宅之契约
0 份
在线时间
9 小时
注册时间
2022-10-22
发表于 2022-11-23 22:08:09 | 显示全部楼层
膜拜大神代码
回复 赞! 靠!

使用道具 举报

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-4-20 21:05 , Processed in 0.046047 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表