『壹』 JS如何调用delphi制作的ocx控件中的函数
<OBJECT id="aa" classid="clsid:87A6948B-AD04-4913-9F4E-4BE1A423943F" codebase="ActiveFormProj1.ocx#version=1,0,0,0" width=100% height=100% align=center hspace=0 vspace=0 > </OBJECT>
『贰』 明白delphi的来看看
ActiveControl 属性返回拥有焦点的控件。当窗体被引用时,如在 ChildForm.ActiveControl 中,如果被引用的窗体是活动的,ActiveControl 指定将拥有焦点的控件。在设计时是不可用的;在运行时是只读的。语法object.ActiveControlobject 所在处代表一个对象表达式,其值是“应用于”列表中的一个对象。说明可以使用 ActiveControl 来访问控件的属性或调用其方法:例如,Screen.ActiveControl.Tag = "0"。如果在窗体上的所有控件都是不可见的或不可使用的,那么将产生一个运行时错误。每个窗体都可以有一个活动控件 (Form.ActiveControl),而不管窗体是否是活动的。在应用程序中,可以在每个窗体上编写处理活动控件的代码,即使此窗体不是活动窗体。这个属性在多文档接口 (MDI) 应用程序中尤其有用,其中工具栏上的一个按钮必须初始化为 MDI 子窗体中的控件上的一个动作。当用户单击工具栏上的“复制”按钮时,代码可以引用 MDI 子窗体的活动控件中的文本,例如 ActiveForm.ActiveControl.SelText。注意 如果计划将 Screen.ActiveControl 传递给一个过程,那么在那个过程中必须用子句 As Control 而不是指定控件的类型 (As TextBox 或 As ListBox)声明参数,即使 ActiveControl 总是引用相同类型的控件。 myrect:=activecontrol.boundsrect;//读入形状(左,上,右,下) myrect.Right:=myrect.left+2*(myrect.Right-myrect.left); //(右=左+2*(右-左)) 右-左=长度 myrect.Bottom:=myrect.Top+(myrect.Bottom-myrect.top) div 2; //(下=上+(下-上)/2) 下-上=高度 ActiveControl.BoundsRect:=myrect;//同样不明白 重设形状(左,上,右,下)
『叁』 如何在VB中使用Delphi的控件
—- 为方便讲述,以Delphi4 中Samples 标签下的ColorGrid组件为例,描述如何将ColorGrid导出成ActiveX控件。 —- 1、打开delphi4,运行File- >New,弹出NewItems对话框,点取"ActiveX"标签,选择ActivexControl,选择"OK" —- 2、在出现的ActiveX Control Wizard的对话框中,有如下选择: —- VCL Class Name:选择要导出的或继承的VCL组件(注意非TwinControl继承的VCL不再列表中,之后再讨论),选择TColorGrid —- New Activex Name:要导出的ActiveX控件名,取默认值ColorGridX即可 —- Implementation Unit:实现单元,取缺省名称 —- Project Name:创建的工程名,取缺省名称 —- Thread Model:线程模式,详看Delphi帮助,这里取默认值Apartment(单线程) —- Include Design-Time License:是否包含使用许可信息 —- Include About Box:是否包含"About"对话框 —- Include Version Informaion:是否包含版本信息 —- 单击"OK",此时Delphi为我们创建了三个文件: —- 库文件 ColorGridXControl1 —- 实现单元 ColorGridImpl1 —- 类型文件 ColorGridXControl1_TLB —- 3、选择菜单Run->Register ActiveX Server,会出现注册成功的信息: "Successfully Registered ActiveX Server,'…ColorGridControl1.ocx'"—- 这里的ColorGridXControl1.ocx就是你所需要的颜色选取控件。—- 现用VB6对其进行测试: —- 1、新建一VB6工程,选取菜单"工程->部件",在出现的对话框中选中ColorGridXControl1 Library,选"确定"。 —- 2、在窗体Form1上放置控件ColorGridX,取默认名称"ColorGridX1"。 —- 3、如何利用它的属性和方法:以获得选取颜色为例,在它的OnClick事件中添加监视ColorGridX1,发现其属性Object返回对Delphi控件的引用,ForegroundColor属性值代表选中的颜色,虽然在"ColorGridX1.Object."后没有代码提示,但仍然可以用ColorGridX1.Object.ForegroundColor可得到颜色值。 —- 如果你想完善这个控件,在键入"ColorGridX1."后直接得到ForegroundColor的属性提示,那就必须手工在Delphi中为ColorGridX填加属性/方法,步骤如下: —- 1、选中实现单元ColorGridImpl1,选菜单"Edit->Add To Interface",在出现的对话框中的Declaration填写"Property ForegroundColor:integer",选"OK",这时Delphi自动为你填加了两个过程框架: procere TColorGridX.SetForeColor(Value: Integer);function TColorGridX.GetForeColor: Integer;2、在Get_ForeColor中添加代码result:=FDelphiControl.ForegroundColor;由于ColorGrid的ForegroundColor属性为只读,Set_ForeColor过程不用写了。—- 3、编译执行,Run->Register ActiveX Server,会出现注册成功的信息。再到VB中,会发现控件ColorGridX新增了ForeColor属性,代表选中的颜色值。—- 依此类推,可以增加其它有用的属性供VB等显式调用。用这种办法,可以把大多数由TWinControl继承下来的组件导出,那么非TWinControl的组件以及没有列出的组件怎么导出呢?且看下文。 —- 前面提到创建ActiveX控件时,在ActiveX Control Wizard的对话框的VCLClassName下拉列表中找不到想导出的VCL组件,这是因为该组件不是由TwinControl继承下来的,属"Windowless"那一种,这时我们可以用ActiceForm的形式把它导出来,以第三方控件TColorPickerButton为例: —- 1、选菜单"File->New",在出现的"New Items"对话框中选择"ActiveX"标签,选中ActiveXForm,选择"OK" —- 2、在出现的"ActiveForm Wizard"的"New ActiveX Name"中填写输出的控件名"ColorPicker",选择"OK" —- 3、在Delphi为我们创建的窗体上放置TColorPickerButton组件,名为"ColorPickerButton1",将窗体调整到合适大小,选菜单"Edit->Add To Interface",为它添加属性:Property SelectColor:integer,选择"OK" —- 4、在Delphi提供的框架中写下类似代码: —- 读取颜色: function TColorPicker.GetSelectColor: Integer;beginresult:=ColorPickerButton1.SelectionColor;end;设置颜色:procere TColorPicker.SetSelectColor(Value: Integer);beginColorPickerButton1.SelectionColor:=Value;end;—- 5、编译执行,Run->Register ActiveX Server,会得到注册成功的消息。 —- 6、用前面讲述的方法在VB6下实验,获得成功。 —- 关于添加属性的两点说明: —- 1、原形为"Property {属性/方法名}:数值类型",其中数值类型有:WordBool、WideString、Integer等 —- 2、如果出现"SafeCall function Requires a Hresult return type"的错误提示,说明你添加的属性/方法名已经存在,换个名字即可。 —- 至此,我们已经成功导出了GridColor(属TWinControl继承类)和ColorPicker(属"Windowless"),写此文仅为抛砖引玉,还有许多功能强大的"For Delphi"的第三方控件的我们可以转化,提醒一点,并不是所有的VCL组件都能转成ActiveX,如Delphi的通用对话对话框。 ^_^
『肆』 如何实现DELPHI的普通FORM调用DELPHI的ACTIVE FORM的成
就教各位:若何实现DELPHI的通俗FORM调用DELPHI的ACTIVEFORM的成员?有一软件,我将主窗作成ACTIVEFORM的情势而其他窗作成通俗FORM的情势,如今由ACTIVEFORM生成一个通俗FORM的实例,当这个通俗FORM要对ACTIVEFORM中的对象(如一LABLE对象)进行操作(如赋值)时,应当如何做?生成的通俗FORM中调用这个接口呢?ACTIVEFORM工程中有一个接口,是不是经由过程这个接口可以实现?那又如何在被望各位不吝指教,帮帮这个忙!
『伍』 DELPHI中窗体显示方法解析!
视窗系统能将多个显示器映射为虚拟桌面,使我们能利用这一点设计出方便工作的应用程式。例如PowerPoint就充分发挥了双显示器的优势(大多数的笔记本计算机都支持),他能在一个显示器上播放幻灯片,而在另一个显示器上显示备注,能控制播放的进程,使使用者做商务演说的时候非常等心应手。那么我们怎么研发这种应用程式呢?这篇文章将向你展示如果用Delphi实现使用多显示器的应用程式。视窗系统还支持克隆显示方式,每个显示器输出同样的内容,这对某些应用也是有意义的。更有些显卡虽然也支持两个显示器,不过他们并不是真正意义上的多显示器,而是虚拟高分辨率显示模式(如2048×768或1024×1536),通过显卡将画面分别显示到两个显示器上。这两种显示模式都不是本文介绍的zhongdian,而且也非常简单,所以我们也就不再赘述了。视窗系统最多支持10个显示器,视窗系统将所有显示器映射为一个大的虚拟桌面。能将显示器理解为桌面某个局部的视图。在显示属性中能根据显示器的物理位置任意排布这些显示器。如果显示器的排列不规则,虚拟桌面上的某些部分可能无法显示在所有一个显示器上。为了不使一个窗体显示在两个显示器之间等原因的考虑,视窗系统将一个显示器作为主显示器。启动计算机时,登录对话框就显示在主显示器中。绝大多数程式启动示,都会显示在主监视器中。根据上述介绍,不难发现几个重要的概念:桌面、显示器、主显示器等。首先必须先弄清晰这些概念及他们之前的关系。这是掌控多显示器应用程式研发方法的重点。理解了这些概念,其他的部分就非常好理解了。桌面实际上是指视窗系统可显示的逻辑区域。实际上是能将一个窗体显示到桌面之外的。然而这并不是说桌面的所有部分都会显示在某台显示器上(原因如前所述);但反过来说,所有一个显示器显示的内容都必然是桌面的一部分。桌面是个矩形区域,能通过顶点坐标(Top,Left)和宽高来描述桌面的尺寸。为什么还需要顶点坐标呢?因为顶点坐标不是想当然的(0,0)。那么(0,0)在哪里呢?说来话长,还是让我们先来回顾一下刚才提到地一个概念??主显示器吧。视窗系统希望一般的程式初始的时候显示到主显示器,因为人们习惯于关注一个离自己最近的显示器。而视窗系统也不可能强制用户把最左边一个显示器作为主显示器,这样一来应用程式为了把自己显示到主显示器,就需要费脑筋的计算。然而,多数用户都只有一个显示器(两个显示器实在太占地方了),而一般的应用程式也不希望大费周章的去计算主显示器在哪里,自己应该显示在什么位置。所以视窗系统提出了一个合理的解决方案:以主显示器的顶点坐标作为坐标系的原点。这样一来,普通的程式之需要想在单显示器环境中相同考虑问题就能了。显示器是桌面的局部视图。就似乎透过窗户看窗外的风景,站在不同的窗前就能看到不同的画面。同样的,显示器也是个矩形区域,同样能通过顶点坐标(Top,Left)和宽高来描述他的尺寸。顶点坐标是相对于桌面坐标系原点的,也就是相对于主显示器的顶点。工作区的概念比较简单,他是指显示器中除了任务条和其他停靠在桌面上的窗体之外的矩形区域。视窗系统为多显示器应用程式的研发提供了一组API。VCL将这些API封装起来,非常自然的融入整个Framework之中,使得研发多显示器应用程式变得非常简单。下面就介绍和之相关的内容。在VCL之中大家最熟悉的恐怕非TCustomForm莫属了,他是所有窗体的基类。TCustomForm的Position属性用来设置窗体的现实位置,其可选值中有两个是值得关心的:一个是poScreenCenter,当Position属性被设置成poScreenCenter时,窗体会显示到主显示器的中心;另一个是poDesktopCenter,当Position属性被设置成poDesktopCenter时,窗体显示在整个桌面的中心。如果把这个属性设成poDesktopCenter,程式又运行在一个有多台显示器的系统上,那么这个窗口就会显示在两个显示器之间,会给用户带来不必要的麻烦。因此即使我们的程式不是针对多显示器而设计的,也应该细心处理这个值。另外一个属性是DefaultMonitor,他的作用和Position有些类似,决定窗口最初显示在哪个显示器内。他有四个备选值:dmDesktop,dmPrimary,dmMainForm和dmActiveForm。他们的含义如下:Value Meaning dmDesktop 不特别处理 dmPrimary 将窗体显示到第一个显示器上。这又是个陷阱,字面上理解是主显示器,而事实上他是指Screen.Monitor[0]这个显示器。 dmMainForm 将窗体显示到主窗体所在的显示器 dmActiveForm 将窗体显示到桌面上活动窗体所在的显示器TCustomForm更有一个只读的共有属性(没有Published)Monitor,他提供了访问窗体所在显示器实例的引用,这个值和DefaultMonitor是有紧密的关联的。那么怎么在使窗体在不同的显示器之间移动呢?这并不困难,估计你也想到了。这里介绍两种方法:第一, 能设置TCustomForm的Top和Left使窗体显示在桌面的任意位置。正如前面所述,桌面是由所有显示器组成的。他们有一起的坐标系,所以能根据显示器的逻辑位置决定窗体的位置。目前的问题是怎么获得每个显示器的逻辑位置和尺寸,后面就会介绍。第二, 能调用TCustomForm的MakeFullyVisible方法将窗体完全显示到指定的显示器之中。能通过这个方法避免窗口在两个显示器上各显示一部分。刚才我们提出了一个问题:怎么获得每个显示器的逻辑位置和尺寸。为了解答这个问题,需要再介绍连个类:TScreen和TMonitor。TScreen描述和显示设备有关的一些信息,我们主要关心和显示器逻辑位置和尺寸有关的信息。其他方面的内容能在Delphi的文件中获知。在程式运行的时候VCL自动创建一个TScreen的实例??全局变量,所以通常情况下程式是不必实例化TScreen的。TScreen有一组形如Desktop*的属性,这些属性描述了整个桌面的尺寸和各顶点坐标。更有对研发多显示器应用程式有重要意义的连个属性:MonitorCount和Monitors。通过这两个属性我们能枚举出系统中所有的显示器(TMonitor)的实例,每个实例都反映了相应显示器的相对位置和分辨率等信息(后文会周详说明)。在TScreen的众多属性之中,我们会找到Height和Width这两个属性。要特别警惕他们不是指整个桌面的尺寸,而是指主显示器的高度和宽度。这非常容易让人产生错觉,无以为是整个桌面的尺寸。和之类似的更有形如WorkArea*的一组属性,他们描述了主显示器的工作区域的尺寸和各顶点坐标。是不是觉得少了什么?为什么没有获取主显示器相对位置的属性?原因就像前面所说的:视窗系统是以主显示器的左上角为坐标系原点的,所以主显示器的相对位置必然是(0,0)。除了这些属性之外,还要介绍TScreen的三个成员函数:MonitorFromPoint,MonitorFromRect和MonitorFromWindow。顾名思义,他们分别是获取个坐标、某个区域和某个窗口所在的显示器的实例。在实际的研发中可能也会用到。最佳,再来看看TMonitor类。他封装了物理显示器的有关属性??这些属性都是只读的。下表简单介绍了这些属性的含义,他们对编写多显示器应用程式非常有用:属性 说明 Handle 获取该显示器的视窗系统句柄 MonitorNum 获取显示器的编号 Primary 获取该显示器是否是主显示器。又且仅有一个显示器的Primary是True。 Top 获取显示器的上边界 Left 获取显示器的左边界 Height 获取显示器的高度 Width 获取显示器的宽度 BoundsRect 获取显示器的对应桌面的区域,他和上面四个属性是等价的 WorkareaRect 获取显示器的工作区对应桌面的区域。清晰地了解了TScreen和TMonitor之后,前面的问题也就自然解决了。到这里,本文已介绍了研发多显示器应用程式所需的全部知识。相信你能利用这些知识研发出非常实用的软件产品。
『陆』 如何将Delphi应用程序转换为ActiveForm组件
每个控件都有一个Parent的指向父控件的属性,但Parent属性只是一个TWinControl类控件,也就是说只能访问TWinControl类所存在的属性和方法,像Name这种属性是有的,但Caption是没有的,如果你知道父控件具体是哪个类继承下来的话,可以通过类型转换来访问,如在一Form里放一按钮,通过按钮来显示Form的Name和Caption属性 procere TForm11.Button1Click(Sender: TObject); begin showmessage(button1.Parent.Name); //name是TWinControl的属性,可以直接访问 showmessage(TForm(button1.Parent).Caption);//caption要通过类型转换访问
『柒』 delphi的activeform窗体上的speedbutton在鼠标离开后不变平
把speedbutton的Flat属性改为True
『捌』 如何用Delphi编写ActiveX控件
首先单击delphi7之后会打开一个Project1关闭此工程新建工程新建Active Form窗体添加一个Button按钮,添加事件procere TActiveFormX.Button1Click(Sender: TObject);beginshowmessage('This is ActiveX test!');end;工程文件目录如果以下发布选项是灰色时Web Deployment OptionsWeb Deploy再创建一个新窗体File->New->Other-ActiveX->Active Form此时的Web Deployment选项已经可以使用设置发布选项点击Web deploy发布后的工程目录位置以及相关文件在运行中执行或做成批处理*.bat执行注册ocxRegSvr32 /s ActiveFormProj1.ocx注销ocxRegSvr32 /u ActiveFormProj1.ocx运行测试页面ocx控件被阻止允许控件运行,请点击是。控件显示异常当页面不能正常显示时,请注释以下License(GUID)[delphi] view plainprocere TActiveFormX.Button1Click(Sender: TObject);beginshowmessage('This is ActiveX test!');end;initializationTActiveFormFactory.Create(ComServer,TActiveFormControl,TActiveFormX,Class_ActiveFormX,1,'{F3B4BC72-4399-4F8B-941C-0D5C6099DFCA}',OLEMISC_SIMPLEFRAME or OLEMISC_ACTSLIKELABEL,tmApartment);end.并换成'',[delphi] view plain<pre name="code" class="delphi" style="margin-top: 4px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; background-color: rgb(240, 240, 240); ">procere TActiveFormX.Button1Click(Sender: TObject);beginshowmessage('This is ActiveX test!');end;initializationTActiveFormFactory.Create(ComServer,TActiveFormControl,TActiveFormX,Class_ActiveFormX,1,'',//'{F3B4BC72-4399-4F8B-941C-0D5C6099DFCA}',OLEMISC_SIMPLEFRAME or OLEMISC_ACTSLIKELABEL,tmApartment);end.</pre><p></p><pre></pre>编译工程并重新发布<br><br>ActiveX控件已经加载并正常显示<br><img src="http://hi.csdn.net/attachment/201108/31/0_1314781502RKaA.gif" alt=""><br><br>ActiveX控件测试成功!<br><img src="http://hi.csdn.net/attachment/201108/31/0_1314781508C7s6.gif" alt=""><br><br><br><p></p>
『玖』 delphi写的一个activeform简单控件实例用IE打开后只有一个框,无法显示label和button等信息
activeform是比较麻烦有时候的确让人莫名其妙一般问题 1 IE设置 2 网页中activeform ocx的版本设置 3 IE版本 较新的IE不知道如何 我没测试过 4 有时候重启电脑能解决一些不刷新的问题
『拾』 delphi中如何判断当前激活的是哪一个子窗体
delphi判断当前激活的是哪一个子窗体,可以使用WinAPI函数(如GetForegroundWindow获得当前活动窗体句柄);如果是自己编写的代码,则可以直接在代码里设计一个全局变量,用于记录当前的激活的子窗体。