怎样防止Delphi程序的重复执行?

wu_yongcai 2000-08-21 04:01:00
...全文
146 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wfmwg 2001-01-11
  • 打赏
  • 举报
回复
先在mainform中声明Hmutex: THandle;
然后在*.dpr 文件中:
Hmutex := CreateMutex(nil, false, '程序名');
if not (waitForSingleObject(hmutex, 0) <> wait_timeout) then
begin
Application.MessageBox('此程序已经运行,不能再次打开!', '警告!', MB_ICONERROR);
halt;
end
else
;;;;;
alin 2000-08-22
  • 打赏
  • 举报
回复
unit un_DoIExist;

interface

uses Windows,SysUtils,Classes;

function DoIExist(WndTitle : String) : Boolean;

implementation

function DoIExist(WndTitle : String) : Boolean;
var
hSem : THandle;
hWndMe :HWnd;
// hWndPrev : HWnd;
semNm,
wTtl : Array[0..256] of Char;
begin

Result := False;

//Initialize arrays
StrPCopy(semNm, WndTitle);
StrPCopy(wTtl, WndTitle);

//Create a Semaphore in memory - If this is the first instance, then
//it should be 0.
hSem := CreateSemaphore(nil, 0, 1, semNm);

//Now, check to see if the semaphore exists
if ((hSem <> 0) AND (GetLastError() = ERROR_ALREADY_EXISTS)) then
begin
CloseHandle(hSem);
//We'll first get the currently executing window's handle then change its title
//so we can look for the other instance
hWndMe := FindWindow(nil, wTtl);
SetWindowText(hWndMe, 'zzzzzzz');
//What we want to do now is search for the other instance of this window
//then bring it to the top of the Z-order stack.
hWndMe := FindWindow(nil, wTtl);
if (hWndMe <> 0) then
begin
if IsIconic(hWndMe) then
ShowWindow(hWndMe, SW_SHOWNORMAL)
else
SetForegroundWindow(hWndMe);
end;
Result := True;
//Could put the Halt here, instead of in the FormCreate method,
//unless you want to do some extra processing.
//Halt;
end;
end;

end.


//在主窗口创建时加入
Self.caption:='数据服务管理';
if DoIExist(Self.Caption) then Halt;

Nicrosoft 2000-08-21
  • 打赏
  • 举报
回复
用API函数FindWindow()找同样的窗口标题,如果返回0则说明没有实例运行,如果返回非0说明有实例已经运行(返回的是它的句柄),则将自己退出。
Delphi是全新的可视化编程环境,为我们提供了一种方便、快捷的Windows应用程序开发工具。它使用了Microsoft Windows图形用户界面的许多先进特性和设计思想,采用了弹性可重复利用的完整的面向对象程序语言(Object-Oriented Language)、当今世界上最快的编辑器、最为领先的数据库技术。对于广大的程序开发人员来讲,使用Delphi开发应用软件,无疑会大大地提高编程效率,而且随着应用的深入,您将会发现编程不再是枯燥无味的工作——Delphi的每一个设计细节,都将带给您一份欣喜。  1.1 Delphi基本概念介绍  1.1.1 Delphi的基本形式  Delphi实际上是Pascal语言的一种版本,但它与传统的Pascal语言有天壤之别。一个Delphi程序首先是应用程序框架,而这一框架正是应用程序的“骨架”。在骨架上即使没有附着任何东西,仍可以严格地按照设计运行。您的工作只是在“骨架”中加入您的程序。缺省的应用程序是一个空白的窗体(Form),您可以运行它,结果得到一个空白的窗口。这个窗口具有Windows窗口的全部性质:可以被放大缩小、移动、最大最小化等,但您却没有编写一行程序。因此,可以说应用程序框架通过提供所有应用程序共有的东西,为用户应用程序的开发打下了良好的基础。Delphi已经为您做好了一切基础工作——程序框架就是一个已经完成的可运行应用程序,只是不处理任何事情。您所需要做的,只是在程序中加入完成您所需功能的代码而已。 在空白窗口的背后,应用程序的框架正在等待用户的输入。由于您并未告诉它接收到用户输入后作何反应,窗口除了响应Windows的基本操作(移动、缩放等)外,它只是接受用户的输入,然后再忽略。Delphi把Windows编程的回调、句柄处理等繁复过程都放在一个不可见的Romulam覆盖物下面,这样您可以不为它们所困扰,轻松从容地对可视部件进行编程。 1.1.2 面向对象编程的概念  面向对象的程序设计(Object-Oriented Programming,简记为OOP)是Delphi诞生的基础。OOP立意于创建软件重用代码,具备更好地模拟现实世界环境的能力,这使它被公认为是自上而下编程的优胜者。它通过给程序中加入扩展语句,把函数“封装”进Windows编程所必需的“对象”中。面向对象的编程语言使得复杂的工作条理清晰、编写容易。说它是一场革命,不是对对象本身而言,而是对它们处理工作的能力而言。对象并不与传统程序设计和编程方法兼容,只是部分面向对象反而会使情形更糟。除非整个开发环境都是面向对象的,否则对象产生的好处还没有带来的麻烦多。而Delphi是完全面向对象的,这就使得Delphi成为一种触手可及的促进软件重用的开发工具,从而具有强大的吸引力。 一些早期的具有OOP性能的程序语言如C++,Pascal,Smalltalk等,虽然具有面向对象的特征,但不能轻松地画出可视化对象,与用户交互能力较差,程序员仍然要编写大量的代码。Delphi的推出,填补了这项空白。您不必自己建立对象,只要在提供的程序框架中加入完成功能的代码,其余的都交给Delphi去做。欲生成漂亮的界面和结构良好的程序丝毫不必绞尽脑汁,Delphi将帮助您轻松地完成。它允许在一个具有真正OOP扩展的可视化编程环境中,使用它的Object Pascal语言。这种革命性的组合,使得可视化编程与面向对象的开发框架紧密地结合起来。 1.2 Delphi 快速入门  在这一节中,我们来开发一个小程序。随着开发的过程,逐步介绍Delphi的主要部件及其操作方法。建议读者按照本书介绍的过程,在您的电脑上直接操作。您将对Delphi的可视化编程有一个直观、快捷的了解,必将起到事半功倍的效果。  1.2.1 进入Delphi的可视化编程环境 1.2.1.1 安装Delphi  Delphi的安装与其它应用软件并无不同。2.0版必须在Windows 95以上的操作系统中使用。启动Windows 95或Windows NT后,将Delphi的光盘放入光驱(CD-ROM)中,运行光盘上的\INSTALL\SETUP.EXE文件,它的安装程序会提示您正确地装入Delphi。如果您是在微软中文Windows环境中安装Delphi,请参照附录A来设置您的BDE环境,以便于处理中文数据。  1.2.1.2 进入Delphi 环境 为避免隐藏在Delphi后的Program Manager和曾经运行过的其它程序扰乱版面,分散您的注意力,不妨在启动Delphi前关掉其它应用程序;启动Delphi后,再最小化隐藏在后面的Delphi 2.0程序组。这样屏幕上就只留下Delphi窗口可见了。 首次加载Delphi,屏幕上会出现四个窗口: ● 标题为“Delphi-Project1”的Delphi主窗口 ● Object Inspector窗口 ● 标题为“Form1”的窗体(Form)窗口 ● 标题为“Unit1.PAS”的代码编辑窗口。刚启动时这一窗口的大部分被“Form1”窗体所掩盖。将“Form1”窗体移开,或单击Form1窗体下方的状态行,可以使其全部可见。在“Form1”窗体的任意可见位置单击鼠标,可以恢复主窗体可见 以下我们将对这四个窗口分别进行介绍。  1.2.2 Delphi可视化编程环境介绍  1.2.2.1 主窗口(Main Form)  Delphi的主窗口位于屏幕的上端,包括Menu(菜单)、Speed Bar(加速条)和Component Panel(部件选项板)。Menu是下拉式主菜单。Speed Bar位于主窗口的左下端,由两排共14个加速按钮组成。这些按钮是菜单功能的快捷方式,各种图标直观地表示了它能执行的动作。Component Panel由一行、若干页对象按钮所组成,利用它来选择需要的部件并将它放到窗体中去。  1.2.2.2 Object Inspector(对象检视器)  Object Inspector窗口含有两页:Properties页显示窗体中当前被选择部件的属性信息,并允许改变对象的属性;Events页列出了当前部件可以响应的事件。按动Object Inspector下端的“Events”页标签,使得Events页可见,这一定的事件后边的空白处,可以定义对象接受到相应事件时执行的动作。首次启动时,Object Inspector窗口显示的是当前窗体Form1的属性。Object Inspector根据对象属性的多少,决定是否有滚行显示。移动滚行条,可以查看当前对象的全部属性。 此外,Object Inspector上还有Object Selector(对象选择器),位于Object Inspector上方的下拉式菜单中。它显示了窗体上所有部件的名称和类型,也包含窗体本身。您可以用Object Selector很容易地在窗体的各个部件之间切换,也可以快速地回到窗体本身。当窗体中含有较多的对象时,您会发现这是切换对象尤其是回到窗体的最快捷途径。 想使Object Inspector一直可见,可将鼠标移到Object Inspector上,按动右键,以启动Object Inspector的弹出式菜单,将其设置为Stay On Top。这对初学者常是一个很重要的设置方式。  1.2.2.3 窗体窗口  Forms窗口是开展大部分设计的工作区域。首次启动Delphi 2.0时显示的是窗体Form1。可以把部件放在窗体中,通过移动位置、改变尺寸等操作随心所欲地安排它们,以此来开发应用程序的用户界面。您可以把窗体想象成一个可以放置其它部件的容器。窗体上有栅格(Grids),供放置部件时对齐位置用,在程序运行时Grids是不可见的。 一个真正的应用程序可能有不止一个窗口,您可以选用不同的窗体进行设计。其它窗体可以是对话框(Dialog Box)、数据录入框等。  1.2.2.4 代码窗口  代码窗口一开始处于窗体窗口之下。因为在Delphi中,设计用户界面直接在窗体中进行,运行结果和设计样板完全一致。当部件被放到窗体上时,Delphi会自动生成大部分的用户界面代码。您所应做的只是在它为您生成的框架中加入完成所需功能的程序段而已。点动Form1的状态行使代码窗口可见。 这个窗口中是代码编辑器。可以在其中书写Delphi应用程序的源代码。当程序中含有不止一个窗口时,会有几个库单元的源程序出现在代码编辑器中。代码编辑器的标题条中显示了当前正在编辑的库单元文件名。要查看某一特定程序的源代码,只需用鼠标点动写有该库单元文件名的页标签,就可以对该库单元进行编辑了。
目录 一、简介 2 1.Delphi 2 2.数据库 3 二、系统设计 4 1、数据库的建立 4 2、管理系统建立 6 3、 实现功能 11 三、结论 13 一、简介 1.Delphi Delphi是Borland公司推出的可视化编程环境,它提供了一种方便、快捷的Windows应 用程序开发工具。它使用了Microsoft Windows图形用户界面的许多先进特性和设计思想,采用了可重复利用的完整的面向对象 程序语言(Object-Oriented Language)、当今世界上最快的编辑器、最为领先的数据库技术。Delphi是优秀的可视 化开发工具,不仅简单、易于掌握而且功能强大,使用Delphi开发应用软件,会大大地 提高编程效率。 Delphi是Pascal语言有天壤之别。一个Delphi程序首先是应用程序框架,而这一框架 正是应用程序的"骨架"。在"骨架"上即使没有附着任何东西,仍可以严格的按照设计运 行。用户的工作只是在"骨架"中添入自己的程序。默认的应用程序是一个空白的窗体"F orm",可以直接运行,结果得到一个空白的窗口,这个窗口具有Windows窗口的全部性质 :可以被放大、缩小、移动最大化、最小化等,但没有编写程序代码。因此,可以说应 用程序框架通过提供所有应用程序共有的东西,为用户应用程序的开发打下良好的基础 。用户所需要做的,只是在应用程序中中假如完成所需功能的代码而已。 Delphi具有以下的特性:基于窗体和面向对象的方法,高速的编译器,强大的数据库 支持,与Windows编程紧密结合,强大而成熟的组件技术。但最重要的还是Object Pascal语言,它才是一切的根本。 Object Pascal语言是在Pascal语言的基础上发展起来的,简单易学。 Delphi提供了各种开发工具,包括集成环境、图像编辑(Image Editor),以及各种开发数据库的应用程序,除此之外,还允许用户挂接其它的应用程 序开发工具。在Delphi众多的优势当中,它在数据库方面的特长显得尤为突出:适应于 多种数据库结构,从客户机/服务机模式到多层数据结构模式;高效率的数据库管理系 统和新一代更先进的数据库引擎;最新的数据分析手段和提供大量的企业组件。 Delphi这个名字源于古希腊的城市名。它集中了第三代语言的优点。以Object Pascal为基础,扩充了面向对象的能力,并且完美地结合了可视化的开发手段。Delphi 自1995年3 月一推出就受到了人们的关注,并在当年一举夺得了多项大奖。 Delphi的出现打破了V承可视化编程领域一统天下的局面。并且Delphi使用了本地编译 器直接生成技术,使程序执行性能远远高于其它产品生成的程序。它还是真正的面向 对象的编程语言。PASCAL语言的严谨加上可视化的优势和强大的数据库功能使得它有充 分的资本和微软的VB叫板。许多人当时都认为Pascal 是最有前途的程序设计语言,并预测Delphi将会成为可视化编程的主流环境。 Delphi在你编好程序后自动转换成.EXE文件它运行时速度比VB快,而且编译后不需要 其他的支持库就能运行。它的数据库功能也挺强的,是开发中型数据库软件理想的编程 工具。 Delphi适用于应用软件、数据库系统、系统软件等类型的开发。而且它拥有和VB差不多 一样的功能,而且一样能应用API函数,这在控制Windows很有用。 Delphi是全新的可视化编程环境,为我们提供了一种方便、快捷的Windows应用程序开 发工具。它使用了Microsoft Windows图形用户界面的许多先进特性和设计思想,采用了弹性可重复利用的完整的面向 对象程序语言(Object-Oriented Language)、当今世界上最快的编辑器、最为领先的数据库技术。对于广大的程序开发人 员来讲,使用Delphi开发应用软件,无疑会大大地提高编程效率,而且随着应用的深入 ,您将会发现编程不再是枯燥无味的工作——Delphi的每一个设计细节,都将带给您一份 欣喜。 2.数据库 数据库是存储在一起的相关数据的集合,这些数据是结构化的,无有害的或不必要的 冗余,并为多种应用服务;数据的存储独立于使用它的程序;对数据库插入新数据,修 改和检索原有数据均能按一种公用的和可控制的方式进行。当某个系统中存在结构上完 全分开的若干个数据库时,则该系统包含一个"数据库集合"。 数据库是"按照数据结构来组织、存储和管理数据的仓库"。在数据管理的日常工作中 ,常常需要把某些相关的数据放进这样"仓库",并根据管理的需要进行相应的处理。 数据库发展阶段大致划分为如下几个阶段:人工管理阶段;文件系统阶段;数据库系 统阶段;高级数据库阶段。使用数据库可以带来许多好处:如减少了数据的冗余度,从 而大大地节省了

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧