说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Delphi使用心得

HTML文档下载 WORD文档下载 PDF文档下载
Delphi使用心得

Delphi是Borland公司推出的一个可视化、面向对象的快速应用程序开发工具,继16位的1.0版本后,又推出了32位的2.0、3.0版本,很受开发人员的欢迎。下面就将我在学习Delphi过程中的一些心得奉献给大家,希望能给您带来帮助和启示。

一、如何使Form在不同的聊环直率下显示出同样大小?

我喜欢把我的15英寸显示器置于800×600的模式下,因为这时的色彩和字体都比较好看,但是在这种模式下用Delphi设计的程序运行于别的机器上时往往由于分辨率不同、字体大小不同显得很难看,相信不少朋友和我一样遇到同样的情况,当然我们可以“强迫”别人也使用800×600的分辨率。那么有没有办法使自己的程序“专业化”一些,能够自适应屏幕的分辨率呢,答案是肯定的,因为Delphi 提供了ScaleBy这个过程,利用这个过程我们可以在FormCreate时轻易地控制form 的外观。实现的代码如下:

implementation

const

ScreenWidth:LongInt=800;

ScreenHeight:LongInt=600;

{I designed my form in 800×600 mode.}

{$ R*.DFM}

procedure TMainForm.FormCreate(Sender:TObject);

var

OldFormWidth:integer;

begin

Scaled:=TRUE;

if(Screen.width <> ScreenWidth)then

begin

OldFormWidth:=Width

Height:=longint(Height)*longint(Screen.Height)DIV ScreenHeight;

Width:=longint(Width)*longint(Screen.Width)DIV ScreenWidth;

ScaleBy(Screen.Width

ScreenWidth);

Font.Size:=(Width DIV OldFormWidth)*FontSize;

end;

end;

二、如何判断一个程序是否已在运行?

在某些时候我们通常需要自己编制的程序只可以有一份拷贝在运行,如何作到这一点呢?通常我们可以用GetWindowsWord获得窗口句柄,再用GetClassName获得并比较ClassName来达到目的。

...

Result:=true;

if GetWindowWord (Wnd

Gww_HINSTANCE)

=hPrevInst then

begin

GetClassName(Wnd

ClassName

30);

if StrIComp(ClassName

'TApplication')=0 then

begin

TargetWindow^:=Wnd;

Result:=false;

end;

end;

...

后来我曾在网上看过一段关于此方面的说明,它介绍了另一种方法,是通过在内存中建立旗语标志实现此功能的,试了一下效果很好,具体的过程见下面的程序与注释:

unit prevcode;

interface

uses

Windows

Messages

SysUtils

Classes

Graphics

Controls

Forms

Dialogs

type

TForml=class(TForm)

procedure FormCreate(Sender:TObject);

private

{Private declarations}

public

{Public declarations}

end;

function DoIExist(WndTitle:String):Boolean;

var

Form1:TForm1;

implementation

{$R*.DFM

function DoIExist(WndTitle:String):Boolean;

var

hSem:THandle;

hWndMe

hWnPrev:HWnd;

semNm

wTtl:Array[0..256]of Char;

beigin

Result:=False;

StrPCopy(semNm

'SermaphoreName');

StrPCopy(wTtl

WndTitle);

hSem:=CreateSemaphore(nil

0

1

semNm);//如果第一次运行则建立一个标志

//检查这个标志是否存在

if(hSem <> 0)AND(GetLastError()=ERROR_ALREADY_EXISTS))then

begin

CloseHandle(hSem);

hWndMe:=FindWindow(nil

wTtl);//获得当前运行的窗口句柄,改变标题

SetWindowText(hWndMe

'zzzzzzz');//这样才可以寻找其他instance

//寻找这个视窗的instance

然后将它置于Z-order顶层

hWndMe:=FindWindow(nil

wTtl);

if(hWndMe <> 0)then

begin

if IsIconic(hWndMe) then ShowWindow (hWndMe

SW_SHOWNORMAL)

else

SetForegroundWindow(hWndMe);

end;

Result:=True;

end;

end;

procedure TForm.FormCreate(Sender:TObject);

begin

if DOIExist(Self.Caption)then

Halt;

end;

看Go桌面技术副总,如何解读Facebook Home 增长最快的游戏公司Supercell 你学得会? 移动周报:为什么我们出不了IT神童? AWS、VMware和OpenStack谁是赢家? 消息称苹果正在寻找新任CEO取代库克 请别人云亦云 PC仍然重要且活得很好 比预想晚几年!IBM x86服务器或终将卖给联想 App推广的节操呢? iMessage垃圾短信产业链暗访 Apkudo CEO访谈:免费为Android开发者提供测试 Web API核查表:设计、测试、发布API时需思考的43件事 开源Android构建工具Buck 速度超Ant两倍 从史上八大MySQL事故中学到的经验 OpenStack Heat向应用市场更近一步 初创公司Ionic Security:云安全必须与时俱进 谷歌董事长:一年后消费者才能用上Goolge Glass Windows 8.1重新推出的“开始按钮”毫无意义 手眼并用 代码泄露三种Google Glass手势操作 Google新论文 CPI&#178;:基于Linux的世界级跨数据中心服务器CPU监控 20款非常实用的Web工具和资源列表 数据库界大事件 随机写性能巨好的TokuDB开源了 CMDN Club 26期:数字渠道营销主题沙龙 暴强:用iOS设备控制的HTML5“小蜜蜂”游戏 Leap Motion:500元体感,精确到0.01毫米 大事件:三大运营商将发布融合计费SDK 再培养一个扎克伯克:六款适合儿童上手编程的App 首届中国软件工程标准高峰论坛:软件开发的新机遇与挑战 Verizon研究显示:中国成为2012年度网络间谍攻击的主要来源 Clang宣布全面支持C++11标准 北大陈钟:SEMAT—中国软件工程发展的新机遇 超华尔街预期:苹果第二财季营收为436亿美元 跨平台游戏引擎Spaceport已被Facebook收购 ■■■各位大侠,NEC中科院软件研究所让我去面试,不知道这个公司怎么样,有两年的工作经验能拿到多少钱啊?谢谢各位!!! 焦点问题,谁能帮我看一下这段代码!! keyboard err or no keyboard present 据说 它慢,开发的桌面的程序不好!!!那么,我们用JAVA 主要做些什么呢? 我们的头让我搞一个会员系统,不知如何着手,有例子吗? 如何在Linux中设置磁盘限额 关于sqlserver和 page faults/sec的问题 如何将String类型转换成Blob类型 盼望高手指教 小弟想请教众位高手一人关于intraweb 这组控件的一个小问题,还望大家不吝赐教,100分送上! keyboard err or no keyboard present 相信这是一个不可回避的问题:有关VB和SQL,欢迎有兴趣者前往... 如何确定一个treeview下的node是否有子节点? 庆祝菜鸟程序员联盟成立,特来散分~~ 中文转换问题!!在线等待!! php安装在编译时有个vpopmail的选项是有什么用的? 100分紧急求救,SQL Server 2000日志问题 为什么三层结构下某些小数不能保存? 100分求助,关于图形处理 庆祝菜鸟程序员联盟成立,特来散分~~ 请问如何设置wingate的server端? 请帮忙给一个能在短时间内做成一个网站(功能很简单)的思路 如何创建一个DialogBar 有关目录问题。 .................寻找最佳方法::『关于关键字检索』(参与有分!) 有谁做过小波分析的分解及重构程序 口误(爆笑) 救命阿 急!在线等 如何补捉MSCOM控件的错误消息? 如何查看dll中的函数,不是引出函数 有没有初恋(第一次)的对象就成了自己的伴侣的? 在线等待,马上送分:怎样将Query查询的数据集全部删除,数据库SQL中的数据也删除 iostream.h 和 iostream的区别 我新建了一个dialog,我想让他在程序一开始出现 为什么在win xp 下安装vc7.0后不能导入图片资源? 请问用C++ 如何打开数据库 请教高手有关C#的DLL的使用???? 我想找一个比较好的菜单系统,哪有呢? iis5.0中的调试能不能做到象在pws中一样轻松? 在线等待,马上送分:怎样将Query查询的数据集全部删除,数据库SQL中的数据也删除 大家一定遇到过同样的问题!有好办法吗? 如何扩充linux的硬盘空间? 关于JBuilder7的注册码和key 一点小问题,请帮帮忙 请教:哪边有详细介绍使用VBSQL对DB库API编程的?? 急!!!我用push模式把dataset的值在运行时,动态赋给crystal report, 在有.net的开发环境中运行没有任何问题,可是在只有发布后,执行 在线等待,马上送分:怎样将Query查询的数据集全部删除,数据库SQL中的数据也删除 linux下的图形处理程序,哪里可找到? EJB菜鸟级问题,我有分可捐赠,那位要请在这里说 报错的原因(Invalid cursor state) infopower有没有for BCB5的呢??哪里可以下载??
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘