【转】实现多行toolTips的类模块
这里有一个类模块,就是用来实现多行 toolTips 的.
Option Explicit
'============================================================='
' Module Name : mdlAPI
' Written By : Gordon Robinson
' Date : 08/05/2000
' Comments :
'
'============================================================='
'============================================================='
' Constants
'============================================================='
Private Const TTS_ALWAYSTIP = &H1
Private Const TTS_NOPREFIX = &H2
Private Const CW_USEDEFAULT = &H80000000
Private Const WS_POPUP = &H80000000
Private Const WM_USER = &H400
Private Const TTM_ADDTOOL = WM_USER + 4
Private Const TTM_SETMAXTIPWIDTH = WM_USER + 24
Private Const TTM_SETDELAYTIME = WM_USER + 3
Private Const TTM_GETDELAYTIME = WM_USER + 21
Private Const TTDT_AUTOMATIC = 0
Private Const TTDT_RESHOW = 1
Private Const TTDT_AUTOPOP = 2
Private Const TTDT_INITIAL = 3
Private Const TTF_SUBCLASS = &H10
Private Const TTF_IDISHWND = &H1
Private Const TTF_CENTERTIP = &H2
'============================================================='
' Types
'============================================================='
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Type TOOLINFO
cbSize As Long
uFlags As Long
hwnd As Long
uId As Long
cRect As RECT
hinst As Long
lpszText As String
End Type
'============================================================='
' API Functions
'============================================================='
Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" _
(ByVal dwExStyle As Long, _
ByVal lpClassName As String, _
ByVal lpWindowName As String, _
ByVal dwStyle As Long, _
ByVal x As Long, _
ByVal y As Long, _
ByVal nWidth As Long, _
ByVal nHeight As Long, _
ByVal hWndParent As Long, _
ByVal hMenu As Long, _
ByVal hInstance As Long, _
lpParam As Any) _
As Long
Private Declare Function DestroyWindow Lib "user32" _
(ByVal hwnd As Long) _
As Long
Private Declare Function GetClientRect Lib "user32" _
(ByVal hwnd As Long, _
lpRect As RECT) _
As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any) _
As Long
Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) _
As Long
'====================================================================='
' Member Variables
'====================================================================='
Private m_lngHwnd As Long
Private m_lngMaxWidth As Long
'====================================================================='
' Properties
'====================================================================='
Public Property Get MaxWidth() As Long
MaxWidth = m_lngMaxWidth
End Property
Public Property Let MaxWidth(lngMaxWidth As Long)
m_lngMaxWidth = lngMaxWidth
SendMessageLong m_lngHwnd, TTM_SETMAXTIPWIDTH, 0, m_lngMaxWidth
End Property
Public Property Get VisibleTime() As Long
VisibleTime = SendMessageLong(m_lngHwnd, TTM_GETDELAYTIME, TTDT_AUTOPOP, 0)
End Property
Public Property Let VisibleTime(lngTime As Long)
If lngTime > 32767 Then lngTime = 32767
If lngTime < 0 Then lngTime = 0
SendMessageLong m_lngHwnd, TTM_SETDELAYTIME, TTDT_AUTOPOP, lngTime
End Property
Public Property Get DelayTime() As Long
DelayTime = SendMessageLong(m_lngHwnd, TTM_GETDELAYTIME, TTDT_INITIAL, 0)
End Property
Public Property Let DelayTime(lngTime As Long)
If lngTime > 32767 Then lngTime = 32767
If lngTime < 0 Then lngTime = 0
SendMessageLong m_lngHwnd, TTM_SETDELAYTIME, TTDT_INITIAL, lngTime
End Property
'====================================================================='
' Methods
'====================================================================='
Public Sub Create(lngHwndParent As Long)
m_lngHwnd = CreateWindowEx(0, _
"tooltips_class32", _
0, _
TTS_NOPREFIX Or TTS_ALWAYSTIP, _
CW_USEDEFAULT, _
CW_USEDEFAULT, _
CW_USEDEFAULT, _
CW_USEDEFAULT, _
lngHwndParent, _
0, _
App.hInstance, _
0)
SendMessageLong m_lngHwnd, TTM_SETMAXTIPWIDTH, 0, m_lngMaxWidth
End Sub
Public Sub Destroy()
DestroyWindow m_lngHwnd
End Sub
Public Sub AddControl(ctlTool As Object, strCaption As String, Optional blnCenterTip As Boolean = False)
Dim udtToolInfo As TOOLINFO
With udtToolInfo
GetClientRect ctlTool.hwnd, .cRect
.hwnd = ctlTool.hwnd
.uFlags = TTF_IDISHWND Or TTF_SUBCLASS
If blnCenterTip Then
.uFlags = .uFlags Or TTF_CENTERTIP
End If
.uId = ctlTool.hwnd
.lpszText = strCaption
.cbSize = Len(udtToolInfo)
End With
SendMessage m_lngHwnd, TTM_ADDTOOL, 0, udtToolInfo
End Sub
'====================================================================='
' Events
'====================================================================='
Private Sub Class_Initialize()
m_lngMaxWidth = 300
End Sub
【使用方法】
将上面那段源程序存为一个类模块,名为 cTooltop
首先应该建立一个form然后在form上添加文本框:复选框chkAddToCurrentGroup,txtemail,txttelephone,...然后就可以了
然后在窗体的 Form_Load 中写如下代码即可.
Dim ct As New cTooltip
'========================================================
'设置多行的提示信息
ct.Create Me.hwnd '父窗体句柄
ct.DelayTime = 100 '延迟时间
ct.VisibleTime = 5000 '显示时间
ct.AddControl chkAddToCurrentGroup, "如果选中此项,那么数据录入时," & vbCrLf & _
"同时将此记录加入当前选中了的分组。" & vbCrLf & _
"如果选中了多个组,那么它将加入多个组"
ct.AddControl txtAddress, "这里的地址是指除去省名、地区之外的更详细的地址。" & vbCrLf & _
"也就是说,这里不必也不能填写省名、地区了。" & vbCrLf & _
"例如: 广东省广州市中山八路 8888 号" & vbCrLf & _
"在此只需填写 “中山八路 8888 号”即可"
ct.AddControl txtUnit, "这里填写单位、公司。" & vbCrLf & _
"如:大发公司财务处"
ct.AddControl txtTelephone, "你可以在此快速录入电话号码." & vbCrLf & _
"号码之间以分号(;)分隔." & vbCrLf & _
"电话号码以类别字母开头(缺省认为家庭电话)" & vbCrLf & _
"类别字母为(注意数字 0 与字母 o 的区别):" & vbCrLf & _
"o 办公 h 家庭 m 移动 f 传真 c 呼机" & vbCrLf & _
"例如:o020-87332053-8888;m13660888888;c95950-88888"
ct.AddControl txtEmail, "你可以在此快速录入电子邮箱." & vbCrLf & _
"邮箱之间以分号(;)分隔." & vbCrLf & _
"如:yourgod@god.com;mygod@god.net"
转载于:https://www.cnblogs.com/feima-lxl/archive/2008/06/23/1228218.html
相关文章:

POJ 1458
给出两个字符串,求它们最长的公共子字符串长度。 如abfgc acbfefc 最长的公共子字符串为abfc 长度为4 思路:找到s1[i]与s2[j]的时候,相等的话,dp[i1][j1]dp[i][j]1; 不等的话dp[i1][j1]max(dp[i][j1],dp[i1][j]); #include <…

Activity的LaunchMode
在Android中,启动一个Activity有时需要总是创建一个新的对象,有时需要重复使用以后的对象,可以通过在配置activity时通过LaunchMode属性指定。 LaunchMode的属性值: 1、shandard: 标准模式:每次调用startAc…

邻域数、直接密度可达、密度可达、密度相连的概念
例子:如图所示,Eps用一个相应的半径表示,设MinPts3,请分析Q,M,P,S,O,R这5个样本点之间的关系。 易知,P,M,Q,O,SO之间的点,OR之间的点都是核心点 M是从P直接密度可达,Q是从M直接密度可达 Q是从P密度可达(反…

VUE中使用Echarts绘制地图迁移
踩坑说明 很久以前写jsp时使用过echarts的china.js插件,不过echarts是2.0的,目前vue项目中使用echarts3.8.5,直接将china.js插件引入,代码复制,运行一看,GG。地图中央只有一个光溜溜的南海群岛框框…

关于mysql字符集及导入导出
MySQL字符集设置 • 系统变量:– character_set_server:默认的内部操作字符集– character_set_client:客户端来源数据使用的字符集– character_set_connection:连接层字符集– character_set_results:查询结果字符集…

javascrip 常用属性
1 隐藏控件<div style"dispay:none"><asp:TextBox id"txthiddent" run"server"></asp:TextBox></div>2 页面引用带的<script> </script> EnDate.JS<head><!--#Include File"Js/EnDate.js&q…

数据预处理知识点汇总
(一) 数据清理 a) 缺失值填充 i. 忽略元组 ii. 手工填写 iii. 自动填充 使用属性均值推理出最可能的值,如贝叶斯公式或决策树 b) 去除离群点 i. 聚类 ii. LOF iii. 回归函数拟合数据 c) 噪音(包括错误和离群)处理 i. 分箱光滑 d) 纠正不一致数据 (二) …

Android支付接入(五):机锋网
前边已经陆续跟大家走了一遍运营商和支付宝付费接入,今天跟大家一起看看机锋网的支付接入。事实上付费接入本身并没有太多须要注意的地方,做的多了以后你会发现套路都是大同小异的。而须要注意的地方在于怎么跟游戏兼容及后期的维护,包含增减…

腾讯广告广点通API接入文档(Android)
官方文档地址 如果能够看懂文档的也没有必要再往下面看了。本篇文章就到此结束。 下面记录的是本人在上面锁踩过的坑,因为我发现Mac电脑上面的联系客服不是我想要的。 本来只是内部使用的文档,后来想想还是公开出来,希望能够帮助到人。进入正…

Linux下的下载工具 axel
下载地址:http://wilmer.gaast.net/main.php/axel.html Axel是命令行下的多线程下载工具,支持断点续传,速度通常情况下是Wget的几倍。 下载后使用如下命令编译安装: #tar zxvf axel-1.0a.tar.gz #cd axel-1.0a/ #./con…

集成学习知识点汇总
为啥叫集成学习 结合多个学习器来完成学习任务。 俗话说就是,团结力量大。 个体学习器可以相同可以不同。如果相同叫同质集成,如果不尽相同叫异质集成。 个体学习器最好满足:好而不同。 所谓好(准确性),就是个体学习器不能太坏&…

hdu 2028 Lowest Common Multiple Plus
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid2028 题目大意:求最小公倍数,用辗转相除法。 1 #include <stdio.h>2 int main ()3 {4 int gcd(int a,int b);5 int a,b,n,i,c;6 while (scanf("%d",&n)…

TreeView
6.遍历TreeView节点(递归算法) private void Page_Load(object sender, System.EventArgs e) { GetAllNodeText(TreeView1.Nodes); } void GetAllNodeText(TreeNodeCollection tnc) { foreach(TreeNode node in tnc) { if(node.Nodes.Count!0) GetAllNodeText(node.Nodes); Res…

FZU 2297 Number theory【线段树/单点更新/思维】
Given a integers x 1, you have to apply Q (Q ≤ 100000) operations: Multiply, Divide. Input First line of the input file contains an integer T(0 < T ≤ 10) that indicates how many cases of inputs are there. The description of each case is given below: …

<软件过程与改进>计算大题考点总结与例题
1.PSP_PROBE估算法 常见考法:给历史数据,需要选择代理规模的估算值和程序规模/所需资源的实际值,用以下公式求得拟合公式参数 然后使用公式计算出未知的程序规模/所需资源 例题 2.PSP过程质量的度量指标_yield 常见考法:给出缺…

c语言exit和return区别,在fork和vfork中使用
转自c语言exit和return区别,在fork和vfork中使用 exit函数在头文件stdlib.h中。 简述: exit(0):正常运行程序并退出程序; exit(1):非正常运行导致退出程序; r…

WIKI与BLOG殊途同归(转)
现在很多朋友都拥有了自己的BLOG网页,尽管他们可能并不打算走木子美那种写私人日记的路子,但彰显个性、张扬自我的目的,大都类似。其实在这个时候,中国的许多技术迷们已经把目光投向了WIKI。 历经了网络反黄与木子美,中…

Spring MVC中DispatcherServlet理解总结(1)
DispatcherServlet在web.xml中的配置 <context-param><!--默认配置文件为/WEB-INF/[servlet名字]-servlet.xml--><param-name>contextConfigLocation</param-name><param-value>WebApplicationContext的上下文配置</param-value> </con…

功能点度量方法介绍
功能点度量方法是利用软件需求分析度量软件规模。 软件需求分析包括:软件功能需求分析、软件性能需求分析 在需求分析阶段可以利用数据流图和用例图对软件规模进行度量,分别对应功能点度量与用例点度量方法 1.功能点度量方法的分类 第三种 IFPUG是我…
微软2014校园招聘笔试试题
转载请标明出处,原文地址:http://blog.csdn.net/hackbuteer1/article/details/121908071、Which statement(s) is(are) correct about thread and process?Select all that apply.(5 Points) A、Threads share the same address space of the…

vi(vim)快捷键小记
1、前言 vi是“visual interface”的缩写,vim是vi IMproved(增强版的vi)。总结一下自己平时常用的vim快捷键,当是忘记也好,后续会不定期更新。 2、vim 快捷键 快捷键说明vi[m] file打开[新建]文件命令模式可以移动光标、删除字符等h,j,k,l左…

Premiere Pro2.0用DebugMode2.3搭桥小日本4.0输出图解
看图说话,不懂的多试试看首先明确几点:1。3个软件:Premiere Pro2.0、DebugMode(帧服务器)、小日本(TMPGEnc 4.0 XPress)2。渲染过程是在小日本中完成,与DebugMode无关,De…

用例点度量方法介绍
用例点度量方法分为6个步骤,分别是 step 1:计算未调整前的角色(执行者)权重 将角色按照复杂程度分为3类,具体如下 则本例中 UAW1121329 计算未调整前的用例权重UUC 有三种评估用例复杂程度的方法,具体如下 以下是用例权重评估表(普通那…

NYOJ——街区最短路径问题
街区最短路径问题 时间限制:3000 ms | 内存限制:65535 KB难度:4描述一个街区有很多住户,街区的街道只能为东西、南北两种方向。住户只可以沿着街道行走。各个街道之间的间隔相等。用(x,y)来表示住户坐在的街区。例如(…

Git 中常用的 4 个命令
使用 Git 进行版本管理时,肯定不只做提交,有时候也会需要回退修改,并且在回退的基础上进行重新提交,这时候有几个常用的命令就需要用到了,下面分别做介绍。 1、查看提交日志 首先,我们查看当前提交记录的命…

7月17日 晴
小懒猫,太阳晒PP拉Mua转载于:https://www.cnblogs.com/loverain/archive/2008/07/17/1244992.html

AS更改初始布局遇到的问题
将所有的simple.xml.ftl的内容都改成 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"…

android Json解析详解
JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语 言的支持),从而可以在不同平台间进行数据交…

[二]Java虚拟机 jvm内存结构 运行时数据内存 class文件与jvm内存结构的映射 jvm数据类型 虚拟机栈 方法区 堆 含义...
前言简介 class文件是源代码经过编译后的一种平台中立的格式 里面包含了虚拟机运行所需要的所有信息,相当于 JVM的机器语言 JVM全称是Java Virtual Machine ,既然是虚拟机,他终归要运行在物理机上 在操作系统中体现出来的也就是一个进程 操作系统会给他分配资源,割一块内存作为…

import android.support.v7.widget.RecyclerView失败
换成 androidx.recyclerview.widget.RecyclerView 参考文章 https://blog.csdn.net/u013183608/article/details/89428611/