当前位置:文档之家› delphi编写调用有窗体有返回值的dll的实现方x页

delphi编写调用有窗体有返回值的dll的实现方x页

delphi编写调用有窗体有返回值的dll的实现方x页
delphi编写调用有窗体有返回值的dll的实现方x页

delphi编写调用有窗体有返回值的dll的实现方法

本人使用的delphi是5.0版,用delphi编写dll工程很简单,在新建。。中就有创建Dll的选项。在编写DLL工程时,需要注意的包括,工程单元有很大差异,一个关键字是program ,一个关键字是library。dll工程单元中还包括exports 子句,那些需要提供给其他主叫程序调用的过程,都需要包括在exports中(只是列出函数的名字,不需要参数表)。对于主叫方(调用dll的应用程序或者其他dll),则需要在调用之前进行外部声明,即external保留字指示的声明。

另外需要了解object pascal中有关调用协议的内容,在object pascal中对于过程或函数有以下五种调用协议:

指示字参数传递顺序参数清除者参数是否使用寄存器

register 自左向右被调例程是

pascal 自左向右被调例程否

cdecl 自右向左调用者否

stdcall 自右向左被调用例程否

safecall 自右向左被调用例程否

这里的指示字就是在声明函数或过程时附加在例程标题之后的保留字,默认为register,即是唯一使用CPU寄存器的参数传递方式,也是传递速度最快的方式;

pascal: 调用协议仅用于向后兼容,即向旧的版本兼容;

cdecl: 多用于C和C++语言编写的例程,也用于需要由调用者清除参数的例程;

stdcall: 和safecall主要用于调用Windows API 函数;其中safecall还用于双重接口。

现在以一个实例来说明一个用delphi编写的程序如何调用包含form窗体dll的程序。

Dll工程:

library Project2;

{ Important note about DLL memory management: ShareMem must be the

first unit in your library's USES clause AND your project's (select

Project-View Source) USES clause if your DLL exports any procedures or

functions that pass strings as parameters or function results. This

applies to all strings passed to and from your DLL--even those that

are nested in records and classes. ShareMem is the interface unit to

the BORLNDMM.DLL shared memory manager, which must be deployed along

with your DLL. To avoid using BORLNDMM.DLL, pass string information

using PChar or ShortString parameters. }

uses

SysUtils,

Classes,

Unit1 in 'Unit1.pas' {Form1};

{$R *.RES}

exports

Execute name 'Execute';{过程来自于Unit1}

begin

end.

——————————————————————————————————————

unit Unit1;

interface

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, Db, ADODB;

type

TForm1 = class(TForm)

ADOcon: TADOConnection;

Memo1: TMemo;

private

{ Private declarations }

public

{ Public declarations }

end;

function Execute(ApplicHandle: TApplication; MainHandle: THandle; AdoObj: TADOConnection; AdoConnectionString: PChar): boolean; stdcall; export;

var

Form1: TForm1;

implementation

{$R *.DFM}

function Execute(ApplicHandle: TApplication; MainHandle: THandle; AdoObj: TADOConnection; AdoConnectionString: PChar): boolean; stdcall; export;

var

oldhandle: THandle;

begin

OldHandle := Application.Handle; ;

Application.handle := ApplicHandle.handle;

Application.CreateForm(Tform1, Form1);

:= adoobj.ConnectionString;

;

;

;

form1.ShowModal;

form1.Free;

form1 :=nil;

Application.handle := OldHandle;

end;

end.

调用dll程序的程序:

program call_dll;

uses

Forms,

Ubtn in 'Ubtn.pas' {Form1};

{$R *.RES}

begin

Application.Initialize;

Application.CreateForm(TForm1, Form1);

Application.Run;

在VB中调用DLL的方法

1制作好DLL之后,就可以用VB调用它,实现VB调用C程序。VB程序要使用DLL中的函数,首先必须要有特殊的声明,用Declare声明语句在窗体级或模块级或全局模块的代码声明段进行声明,将动态链接库中的函数声明到VB中,供VB程序调用。 语句格式为:Declare Sub过程名Lib[Alias"别名]([ByVal参数AS类型]),或为Declare Function函数名Lib[Alias"别名]([ByVal参数AS类型])AS类型在声明中首先用Declare 关键字表示声明DLL中的函数。在C语言中有的函数类型为VOID,它表示不具有返回值,则必须用关键字Sub将其声明成过程。有的函数具有返回值,则必须用关键字Function将其声明成函数,并且在声明语句的最后要用AS关键字指明函数返回值的类型。 例如上面的ADD.DLL在VB中就可以声明为: Declare Function ADD Lib“c:\ADD.dll”(ByVal X AS Integer,ByVal Y AS Integer,ByVal filein asstring)AS Integer 通过此声明语句将函数ADD声明到VB中,便可直接调用。 2、dll文件中的函数好像是C语言写的, //函数名:int__stdcall GetMacNo(int*MacNo) //功能:获取卡机的卡机号(单机时) //参数:MacNo[0]-被读出的卡机号 //返回值:0-成功, //2-PC接收超时, //3-应答错误 dll的文件名是COMM232.dll 函数的形参int*MacNo是指针吗? 在VB中应该怎么声明和调用该函数? VB里也可以定义指针吗? 问题补充:vb调用dll文件中的函数我是会的,但这儿的形参有一个星号才不知是怎么一回事, 我是这样声明的对吗? Public Declare Function GetMacNo Lib"COMM232.dll"(ByVal MacNo As Integer)As Integer 又应该怎么调用呢?要先定义一个指针的变量再传给*MacNo还是要怎么做? 都说了MacNo是被读出的卡机号,那么就是传址的了。 dim l as integer dim m as integer l=GetMacNo(m) if l=0then label1.caption="卡机号:"&m elseif l=2then msgbox"PC接收超时" elseif l=3then msgbox"应答错误" end if

带有标题边框的窗体

package windoweffect; import java.awt.BorderLayout; import java.awt.Color; import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.Border; import javax.swing.border.EtchedBorder; import javax.swing.border.TitledBorder; public class WindowWithTitleBorder { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub DemoWindow6 dw = new DemoWindow6("带有标题边框的窗体"); dw.setBounds(dw.getToolkit().getScreenSize().width / 3, dw.getToolkit() .getScreenSize().height / 3, dw.getToolkit().getScreenSize().width / 3, dw.getToolkit() .getScreenSize().height / 3); dw.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); dw.setVisible(true); } }

DELPHI中如何调用API,可举例说明

DELPHI中如何调用API,可举例说明 第一部分Delphi知识1. 如果一个元件希望放到IDE的元件面板上,它必须从________类派生,如果一个元件能作为其它元件的容器,它必须从_____________类派生,如果一个元件在运行时可见,它必须从___________________类派生(A)TGraphicControl (B)TWinContr 1、rtl70.bpl是什么?有什么用? 2、delphi的Package相对dll有什么优点? 3、以下的记录(结构)变量在内存占多少字节?type a = packed record v1: Byte; v2: Word; v3: string[16]; v4: Double; v5: string; v6: TForm; end; 4、以下的写法是否正确?type a 1.您为什么选择软件开发这个行业?(30字左右简写); 2.如果有您解决不了的软件问题您会采取什么样的解决措施; 3.a.请您写出Object Pascal所支持的数据类型;b.请您写出Shl、Shr、Xor、Not 的数学表示法; 4.请您写出VCL结构层次(以TObject开始,最少五层);5 二.是非题(共20道)1.从主菜单上选择Project|Syntax Check 菜单选项,Delphi将编译从上次编译后有改动的任何单元,并报出遇到的错误。()2.Delphi的VCL对象有些是指针,从堆栈中分配空间,有些则不是。()3.粘贴时,如果作为容器的组件已被选择,

剪贴 一.选择题(共40道)1.用户开发程序时需要经常在窗体和编辑器窗口之间来回切换,可使用快捷键()。A、F12和F11 B、F12和F13 C、F12和Ctrl+F12 D、F12和Alt+F12 E、F12和Shift+F12 2.某函数如下:Function check(n,k:Integer):Integer; Var m:Integer; Beg 编程语言:delphi7.0或Vc++6.0 时间:4小时内环境:可参考帮助文档,但不能上网查资料1、编程查找指定目录下所有EXE 文件,并将其全路径存入Result.txt中,要求用递归。2、采用SOCKET(可用SOCKET API或delphi Socket控件)实现点对点传输大文件,要求不能掉

delphi之调用外部dll中的函数

分早绑定和晚绑定两种。 早绑定的代码如下: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; //MB 函数的声明: function MB(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer; stdcall; implementation {$R *.dfm} {调用外部 DLL 中的函数,譬如调用系统 user32.dll 中的 MessageBoxA} //function MB(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer; // stdcall; external user32 name 'MessageBoxA'; {其中 user32 是 Delphi 定义的常量 'user32.dll',可以直接写成:} //function MB(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer; // stdcall; external 'user32.dll' name 'MessageBoxA'; {name 后面说明函数的真实名字} {external 子句说明单元载入时就加载函数,也就是早绑定;如果晚绑定需要用LoadLibrary} {stdcall 指令表示参数传递是从右到左(Pascal则反之),不通过CPU寄存器

的窗体上添加1个名称为Image为Form1标题为“图片练习”的窗体上添加1个名称为Image1

基本题(1) 【解题思路】按照题目要求,通过图像框的Name、Width、Height题Picture属性设置图像框,Stretch属性用于设置图像框中的图形能自动放大或缩小以与图像框的大小相适应。 【操作步骤】 步骤1:建立界面,并设置控件的属性。程序中涉及的控件及属性见表3.127。 表3.127 步骤2:调试并运行程序,关闭程序后按题目要求存盘。 基本题(2) 【解题思路】在Command1_Click事件过程中,通过列表框的AddItem和RemoveItem方法将选中的列表项内容复制到已有列表项的尾部;在Command2_Click事件过程中,通过列表框的RemoveItem方法将选中的列表项内容删除。 【操作步骤】 步骤1:建立界面,并设置控件的属性。程序中用到的控件及属性见表3.128。 表3.128 步骤2:编写程序代码。 参考答案 Private Sub Command1_Click() List1.AddItem List1.Text List1.RemoveItem List1.ListIndex End Sub Private Sub Command2_Click() List1.RemoveItem List1.ListIndex End Sub步骤3:调试并运行程序,关闭程序后按题目要求存盘。 简单题(1) 【解题思路】在计时器的Timer事件过程中,通过设置标签的Left属性值使其在原有基础上

加100来实现自左向右移动的功能。在"开始"按钮的单击事件过程中应启动计时器,禁用"移动"按钮,并改变其标题为"暂停"。在"退出"按钮的单击事件过程中要通过End语句停止程序。 【操作步骤】 步骤1:打开本题工程文件,并设置控件的属性。程序中涉及的控件及属性见表3.129。 步骤2:分析并编写程序代码。 程序提供代码 Dim flag As Integer Private Sub Form_Load() flag = 0 End Sub Private Sub Command1_Click() If Command1.Caption = "移动" Then 'Timer1.Enabled = ? Command1.Caption = "暂停" Else Timer1.Enabled = False Command1.Caption = "移动" End If End Sub Private Sub Command2_Click() End End Sub Private Sub Timer1_Timer() Select Case flag Case Is = 0 ''Label1.Left = Label1.Left ? 100 If Label1.Left + Label1.Width = Form1.Width Then flag = 1 Case Is = 1 'Label1.Left = Label1.Left ? 100 If Label1.Left = 0 Then flag = 0 End Select End Sub

为Form1、标题为“文本框练习”的窗体上添加1个名称为Text1的文本框

基本题(1) 【解题思路】MaxLength属性设置文本框中输入的字符串长度是否有限制。默认值为0,表示该单行文本框中字符串的长度只受操作系统内存的限制;若设置为大于0的数,则表示能够输入的最大字符数目。 【操作步骤】 步骤1:建立界面,并设置控件的属性。程序中用到的控件及属性见表3.162。 表3.162 步骤2:调试并运行程序,关闭程序后按题目要求存盘。 基本题(2) 【解题思路】按照题目要求设置标签和命令按钮的属性,在命令按钮的Click事件过程中,通过设置标签的FontSize属性值实现标签内容字体的放大和还原。 【操作步骤】 步骤1:建立界面,并设置控件的属性。程序中用到的控件及属性见表3.163和表3.164。 表3.163 表3.164 步骤2:编写程序代码。 参考答案 Private Sub Command1_Click() Label1.FontSize = Label1.FontSize + 2 End Sub Private Sub Command2_Click() Label1.FontSize = 12

End Sub 步骤3:调试并运行程序,关闭程序后按题目要求存盘。 简单题(1) 【解题思路】在Cmd Click 事件过程中,通过Select Case语句判断选择命令按钮数组的Index属性值,Case 0表示单击"开始"按钮,计时器Timer1和"暂停"按钮的Enabled属性为True,状态变为可用,且如果Cmd(0)的Caption属性是"开始"按钮,那么Cmd(0)的Caption属性变为"继续",且Cmd(0)为不可用,单击"继续"按钮,则Timer1接着开始工作,"继续"按钮变为不可用,"暂停"按钮变为可用。同理Case 1表示单击"暂停"按钮,则Timer1停止工作,"暂停"按钮变为不可用,"继续"按钮变为可用;Case 2表示单击"结果"按钮,则结束程序运行。 Timer1 Timer 事件过程通过If判断语句,实现秒向分钟,分钟向小时的转换,并在三个文本框中显示出来。 【操作步骤】 步骤1:打开本题工程文件,画1个计时器timer1,设置计时器Interval属性为1000,Enabled属性设置为False。 步骤2:分析并编写程序代码。 程序提供代码 Dim t(3) As Integer Private Sub Cmd_Click(Index As Integer) ' Select Case ? Case 0 'Timer1.Enabled = ? Cmd(1).Enabled = True If Cmd(0).Caption = "开始" Then Cmd(0).Caption = "继续" End If 'Cmd(0).Enabled =? Case 1 Timer1.Enabled = False Cmd(0).Enabled = True Cmd(1).Enabled = False Case 2 End End Select End Sub Private Sub Timer1_Timer() t(3) = t(3) + 1 ' If t(3) = ? Then t(3) = 0 t(2) = t(2) + 1 If t(2) = 60 Then t(2) = 0

易语言中调用DLL使用说明

易语言中调用DLL使用说明 基本说明 本文所描述的部分功能需易语言4.01或以上版本支持。 “在易语言中调用DLL”包含两方面的内容:调用Windows系统API函数;调用普通DLL函数。 下文用到的“调用API”或“调用DLL”等字眼,除非特别注明,一般都是指以上两方面之一或之和,视上下文而定。绝大多数情况下,无需明确区分调用的是系统API还是普通DLL。 目前易语言只支持以stdcall方式调用DLL中的导出函数。 Windows系统API一般都是以stdcall调用方式导出的,故在易语言中调用它们时通常不必考虑函数调用方式的问题。而普通DLL有可能导出“非stdcall调用方式”(比如cdecl)的函数,调用时需要特别注意。一般而言,考虑到通用性,DLL开发者都会选择导出以sdtcall方式调用的函数。(支持生成DLL的编程语言通常都支持导出stdcall调用方式的函数,具体实现请参考各编程语言手册。) 易语言编译生成的DLL,其导出函数全部为stdcall调用方式,所以在易语言中调用易语言生成的DLL不存在问题。 目前在易语言中调用DLL时只支持1字节对齐的结构(自定义数据类型) 如果DLL命令的某个参数或参数的某个成员是结构类型(自定义数据类型),则其对齐方式必须是1字节对齐。Windows系统API中所用到的结构都是1字节对齐的,故在调用API时不受此限制。但如果想用其它编程语言生成DLL供易语言调用且数据类型中包含了1或2字节数据长度的成员(如字符型或短整数),就需要考虑结构的1字节对齐。

在Delphi中,可以这样定义1字节对齐的结构(结构在Delphi中称为record): 在其它编程语言或编译器中的定义方式请参考各自的编程手册。 目前易语言支持调用任意复杂的DLL命令 只要满足了前面的两个条件——调用方式为stdcall,参数结构为1字节对齐——易语言支持调用任意复杂的DLL命令:参数除了可以是基本数据类型或普通结构类型外,还可以是基本类型地址或基本类型数组,也可以是结构类型地址或结构类型数组,结构类型的成员中还可以包含任意数量和任意层次的其它结构、结构地址、结构数组,等等。 DLL命令调用表 要在易语言中调用Windows API或普通DLL中的导出函数,必须首先在易语言中对该函数进行声明,声明的方式就是颇具易语言特色的“填写‘DLL命令调用表’”。“DLL命令调用表”正确填写完毕之后,就可以象调用普通易语言子程序一样调用DLL命令了。 下面重点说明“DLL命令调用表”的填写。 在易语言中,选择菜单“插入→DLL命令”即可插入一个空白的“DLL命令调用表”。当然还有其它操作方式,请参考易语言相关操作手册。

窗体练习

以教师表为窗体记录源: 1.将窗体的边框改为“对话框边框”,取消水平和垂直滚动条、记录选择器、 导航按钮和分隔线,窗体标题设置为“教师信息系统” 2.在窗体页眉节添加名称为bTitle,显示文本为“教师信息”的标签,要求 文字颜色为“棕色”(颜色代码:128),字体粗细为“加粗”,字号为30,左边距2cm,上边距1.5cm 3.在主体节添加名为TxtName的文本框,将其与教师姓名绑定,并以密码 的形式(“*”)显示 4.添加文本框:TxtGl,并让其显示教师的工龄,TxtBg,让其显示“学历” 5.添加组合框:CbZm,设置下拉列表中为“团员”、“党员”、“群众”、“其他” 6.按如下控件顺序设置Tab键次序: TxtName、TxtGl、TxtBg 、CbZm 以学生表为窗体记录源: 1.将窗体的边框样式改为“细边框”,窗体标题设置为“学生信息查询体统” 2.在窗体的页眉节区添加一个名为”bTitle”的标签,让其显示“学生信 息”,字号35,字体名称为“黑体”, 3.在主体节区添加一个选项组控件,命名为“opt”,选项组标签显示内容 为“团员否”,在选项组内放入两个选项按钮,分别命名为”opt1”、”opt2”,选项按钮标签显示内容为“团员”和“非团员”,值分别设置为-1和0,让其与“团员否”字段绑定,选项按钮标签名称分别为”bopt1”和”bopt2” 4.添加“选课成绩”子窗体,将子窗体的边框样式改为“细边框”,取消子 窗体的记录选择器、导航按钮 5.添加一个名为“CmdQuit”的退出命令按钮,按钮标题为“退出”,功能 是关闭窗体

6.在子窗体中添加“TxtAvg”的文本框,使其显示每个学生各门课程的平 均分,要求保留两位小数

如何用delphi制作DLL动态库方法

用Delphi制作DLL的方法 一Dll的制作一般步骤 二参数传递 三DLL的初始化和退出清理[如果需要初始化和退出清理] 四全局变量的使用 五调用静态载入 六调用动态载入 七在DLL建立一个TForM 八在DLL中建立一个TMDIChildForM 九示例: 十Delphi制作的Dll与其他语言的混合编程中常遇问题: 十一相关资料 一Dll的制作一般分为以下几步: 1 在一个DLL工程里写一个过程或函数 2 写一个Exports关键字,在其下写过程的名称。不用写参数和调用后缀。 二参数传递 1 参数类型最好与window C++的参数类型一致。不要用DELPHI的数据类型。 2 最好有返回值[即使是一个过程],来报出调用成功或失败,或状态。成功或失败的返回值最好为1[成功]或0[失败].一句话,与windows c++兼容。 3 用stdcall声明后缀。 4 最好大小写敏感。 5 无须用far调用后缀,那只是为了与windows 16位程序兼容。 三DLL的初始化和退出清理[如果需要初始化和退出清理] 1 DLLProc[SysUtils单元的一个Pointer]是DLL的入口。在此你可用你的函数替换了它的入口。但你的函数必须符合以下要求[其实就是一个回调函数]。如下: procedure DllEnterPoint(dwReason: DWORD);far;stdcall; dwReason参数有四种类型: DLL_PROCESS_ATTACH:进程进入时 DLL_PROCESS_DETACH进程退出时 DLL_THREAD_A TTACH 线程进入时 DLL_THREAD_DETACH 线程退出时 在初始化部分写: DLLProc := @DLLEnterPoint; DllEnterPoint(DLL_PROCESS_ATTACH); 2 如Form上有TdcomConnection组件,就Uses Activex,在初始化时写一句CoInitialize (nil); 3 在退出时一定保证DcomConnection.Connected := False,并且数据集已关闭。否则报地址错。 四全局变量的使用 在widnows 32位程序中,两个应用程序的地址空间是相互没有联系的。虽然DLL在内存中是一份,但变量是在各进程的地址空间中,因此你不能借助dll的全局变量来达到两个应用

无标题栏和边框的窗体

技巧1 无标题栏和边框的窗体 如果希望制作无标题栏和边框的窗体,那么可以使用API函数。 在VBE窗口中单击菜单“插入”→“用户窗体”,双击窗体,在其代码窗口中输入下面的代码: #001 Private Declare Function DrawMenuBar Lib "user32" (ByVal Hwnd As Long) As Long #002 Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal Hwnd As Long, ByVal nIndex As Long) As Long #003 Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal Hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long #004 Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long #005 Private Const GWL_STYLE As Long = (-16) #006 Private Const GWL_EXSTYLE = (-20) #007 Private Const WS_CAPTION As Long = &HC00000 #008 Private Const WS_EX_DLGMODALFRAME = &H1& #009 Private Sub UserForm_Initialize() #010 Dim IStyle As Long #011 Dim Hwnd As Long #012 If Val(Application.Version) < 9 Then #013 Hwnd = FindWindow("ThunderXFrame", Me.Caption) #014 Else #015 Hwnd = FindWindow("ThunderDFrame", Me.Caption) #016 End If #017 IStyle = GetWindowLong(Hwnd, GWL_STYLE) #018 IStyle = IStyle And Not WS_CAPTION

最新48取消窗体标题栏与边框汇总

48取消窗体标题栏与 边框

精品资料 取消窗体标题栏与边框 package com.swing05; import java.awt.EventQueue; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.JButton; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.Color; public class CancelFrameTitleBorder extends JFrame { private JPanel contentPane; private JTextArea textArea; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { CancelFrameTitleBorder frame = new CancelFrameTitleBorder(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public CancelFrameTitleBorder() { // 设置背景色 getContentPane().setBackground(new Color(240, 255, 仅供学习与交流,如有侵权请联系网站删除谢谢2

为Form1、标题为“列表框练习”的窗体上添加1个名称为List的列表框

基础题(1) 【解题思路】Sorted属性用于设置列表框中的项目是否按字母表顺序排序。可能的取值如下: True:列表框中的项目按字母表顺序排序。 False:列表框中的项目不按字母表顺序排序。 注意:Sorted属性必须在设计时设置,在运行时为只读属性。 【操作步骤】 步骤1:按照题目要求建立窗体和控件,并设置控件的属性。程序中用到的控件及属性见表3.167。 表3.167 步骤2:调试并运行程序,关闭程序后按题目要求存盘。 基础题(2)【解题思路】按照题目要求设置标签和命令按钮的属性,在命令按钮的Click事件过程中,通过标签的FontSize 属性值的动态设置实现标签内容字体的缩小和还原。 【操作步骤】 步骤1:建立界面,并设置控件的属性。程序中用到的控件及属性见表3.168和表3.169。 表3.168 表3.169 步骤2:编写程序代码。 参考答案 Private Sub Command1_Click() Label1.FontSize = Label1.FontSize - 2 End Sub Private Sub Command2_Click() Label1.FontSize = 12

End Sub 步骤3:调试并运行程序,关闭程序后按题目要求存盘。 简单题(1)【解题思路】根据题意,将考生文件夹下in3.dat文件中已按升序排列的30个整数读入一个维数组a中,同时运用Space函数和Str函数把这30个数值显示在Text1文本框内。在Cmd2 Click事件过程中,通过InputBox函数弹出输入对话框,接收用户输入的任意一个数,若接收的数为奇数,弹出"输入数为奇数,请重输!"提示重新输入。如果接收的偶数超出一维数组a的数值范围,Text2显示"已超出所给数值范围";否则,通过For循环语句和If判断语句在一维数组a中查找该数,若查找失败,则在Text2文本框内显示该数"不存在于数组中";否则显示该数在数组中的位置。 【操作步骤】 步骤1:打开本题工程文件,添加一个标签为"查找结果"的标签和一个初始内容为空的文本框。 步骤2:分析并编写程序代码。 程序提供代码 Option Base 1 Dim a(30) As Integer Private Sub Cmd1_Click() Open App.Path & "\in3.dat" For Input As #1 For m = 1 To 30 Input #1, a(m) Text1 = Text1 + Str(a(m)) + Space(2) Next m Close #1 End Sub Private Sub Cmd2_Click() Dim num As Integer, n As Integer num = InputBox("请输入待查找的数") ' If num / 2 ? Fix(num / 2) Then MsgBox "输入数为奇数,请重输!",, "检查" Exit Sub End If ' If num < a(1) ? num > a(30) Then Text2.Text = Str(num) + "已超出所给数值范围" Exit Sub End If For n = 1 To 30 ' If a(n)= ? Then Text2.Text = Str(num) + "是数组中的第" + Str(n) + "个值" Exit For End If Next n 'If n ? 30 Then Text2.Text = Str(num) + "不存在于数组中" End If End Sub 程序结束 参考答案 第1个?处填入:<> 第2个?处填入:Or 第3个?处填入:num

delphi中dll综合运用的例子

delphi中dll综合运用的例子(动态加载插件) 2008年01月15日星期二 10:59 1,新建dll客户端模块 ---------------dll工程文件PlugIns.dll------------------------------- library PlugIns; { Important note about DLL memory management: ShareMem must be the first unit in your library's USES clause AND your project's (select Project-View Source) USES clause if your DLL exports any procedures or functions that pass strings as parameters or function results. This applies to all strings passed to and from your DLL--even those that are nested in records and classes. ShareMem is the interface unit to the BORLNDMM.DLL shared memory manager, which must be deployed along with your DLL. To avoid using BORLNDMM.DLL, pass string information using PChar or ShortString parameters. } uses SysUtils, Classes, PlugInFrm in 'PlugInFrm.pas' {FrmPlugIns}; {$R *.res} //输出接口函数 exports ShowDLLForm,GetCaption; begin end. -------------新建模块PlugInFrm.pas的窗体文件--------------- unit PlugInFrm; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TFrmPlugIns = class(TForm) Label1: TLabel; private { Private declarations }

Photoshop的窗口由标题栏

Photoshop的窗口由标题栏、菜单栏、工具箱、工作窗口、控制面板、状态栏等六部分组成,如图2.1所示。 图2.1Photoshop5.5的窗口 工具箱中存放着各种编辑工具,使用方便。控制面板的主要作用是辅助工具栏,更改工具的设置。一些对图层、通道、历史纪录的操作也要在此完成。在菜单栏里的窗口选项中可以设置此栏中各项的显示与否,也可用鼠标拖动控制面板中的选项,按自己的习惯组合控制面板。状态栏则是用来显示当前图像的有关状态及一些简要说明和提示。 2.工具箱的使用 Photoshop的基本工具存放在工具箱中,一般置于Photoshop界面的左侧。当工具的图标右下角有一个小三角时,表示此工具图标中还隐藏了其他工具。用鼠标点中此图标不放,便可以打开隐藏的工具栏。点中隐藏的工具后,所选工具便会代替原先工具出现在工具栏里。当把鼠标停在某个工具上时,Photoshop会提示此工具的名称及快捷键。而在选定工具后可在右边的控制面板中的选项栏里修改工具的参数及设置(若屏幕上没有选项栏执行菜单【Window】\【Show Options】命令即可)。 工具的使用方法很灵活。这里先简单介绍几种重要工具的基本用法。 1)【选框】工具 【选框】工具是重要的选图工具,单击【选框】工具不放,会弹出如图所示的隐藏工具面板。选择工具共有上图所示五种工具,分别是【Rectangular Marquee Tool(M)】(矩形选框)工具,【Elliptical Marquee Tool(M)】(椭圆选框)工具,【Single Row Marquee Tool(M)】(单行选框)工具,【Single Column Marquee Tool(M)】(单列选框)工具,【Crop Tool(C)】(裁切)工具。【选框】工具用于在被编辑图像中选取一个工作区域。其中【Rectangular Marquee Tool(M)】(矩形选框)工具是用于选取一个任意矩形区域,【Elliptical Marquee Tool(M)】(椭圆选框)工具用于选取一个任意圆形或椭圆形区域,【Single Row Marquee Tool(M)】(单行选框)工具是用于选取图像中任一横行象素,【Single Column Marquee Tool(M)】(单列选框)工具用于选取图像中任一竖行象素,【Crop Tool(C)】(裁切)工具较特殊,用于裁切选框以外的部分,以重新设置图像大小。 2)【套索】工具

在Form1,标题为“显示记录”的窗体上画1个名称为Text1的文本框,其初始内容为空

基础题(1) 【操作步骤】 步骤1:新建一个窗体,在窗体上创建一个文本框控件。 步骤2:在属性窗口中,设置其Text属性为空。 步骤3:在文本框下方绘制一个命令按钮Command1。 步骤4:在属性窗口中,将Caption设置为"上一条记录"。 步骤5:复制命令按钮"上一条记录",在窗体的空白位置处粘贴对话框,单击"是"按钮,创建一个控件数组。 步骤6:再创建3个命令按钮. 步骤7:按照题目要求将复制的3个命令按钮的Caption分别设置为"下一条记录"、"第一条记录"和"最后一条记录",并将窗体的Caption设置为"显示记录"。 步骤8:选择"上一条记录"命令按钮,通过属性窗口设置Enable为False,选择"下一条记录"命令按钮,通过属性窗口设置Default为True.。 步骤9:将文件保存至考生文件夹下,且设置窗体文件名为sjt1.frm,工程文件名为sjt1.vbp。基础题(2) 【操作步骤】 步骤1:打开VB开发环境,新建一个窗体。 步骤2:在窗体中添加一个标签控件Lable1,在属性窗口中设置标签的Caption属性为"等级考试",然后设置其AutoSize属性为True,设置其BorderStyle属性为1。 步骤3:然后在窗体中添加一个计时器Timer1,设置其Interval属性为0,Enabled属性为True。步骤4:打开代码窗口,编写代码如下。 Private Sub Form_Load() Timer1.Interval = 1000 End Sub Private Sub Timer1_Timer() Label1.Visible = Not Label1.Visible End Sub 步骤5:运行程序,然后将文件保存至考生文件夹下,窗体文件名为sjt2.frm,工程文件名为sjt2.vbp。 简单题(1) 【操作步骤】 步骤1:打开本题工程文件。

窗口移动无边框各种方式

第一步: //先定义一个坐标点对象 mypoint private Point mypoint; 第二步:在窗体的点击事件中写 private void Form1_MouseDown(object sender, MouseEventArgs e) { //鼠标在窗体内按下时,自动记录鼠标的 x y 值,并将它们改为负数 mypoint = new Point(-e.X,-e.Y); } 第三步:在窗体的鼠标移动事件中写 private void Form1_MouseMove(object sender, MouseEventArgs e) { /* 鼠标在窗体内移动时,首先判断e.Button按下的是哪个鼠标按钮再判断 * 是否等于左键按下,MouseButtons.Left这句的意思是鼠标左 键按下状态 */ if (e.Button == MouseButtons.Left) { /*新建一个坐标点对象,它的坐标等于 (Control.MousePosition;) * 桌面上坐标的位置 */ Point myposition = Control.MousePosition; /* myposition.offset中的Offset是坐标平移的意思,现在将在窗体 * 内点击左键时产生的负数加进来,也就等于现在鼠标在桌面上的坐标 * 减去鼠标在窗体内的坐标位置,就等于现在窗体的位置 */ myposition.Offset(mypoint.X, mypoint.Y); /* this.DesktopLocation这句的意思是获取或设置窗体在桌

面上的位置 * 它的位置来自myposition */ this.DesktopLocation = myposition; } 其实这是个让人说过无数次的内容,但是最近在写一个测试小程序的时候发现了一个问题,今天没什么事做,就做个小的总结。 通过拖动窗体的客户区来移动一个窗体并不是很新鲜的内容,很多的程序都用到了这一点,尤其是一些可以换肤的程序。 这篇文章并不打算详细论述如何在C#下实现这一功能,因为它的代码实在是简单得不能再简单。这里简单说一下实现的原理: 首先说一个概念——窗体的客户区,窗体的客户区指的是一个窗体除了标题栏和边框以外的部分。 当我们的鼠标在窗体中移动的时候,会触发WM_NCHITTEST系统消息,MSDN中对这个消息的说明为:The WM_NCHITTEST message is sent to a window when the cursor moves, or when a mouse button is pressed or released. If the mouse is not captured, the message is sent to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse. (当光标移动或一个鼠标键被按下或释放时,WM_NCHITTEST消息会被发送到一个窗口中,如果光标没有被捕获,这个消息被送到光标下的窗口。否则这个消息被送到捕获了光标的窗口。) 这个消息被默认的(请注意是“默认的”)窗口过程(窗口过程这个概念后面再说)处理后,会根据触发这个消息时鼠标的位置返回一个值,例如当鼠标在窗口的标题栏上时,返回HTCAPTION;当鼠标在一个窗口的客户区中时,返回HTCLIENT;如果鼠标指向某个窗口的字窗口的“关闭”按钮或系统菜单(就是点击窗口图标后出现的那个菜单),就返回HTSYSMENU。 所以我们要做的就是骗!我们要欺骗Windows,当我们的鼠标在窗体的客户区中移动时,默认的窗口过程处理后会返回 HTCLIENT,Windows系统根据这个值进行相应的操作,把适当的消息插入到应用程序的消息队列(这个概念同样在后面讨论)中。这时如果我们做一些改变,人为地修改窗口过程的返回值,把HTCLIENT修改为HTCAPTION并返回给系统,系统就会认为鼠标这时在窗体的标题栏中,而拖动标题栏可以移动一个窗体,所以当我们在一个被这样修改后的应用程序的客户区按下鼠标并拖动时,Windows会认我们在拖动一个窗体的标题栏,于是它把一个移动窗体的消息插入到程序的消息队列中,再经过窗口过程的处理,就实现了我们需要的功能——拖动窗体的客户区移动窗体。

delphi如何调用C#的dll

delphi如何调用C#的dll delphi如何调用C#的dll 发表于2010-03-11 16:37:13 Idelphi如何调用C#的dll ?在你的环境变量Path中加入 C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin; C:\WINNT\https://www.doczj.com/doc/db15764670.html,\Framework\v1.1.4322 随便建立一个ClassLibrary 编译成DLL 文件切换到MS-DOS 命令行下面,运行:C:\>regasm out ClassLibrary1.DLL /regfile:ClassLibrary1.reg 上面的命令行是注册我们的.NET 组件,并且产生了一个备用的注册表文件。对应Windows 的注册COM 文件命令:regsvr32 c:\test.dll . 在.NET下面,注册.NET组件就需要上面的regasm命令了然后在MS-DOS 命令行下面,运行: C:\>tlbExp ClassLibrary1.dll /out:ClassLibrary1.tlb 上面的命令行表示将会产生一个.NET 组件的类型库 有了TLB 文件也就和正常的COM 组件一样了,运行Delphi 导入类型库文件TLB ........... 和正常的COM 调用一样发表于2010-03-11 17:32:21 2 以前用delphi 写的CS 程序今天客户要加几个模块上去,刚

好会点C# ,这后面模块就用C#写的编译成dll文件,在用delphi 调用C#写的dll文件时折腾好阵子就有了这些经 历写下来。一、打开vs2005 新建windows 应用程序项目命名为SFrm,删除应用程序自动生成的Program.cs (因为我们 是要生成dll 文件)在窗体类新建一接口(interface SHFRM) 让窗体类实现接口代码如下:using System;using System.Collections.Generic;using https://www.doczj.com/doc/db15764670.html,ponentModel;using System.Data;using System.Data.SqlClient;using System.Drawing;using System.Text;using System.Windows.Forms;namespace SFrm{public interface SHFRM // 此接口用在delphi 下调用必须用到{void ShchildFrm();}public partial class Form1 : Form,SHFRM{private BindingSource bindingSource1 = new BindingSource();private SqlDataAdapter dataAdapter = new SqlDataAdapter();public Form1(){InitializeComponent();}/// /// 显示窗口/// public void ShchildFrm(){Form1 frm = new Form1();frm.Show();}/// /// 按钮事件/// /// /// private void button1_Click(object sender, EventArgs e){dataGridView1.DataSource = bindingSource1;GetData("select * from Customers");}private void GetData(string selectCommand){try{String connectionString = "Data Source=.;initial catalog=Northwind;user id =sa;pwd=";dataAdapter = new SqlDataAdapter(selectCommand,

相关主题
文本预览
相关文档 最新文档