pb控件强化:一个在drag时可以自动上下滚动的treeview控件对象

C# TreeView实现拖动节点时滚动条自动滚动 You need to call the Windows API SendMessage() function.          //using System.Runtime.InteropServices;        [DllImport("user32.dll")]        private static extern int SendMessage(IntPtr 阅读详情

        在实际使用过程中,当treeview控件允许拖动drag时,由于treeview控件在expand后,高度都会比较高,以至于数据在控件内,无法完全显示,而在drag过程中,经常需要执行大幅度的拖动,这样一来就会导致拖动过程经常受阻。

        虽然在拖动时,可以通过滚动鼠标滚轮的方式来手动为treeview控件滚动数据,但是这样的操作比较麻烦,经常会在滚动滚轮时,不经意的松开鼠标左键,导致drag过程被终止。

        为了解决treeview控件的这一不足,本人对treeview控件进行改写,实现treeview控件在drag过程中,当鼠标移动到treeview上方时,可以自动向上滚动数据;当鼠标移动到treeview下方时,可以自动向下滚动数据。

      

        将以下内容复制,并保存到本地文件 uo_autoscroll_tv.sru 中,然后导入pbl中,之后就可以通过 nsert userobject 方式插入该控件了。

        本控件已经集成了drag功能,您在使用时,只需要更改它的dragicon(拖动时显示的图标)属性。

        另外插入后的控件,只需要在ue_dragdrop事件及ue_dragdrop_o两个事件中进行编程即可。其中ue_dragdrop事件用于treeview控件内部的拖动;ue_dragdrop_o事件用于从其他控件到该treeview控件的拖动。

 

$PBExportHeader$uo_autoscroll_tv.sru
forward
global type uo_autoscroll_tv from treeview
end type
type itiming from timing within uo_autoscroll_tv
end type
end forward

global type uo_autoscroll_tv from treeview
integer width = 549
integer height = 452
string dragicon = "DataPipeline!"
integer textsize = -9
integer weight = 400
fontcharset fontcharset = gb2312charset!
fontpitch fontpitch = variable!
string facename = "宋体"
long textcolor = 33554432
borderstyle borderstyle = stylelowered!
boolean linesatroot = true
long picturemaskcolor = 536870912
long statepicturemaskcolor = 536870912
event ue_dragdrop ( long al_from,  long al_to )
event ue_dragdrop_o ( dragobject source,  long al_to )
event ue_lbuttondown pbm_lbuttondown
event ue_lbuttonup pbm_lbuttonup
itiming itiming
end type
global uo_autoscroll_tv uo_autoscroll_tv

type prototypes
function ulong SetCapture(ulong hwnd) library "user32.dll"
function boolean ReleaseCapture() library "user32.dll"

end prototypes

type variables
protected:
long il_drag_handle //开始拖动的节点的句柄
long il_dragwithin_handle //当前拖动到的节点


constant long SB_LINEUP = 0
constant long SB_LINELEFT = 0
constant long SB_LINEDOWN = 1
constant long SB_LINERIGHT = 1
constant long SB_PAGEUP = 2
constant long SB_PAGELEFT = 2
constant long SB_PAGEDOWN = 3
constant long SB_PAGERIGHT = 3
constant long SB_TOP = 6
constant long SB_LEFT = 6
constant long SB_BOTTOM = 7
constant long SB_RIGHT = 7

constant long WM_HSCROLL= 276
constant long WM_VSCROLL = 277


end variables

forward prototypes
public subroutine of_bolditem (long al_h, boolean ab)
protected subroutine of_timing ()
end prototypes

event ue_dragdrop(long al_from, long al_to);//响应内部拖动
end event

event ue_dragdrop_o(dragobject source, long al_to);//响应外部拖动
end event

event ue_lbuttondown;SetCapture(handle(this))
this.drag(begin!)
il_drag_handle = this.getitematpointer() 
end event

event ue_lbuttonup;ReleaseCapture() 
itiming.stop()
end event

public subroutine of_bolditem (long al_h, boolean ab);//选择/不选 节点al_h
treeviewitem ltvi
if this.getitem(al_h, ltvi) <> 1 then return

ltvi.bold	 = ab

this.setitem(al_h, ltvi)
end subroutine

protected subroutine of_timing ();if this.pointerY() <= 0 then
	//连续send两次,是为了加快滚动速度
	SEND(handle(this), WM_VSCROLL, SB_LINEUP, 0)
	SEND(handle(this), WM_VSCROLL, SB_LINEUP, 0)
elseif this.pointerY() >= this.width - 10 then
	SEND(handle(this), WM_VSCROLL, SB_LINEDOWN, 0)
	SEND(handle(this), WM_VSCROLL, SB_LINEDOWN, 0)
end if
end subroutine

on uo_autoscroll_tv.create
this.itiming=create itiming
end on

on uo_autoscroll_tv.destroy
destroy(this.itiming)
end on

event dragenter;itiming.stop()
end event

event dragwithin;of_bolditem(il_dragwithin_handle, false)
of_bolditem(handle, true)
il_dragwithin_handle = handle

end event

event dragdrop;of_bolditem(il_dragwithin_handle, false)
if source = this then
	event ue_dragdrop(il_drag_handle, handle)
else
	event ue_dragdrop_o(source, handle)
end if
end event

event dragleave;itiming.start(0.1)
end event

type itiming from timing within uo_autoscroll_tv descriptor "pb_nvo" = "true" 
end type

on itiming.create
call super::create
TriggerEvent( this, "constructor" )
end on

on itiming.destroy
TriggerEvent( this, "destructor" )
call super::destroy
end on

event timer;parent.of_timing()
end event


 

pb 数据窗口 拖拽 dragdrop pb 数据窗口 拖拽 dragdrop 运行效果 http://hi.youkuaiyun.com/attachment/201008/25/0_12826945310m12.gif 立即下载

相关推荐

TreeView、Text滚动条同步

有个需求需要同步滚动条,找资料写了一个小例子,供大家学习交流。 包含treeView滚动条和Text滚动条同步。

PB中下拉列表使用的若干技巧

1 下拉列表及其相应的事件   下拉列表是在窗口中定义的一个控件,与之相应的事件如下表所示: 表1 下拉列表控件上的事件   事件名称    触发时机        Constructor    在窗口中的OPEN事件发生前触发        Destructor    在窗口中的CLOSE事件发生后触发        Doubleclicked    当下拉列表控件(选中且激活)被

晨风的专栏 4432

【深大算法设计与分析】实验六 最大流应用问题(棒球赛问题) 实验报告 附代码、数据集

【内附代码与数据集】【深大算法设计与分析】实验六 最大流应用问题(棒球赛问题)

m0_74268508的博客 1293

pb 选中树形菜单节点_PB中TreeView控件使用技巧-数据库专栏,其他相关

powerbuilder中的treeview 控件为树状游览,类似于windows的资源管理器,其特点是信息项呈树状层次结构,能更清晰地表现主、细目关系 ,操作非常方便。在应用中可将其与datawindow 配合使用, 一个提供信息的分类体系,一个提供具体信息,达到珠连碧合的奇妙效果。它特别适用于多级信息的分类检索, 是多级菜单所无法比似的,它的表现形式深受程序设计人员和广大用户的喜爱,在许多应用...

weixin_30273229的博客 1244

基于航天宏图PIE-SAR软件的高分三号(GF-3)SAR影像的预处理

软件官网 航天宏图—国内领先的卫星运营与应用服务提供商(官网) 一、数据导入 数据导入-GF-3-根据模式选择 参数文件导入解压后GF-3数据的XML文件 通道自动填充 设置输出目录 确定 等待,加载图像、自动构建金字塔 二、复数数据转换 强度/幅度特征是SAR影像最主要的特征之一,基于SAR强度/幅度影像可以提取地物目标信息,因此需要将SAR复数数据转换为SAR强度/幅度数据。导入输入影像,设置参数类型,输出目录、命名、类型; 漫长的等待 三、多视 为提...

weixin_52127098的博客 9003

从零开始用TS开发babylonjs - 本机环境搭建

babylonjs,初始化本地安装,web3d引擎

han3527638的专栏 794

TreeView滚动条滚动到被选中节点

选择TreeView节点,页面回送刷新后,滚动条自动回到TreeView顶部,而不是被选中节点处,使节点在Treeview可视区域可见,可以利用scrollIntoView方法使TreeView中页面刷新后自动定位到被选择节点处,使被选择节点可见,方法如下: <body οnlοad="ScrollToSelectNode();"> <div id="divScro...

qq_31634167的博客 1891

YOLO26涨点改进 | 全网首发Conv独家改进篇 | CVPR 2025 | YOLO26引入FDConv频率动态卷积改进,含FDC3k2二次创新,小目标检测,能够捕捉更加丰富和复杂的特征信息

本文提出了一种频率动态卷积(FDConv)模块,用于改进YOLO26目标检测模型的性能。FDConv通过在傅里叶域内划分参数预算,构建具有频率多样性的权重,有效提升了模型对低频和高频信息的处理能力。该模块包含内核空间调制(KSM)和频率带调制(FBM)两个关键组件,分别实现空间级和频域级的动态调节。实验表明,FDConv仅增加3.6M参数就能超越其他需要大幅增加参数的方法,并在目标检测、实例分割等任务中表现优异。文章详细介绍了FDConv的原理、实现方法及在YOLO26中的集成方式,提供了完整的代码实现。

Ai缝合怪、助力小伙伴高效发论文 249

PB实现拖拽或粘贴文件

PB实现拖拽或粘贴文件

xiajinxian的专栏 3523

【AUTOSAR-RTE】-1-聊一聊RTE(Run-Time Environment)

RTE(Run-Time Environment)是AUTOSAR ECU架构的核心。

「汽车电子助手」的博客 6502

芒果YOLO11改进81:主干Backbone篇之DCNv3结构:即插即用|使用pytorch代码实现,并针对YOLO11专门优化模块

芒果YOLO11改进81:主干Backbone篇之DCNv3结构:即插即用|使用pytorch代码实现,并针对YOLO11专门优化模块

包括YOLOv5、YOLOv7、YOLOv8等模型改进 736

滚动TreeView滚动条到被选中节点

原文:http://www.cnblogs.com/micromouse/archive/2008/03/03/1089059.html 选择TreeView节点,页面回送刷新后,滚动条自动回到TreeView顶部,而不是被选中节点处,使节点在Treeview可视区域可见,可以利用scrollIntoView方法使TreeView中页面刷新后自动定位到被选择节点处,使被选择节点...

deform0032的博客 330

大模型新闻摘要生成质量评估工具

大模型新闻摘要生成质量评估工具 关键词:大模型、新闻摘要、质量评估、自然语言处理、算法 摘要:本文将探讨大模型新闻摘要生成质量评估工具的设计与应用。首先介绍大模型新闻摘要生成的背景和问题,然后深入分析质量评估的难点和重要性,接着介绍大模型的

AI天才研究院 828

PB开发笔记(8)

//自适应屏幕分辨率的基类窗口(pb)做一个自适应屏幕分辨率的窗口,当成一个应用程序中所有窗体的基类。这样整个程序可以很好的适应屏幕分辨率的改变。实现的原理很简单,就是在窗口打开的时候去RESIZE窗口和窗口中的控件大小,位置。参看下面的源代码,可以很容易的看懂。1。新建一个窗口。为窗口写一个函数f_resize()大部分工作就在这里。无输入参数返回值为整形:environment envinte

盐碘 7344

ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory解决方案

本文主要介绍了ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory解决方案,希望能对使用Python的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 11万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

pb中数据窗口中的行怎么实现通过拖拉行来改变顺序?不是按照字段排序

pb中数据窗口中的行如何实现通过拖拉行来改变顺序?不是按照字段排序 比方说数据有100行,通过选中行,所以拖拉,整行的数据就移动到指定位置,其它行顺延 第一行拉到第十行,第二行就自动变成第一行,第三行自动变成第四行,等等tb 这样可以实现吗? ------解决方案-----------------------------------------------...

weixin_34191734的博客 1017

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

让treeview控件的滚动条移动到顶部的位置

可以使用下面的语句,让treeview控件的滚动条移动到顶部的位置 可以在展开事件中写 this.treeView1.Nodes[0].EnsureVisible(); 这样滚动条就在最上面。

weixin_33796177的博客 1026

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

c# winform TreeView控件中实现拖拽的功能

在Form Load的时候为了完全显示节点,不必一一点开,建议加上如下代码:private void frmDrag_Load(object sender, EventArgs e){ this.treeView1.ExpandAll();} 要实现TreeView的拖拽功能,首先我们必须将其AllowDrop属性设成true,这样就保证了此TreeView的接点是可以被拖拽

关注互联网,关注RIA 2112

VB.NET TreeView 怎么调用DragDrop事件

Private Sub TreeView_ItemDrag(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ItemDragEventArgs) Handles ItemDrag ‘将移动的Node设置为当前树选中Node Me.SelectedNode = CType(e.Item, ...

kangcsdan的博客 788

Drag&Drop 拖放API简介以及在React中的实践

最近有个需求,需要产品导航栏支持拖放。 虽然开源社区已有不少成熟的拖放库,但考虑到代码可控性和可定制性,还是自己写吧。 选型 关于选型,前端实现拖放功能,无外乎几种: 1、通过样式布局+鼠标事件,采用此方案的插件如:@shopify/draggable 2、Canvas绘制,插件如:konva 3、Drag&Drop接口,插件如:dragula 经过一番研究,最终选择了原生Drag&amp...

weixin_34023982的博客 3214

PB11 WEB程序所不支持的东东

昨天没事整理了一下用PB11写WEB程序时需要注意的一些东西,尤其是从C/S向B/S迁移还要注意一些函数问题,暂时只知道操作INI文件的的函数不能用,但编译时并不会报错。下面把我所知道的一些不支持的事件,属性,函数列一下:Event "deactivate" of window is not supported.  Event "doubleclicked" of listbox is not s

xiongxiao的专栏 2947
上一篇: PB开发的程序如何不显示在任务栏
下一篇: PB9中通过网址(域名)获取IP的方法
yyoinge
博客等级 码龄21年 222粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值