首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

VFP在运行时扩展报表系统,这是报表转换任意格式的秘决

在 VFP 9 中新的报表引擎已经将责任拆分成了几块,报表引擎现在负责数据处理和对象定位,一个新的对象 report listener 负责处理绘制和输出。...当一个对象被画到报表页上的时候会触发 Render 方法。ReportListener 基类有一些内建的行为,但你可以建立并使用你自己的子类来扩展它。...在“一次所有页”模式中,Report listener 会绘制所有的页并将它们放在内存的缓存中,然后它根据需要输出这些绘制好了的页,比如当用户在打印预览窗口中单击了 next 按钮。...关于 ReportListener 的一件要注意的事情是:它的计量单位(例如,由 GetPageWidth 方法返回的值、或者传递给 Render 方法的 size 参数)是 1/960 英寸。...第三个数据工作期是FRX游标在其中打开的数据工作期。

97321

〔连载〕开始建立你自己的报表监听器

译者:Fbilo 虽然内建的ReportListener类(甚至包括在FFC中提供的那些listener)有着大量的功能,但可以肯定你最终还是会需要做更多没有包含其中的功能。...报表引擎首先调用领头的listenerRender方法,而后者会调用BeforeRender方法,这个方法再沿着责任链向下调用,因此每个后继者的BeforeRender都有机会去做任何重要的事情。...和EvaluateContents这样的事件会为在FRX中的每一个记录和要被绘制的每一个对象各触发一次(意思就是它们触发的次数接近于在FRX中对象的数量乘以将要被报表输出的记录的数量),所以你应该最大限度的缩小在这些方法中要完成的工作量...因此,SFReportListener有一个名为aRecords的自定义数组属性,其中可以包含着你需要的关于FRX中记录们的任何信息。...此外,还要留心其中一个包含文件SFReporting.H中引用了\Program files\Microsoft Visual FoxPro 9\FFC\FoxPro_Reporting.h。

34931
您找到你想要的搜索结果了吗?
是的
没有找到

看完这篇还不会 GestureDetector 手势检测,我跪搓衣板!

单击事件、双击事件等等),就可以监听到单击,双击,滑动等事件,然后直接在这些方法内部进行处理。...使用方法  1. 首先,创建一个 SimpleOnGestureListener 回调方法对象,并对其中各个方法进行重写  2....观察 ==detector== 的构造方法,发现其一共有种方法其中我们常用的方法有两种,首先是我们在主线程中用的那种,另外一种就是我们现在要用的,在子线程中,能传入 Looper 的 构造方法: public...类型 触发次数 摘要 onSingleTapUp 1 在双击的第一次抬起时触发 onSingleTapConfirmed 0 双击发生时不会触发 onClick 2 在双击事件时触发两次 它和 onSingleTapConfirmed...(){         @Override         public boolean onSingleTapUp(MotionEvent e) {// 双击第一次抬起触发,第二次不触发

1.3K20

Android 优雅处理重复点击(建议收藏)

现在的处理方式 现在使用的是时间判断,在时间范围内响应一次点击,通过将上次单击时间保存到 Activity Window 中的 decorView 里,实现一个 Activity 中所有的 View...共用一个上次单击时间。...为此将判断是否触发单次点击的代码抽离出来,单独作为一个方法: fun View.onSingleClick( interval: Int = SingleClickUtil.singleClickInterval...富文本 继承 ClickableSpan,在 onClick 回调中判断是否触发单次点击: inline fun SpannableStringBuilder.onSingleClick( listener...因此,这里需要特殊处理,在 isShareSingleClick 为 false 的时候,创建一个假的 View 来触发单击事件,这样富文本中多个单次点击 isShareSingleClick 为 false

1K30

深入学习 React 合成事件

事件在document上绑定,并且每种事件绑定一次,减少内存开销。 首先我们先抛开上面那个按钮,用下面这个十分简单的案例来了解React的事件使用。...事件绑定 首先来确认事件是如何绑定到dom节点上的,我们知道App组件内的jsx代码会通过React.CreateElement函数返回jsx对象,其中我们的onClick事件是储存在每一个jsx对象的...props属性内,通过一系列方法得知在React在reconciliation阶段中会把jsx对象转换为fiber对象,这里有一个方法叫做completeWork, function completeWork...function legacyListenToTopLevelEvent(topLevelType, mountAt, listenerMap) { // 保留主逻辑 // 相同的事件绑定一次...,所以在17版本中会把事件绑定到render函数的节点上。

1K31

事件高级

) eventTarget.addEventListener()方法将指定的监听器注册到 eventTarget(目标对象)上,当该对象触发指定的事件时,就会执行事件处理函数。...该方法接收三个参数: ●type:事件类型字符串,比如click、 mouseover,注意这里不要带on ●listener: 事件处理函数,事件发生时,会调用该监听函数 useCapture:可选参数...Js代码中只能执行捕获或者泡其中的一个阶段。 2. onclick和attachEvent 只能得到冒泡阶段。...常情况下terget 和 this是一致的, 但有一种情况不同,那就是在事件冒泡时(父子元素有相同事件,单击子元素,父元素的事件处理函数也会被触发执行), 这时候this指向的是父元素,因为它是绑定事件的元素对象...事件委托的原理 给父元素注册事件,利用事件冒泡,当子元素的事件触发,会冒泡到父元素,然后去控制相应的子元素。 事件委托的作用 我们操作了一次 DOM ,提高了程序的性能。

1.5K41

造一个 react-infinite-scroller 轮子

因此,这里可以加一个 initialLoad 的 props 指定添加监听器的时候就自动触发一次监听器的代码。 interface Props { ... initialLoad?...目前猜测因为 passive listener 的特性所引发的,帖子里也给出了解决方法:在 mousewheel 里 e.preventDefault 就好。...再造一个函数获取监听器的 options,这个 options 包含了 passive 和 useCapture,前者为是否开启 passive 特性,后者为是否捕获。...优化 render 函数 最后,render 函数还可以再进一步优化。...还有一点,在添加 listener 的时候可以触发一次 listener 作为 initialLoad 向上滚动的时候,在 componentDidUpdate 里要把滚动条设置为上一次停留的地方,否则滚动条会一直在顶部

2.5K30

【React】354- 一文吃透 React 事件机制原理

减少内存消耗,提升性能,不需要注册那么多的事件了,一种事件类型在 document 上注册一次 统一规范,解决 ie 事件兼容问题,简化事件逻辑 对开发者友好 思考 既然 react 帮我们做了这么多事儿...通过调试,在执行栈里看下这个参数 e包含哪些属性 ? 再看下官方说明文档 ? SyntheticEvent是react合成事件的基类,定义了合成事件的基础公共属性和方法。...然而原生注册一个onchange的话,需要在失去焦点的时候才能触发这个事件,所以这个原生事件的缺陷react也帮我们弥补了。...批量处理事件合成对象 批量处理合成事件对象内的回调方法(事件触发完成 end)。 生成完 合成事件对象后,调用栈回到了我们起初执行的方法内。 ?...到下面这一步中间省略了一些代码,贴出主要的代码,下面方法会循环处理 合成事件内的回调方法,同时判断是否禁止事件冒泡。 ?

1K21

前端高频手写面试题

); timer = setTimeout(() => { fn.apply(this, args); }, delay); };};适用场景:按钮提交场景:防止多次提交按钮,执行最后提交的一次服务端验证场景...:表单验证需要服务端配合,执行一段连续的输入事件的最后一次,还有搜索联想词功能类似生存环境请用lodash.debounce实现数组的push方法let arr = [];Array.prototype.push...实现防抖函数(debounce)防抖函数原理:把触发非常频繁的事件合并成一次去执行 在指定时间内执行一次回调函数,如果在指定的时间内又触发了该事件,则回调函数的执行时间会基于此刻重新开始计算图片防抖动和节流本质是不一样的...,执行最后提交的一次服务端验证场景:表单验证需要服务端配合,执行一段连续的输入事件的最后一次,还有搜索联想词功能类似Object.assignObject.assign()方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象...== null) { // 使用for...in和hasOwnProperty双重判断,确保拿到本身的属性、方法(不包含继承的) for (const nextKey in

57620

学不完的框架,🐔啄不完的米,SolidJS,你到底爱谁?😘

难道这是React被抄袭的最惨的一次吗? 是的,官网明确告诉你,它会让你感觉既熟悉又现代。 和React类似的hook写法,一样的Jsx模板语法,熟悉吧?...createMemo和createEffect会自动收集依赖项,每次触发依赖项listener的更新时,都会重新执行。 到这,是不是觉得,这太简单了吧,这不就是React和Vue的结合体嘛!...最后组装render方法,将组件包装成函数,和根节点一起作为render方法的参数。 这和Svelte的编译结果有两个十分类似的地方: 将每动态片段的更新范围,精确到了原子级别。...,会执行render方法render方法如下 function render(code, element, init, options = {}) { let disposer; createRoot...方法后,才会通过发布订阅模式创建响应式变量,每次调用write()、或者触发事件时,导致变量更新,以及对应的元素节点使用_$insert更新DOM。

1K60

事件高级

方法接收三个参数:  type:事件类型字符串,比如 click 、mouseover ,注意这里不要带 on  listener:事件处理函数,事件发生时,会调用该监听函数  useCapture...方法监听注册方式    ① eventTarget.removeEventListener(type, listener[, useCapture]);   ② eventTarget.detachEvent...JS 代码中只能执行捕获或者冒泡其中的一个阶段。   2. onclick 和 attachEvent 只能得到冒泡阶段。   ...常情况下terget 和 this是一致的, 但有一种情况不同,那就是在事件冒泡时(父子元素有相同事件,单击子元素,父元素的事件处理函数也会被触发执行),  这时候this指向的是父元素,因为它是绑定事件的元素对象...事件委托的原理 给父元素注册事件,利用事件冒泡,当子元素的事件触发,会冒泡到父元素,然后去控制相应的子元素。 事件委托的作用 我们操作了一次 DOM ,提高了程序的性能。

1.2K10
领券