Delphi小技巧

Delphi编程实用小技巧(一)——listbox的拖拽 首先将listbox的属性:DrogMod  设置为dmAutomaticMultiselect 设置为 true代码:procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;  State: TDragState; var Accept: Boolean);begin a 阅读详情

==系统应用篇==
A.Delphi自代了大量的常用控件,如Delphi5就有一百多了,而今年出的Delphi6更是Delphi5的1.5倍。这么多控件,就是在1024*768的分辨率下也无法全部显示他们的组件面板,而每次要按那两颗小按钮来显示更多的面板,真是非常不方便!但通过添加下面那一个注册表键值就能实现组件面板自动展开:
  [HKEY_CURRENT_USER/Software/Borland/Delphi/X.0/Extras]
  "AutoPaletteSelect"="1"
  (注:X.0表示你的Delphi的版本号;如果没有Extras主键则新建即可,下同)

B.每次新建窗体,然后设置其字体、大小……真是好麻烦的!那就再添加一个以下的键值,让系统自动来设置吧:
  [HKEY_CURRENT_USER/Software/Borland/Delphi/X.0/FormDesign]
  "DefaultFont"="宋体,9,_"
  (注:_表示空格,也可以用Bold(粗体)等代替)

C.自定义工作环境,让它更加适合自己。
  ·设置工具栏。在Delphi的工具栏右键单击,选Customize,然后挑选需要的按钮拖到工具上,把不要的拖出来。我常用的是:Standard工具栏下的Open、Open Project、Save、Save All、Undo、Redo;Debug工具栏下的Pause、Add Watch、Program Reset、Run;Desktop工具栏下的Save Current Desktop、Set Debug Desktop;Component Palette工具栏。
  ·设置窗口布局。为了能跟高效的编写程序,合理的布置各个窗口是很重要的。我常用的窗口有:Object Inspector、Project Manager(View|Project Manager)、Watch List(Run|Add Watch...) ,具体的停放位置如图1。

设置好各个窗体后按Desktop工具栏上的Save Current Desktop按钮保存。
  ·设置显示颜色。让代码的颜色更符合自己的习惯,有利于编写时思维的清晰。Tools|Editor Options打开Editor Properties,选Color标签页,设置代码颜色。以下仅解释一下几个常用的:
  Whitespace:空白处,即背景;
  Comment:注释;
  Reserved word:保留字;
  String:字符串;
  Number:数字;
  Execution Point:正在执行的当前行(即F7步入时所到达的那一行);
  Enabled break:断点;
  Error line:错误发生行;

D.掌握一些Delphi编程中的快捷键,能够极大程度的提高效率,还不会让你因为过多无聊的设置等而感到厌烦,现在如果不用这些快捷键,我会很不适应这样的编程的!以下我就介绍一下我常用的几个快捷键:
  Esc : 选择当前选中组件的容器(通常是Panel,GroupBox或Form等);
  Ctrl+方向键 :将所选组件移动一个像素;
  Ctrl+Shift+方向键 :将所选组件移动一大格(类似Fireworks中按住Shift再用方向键移动时的效果);
  Shift+方向键 :调整选中组件的大小,每次一像素;
  Shift+选中组件 :按住Shift键再用鼠标点击组件,可以同时选择多个组件;
  Ctrl+鼠标左键 :在procedure中掉用其他的函数(如一个自定义的过程),在这个调用处按住Ctrl会发现当鼠标移上去的时候变成了一个类似超链接的格式,鼠标单击就能直接转到所调用的此函数的实现部分。这个功能我可是用的最多了,让我找模块变得非常方便!
  Ctrl+Shift+C :在一个对象中声明了一个方法,然后把光标放到它的上面,按下Ctrl+Shift+C就可以为他的实现建立一个基本框架,如:
  TForm1 = class(TForm)
    private
      { Private declarations }
    public
      { Public declarations }
      procedure Mine;
    end;
  把光标放到procedure Mine这行,按下Ctrl+Shift+C,下面这段代码将自动插入到单元中:
  procedure TForm1.Mine;
  begin

  end;


==窗体操作篇==

    在有多个窗体的程序中,Delphi默认是将它们在程序启动时全部创建(只是都隐藏了,只显示一个主窗体),这样,那些暂时不必要启动的窗体就占用了许多内存空间。所以我们需要在菜单Project|Options...的Forms标签页下,将那些暂时不要启动的窗体从“Auto-create forms”下转移到“Available forms”中。这样,这些窗体的创建和释放就需要代码来实现了。
A.两种创建窗体方法之比较。对于这些非自动创建的窗体,我们必须在Show之前Creat(Self)或Create(Application),将其创建。如Form2.Creat(Self)和Form2.Create(Application),可是,它们两个到底有什么区别呢?其实两者区别不大,
但如果Owner是属于别的窗口或控件的话,当它的Owner被释放的时候,该Owner所拥有的也会被释放。关键的区别是由谁来管理该窗体的资源。用第一种方法创建,该窗体的资源由编程者来负责管理;用第二种方法创建,该窗体的资源由Application来管理。

B.几种窗体的释放方法。既然是为了节约内存,那么用完了的窗体就应该“搬出”内存。在这里我列举几个大同小异的方法:
(1)
procedure TForm1.Button1Click(Sender :TObject);
begin
......
if Form2 = nil then
Form2:=TForm2.Create(Application);
Form2.ShowModal;
......
end;

procedure TForm2.close(Sender: TObject; var Action: TCloseAction);
begin
  ModalResult := mrNone;
  Action := caFree;
  Form2 := nil;
end;
(2)
procedure TForm1.Button1Click(Sender :TObject);
begin
  if not Assigned(Form2) then
  begin
    Application.CreateForm(TForm2,Form2);
    try
      Form2.ShowModal;
    finally
      Form2.Free;
      Form2 := nil;
    end;
  end
  else
    Form2.ShowModal;
end;
(3)
procedure TForm2.Button1Click(Sender :TObject);
begin
  Form2.Close;
  Form2.Release;
end;

 

==控件使用篇==

A.大名鼎鼎的RXLib控件包是由三位俄罗斯高手编写的,非常的出色!不过,内容太多了,要用好也不容易。我在此拿RxRichEdit简单地说几点。
    好多人都问RxLib怎么安装,似乎的确有点复杂,呵呵,所以我也顺便说一下:
    运行rxinst.exe将RxLib先安装到/Program Files/Borland/Delphi5(或6)/RX文件夹下,然后打开Delphi,选File/Open...,将RXCTL5.DPK、RXDB5.DPK、RXBDE5.DPK分别打开后按compile,继续打开:DCLRX5.DPK、DCLRXDB5.DPK和DCLRXBD5.DPK,将这三个分别按compile后按install就可以了:-)
    AllowObjects属性。Win98下默认设置为True,右键菜单没有问题,但设为False时快捷菜单会连续出现两次;Win2000下,设为True时会使右键菜单无法弹出,而False时却显示正常。所以,为了系统的兼容性,需要判断当前OS版本:
procedure TFormMain.FormCreate(Sender: TObject);
var
  OSVI:OSVERSIONINFO;
......
begin
  OSVI.dwOSVersionInfoSize:=sizeof(OSVERSIONINFO);
  GetVersionEx(OSVI);
  case OSVI.dwPlatformId of
    1:RxRichEdit1.AllowObjects:=true;
    2:RxRichEdit1.AllowObjects:=false;
  end;
.......
end;
但我不知这个属性为什么会有这么一个问题,还望高手指点。
  ?OnURLClick事件。RXRichEdit有自动将网页地址转为超链接格式,但具体的行为还是要自己写代码的,不然这些地址就成了个空壳了:
procedure TFormMain.RXRichEdit1URLClick(Sender: TObject; const URLText: String; Button: TMouseButton);
begin
  if Button = mbLeft then
    ShellExecute(Handle, nil, PChar(URLText), nil, nil, SW_SHOW);
end;

 

C.将各控件的提示文本显示于状态行上。这个可用Application的OnHint事件,但由于Application为不可件对象,因此可以采用如下方法:
......
  public
    procedure DisplayHint(Sender: TObject); //声明一个方法用于显示提示文本
  end;
......
procedure TForm1.DisplayHint(Sender: TObject); //实现部分
begin
  StatusBar1.SimpleText := GetLongHint(Application.Hint);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnHint := DisplayHint;
end;
这样显示在状态栏里的文本和提示框(就是那个自动出现的黄色小框)里的是一样的。如果想要在状态栏里的提示文本更加详细怎么办?其实,只要控件的Hint属性这样写:MyHint|It's just a MyHint!,就可以让“|”前的内容显示在提示框(Help Hint box)里,“|”的后面的内容显示在状态栏里了。


D.ListView使用中的一些要点。以下以一个两列的ListView为例。
 { →增加一行:}
with ListView1 do
  begin
    ListItem:=Items.Add;
    ListItem.Caption:='第一列内容';
    ListItem.SubItems.Add('第二列内容');
  end;
  {→清空ListView1:}
ListView1.Items.Clear;
  {→得到当前被选中行的行的行号以及删除当前行:}
For i:=0 to ListView1.Items.Count-1 Do
  If ListView1.Items[i].Selected then  //i=ListView1.Selected.index
    begin
      ListView1.Items.Delete(i);  //删除当前选中行
    end;
{当然,ListView有OnSelectItem事件,可以判断选择了哪行,用个全局变量把它赋值出来。
  →读某行某列的操作:}
Edit1.Text := listview1.Items[i].Caption;  //读第i行第1列
Edit2.Text := listview1.Items[i].SubItems.strings[0];  //读第i行第2列
Edit3.Text := listview1.Items[i].SubItems.strings[1];  //读第i行第3列
{以次类推,可以用循环读出整列。
  →将焦点上移一行:}
For i:=0 to ListView1.Items.Count-1 Do
  If (ListView1.Items[i].Selected) and (i>0) then
    begin
      ListView1.SetFocus;
      ListView1.Items.Item[i-1].Selected := True;
    end;
{不过在Delphi6中,ListView多了一个ItemIndex属性,所以只要  }
ListView1.SetFocus;
ListView1.ItemIndex:=3;
{就能设定焦点了。 }

==其他==

  ☆为了优化软件,使其精益求精,当用到数组时经常采用动态数组。在声明时,如:A : array of string,然后在使用数组之前,SetLength(A,3)设置数组长度为3,即A[0],A[1],A[2],这样就可以了。当需要扩大数组长度时,再一次:SecLength(A,5),那么,就增加了A[3]和A[4],而前面的A[0],A[1],A[2]里的值不会清空;同样,如果SecLength(A,3)后再SecLength(A,1)的话,就只剩A[0]了,A[1]和A[2]自动被清除内存。注意:动态数组是从“0”开始的,所以SetLength(A,1)后High(A)=0的!!
    最后当不再用这个动态数组了,而程序还没有要退出,那为了节省内存用:A:=nil来释放掉这个数组,这下真正达到了“绿色环保”:)

  ☆“怎么获取当前程序运行的路径”这个问题经常能够在论坛上看到。的确,这个函数在编程中不时的要用到的。其实有好几个函数都能达到这个效果:
→GetCurrentDirectory():WinAPI函数,具体用法如下:
        var
          MyCurrentDir:Array[0..144] of Char; //存储当前绝对路径
        begin
          GetCurrentDirectory(SizeOf(MyCurrentDir),MyCurrentDir); //取得当前绝对路径,最后得到的格式如:C:/WINDOWS/SYSTEM
          MyCurrentDir:=MyCurrentDir+'/MySoftName.exe';
        end;
→GetCurrentDir():GetCurrentDirectory经过Delphi封装后的一个函数,用法简单:MyCurrentDir:=GetCurrentDir。最后得到的格式如:C:/WINDOWS/SYSTEM
    还有就是可以直接得到路径的函数:ExtractFilePath(ParamStr(0))、ExtractFilePath(Application.exename)等。

  ☆系统的关机、重新启动等操作的消息。这也是一个常有人问的问题,在此我也顺便在提一下:
    关机:ExitWindowsEx(EWX_SHUTDOWN,32);
    重新启动:ExitWindowsEx(EWX_REBOOT,32);
    注销:ExitWindowsEx(EWX_LOGOFF,32);
    关闭电源:ExitWindowsEx(EWX_POWEROFF,32);

  ☆在Delphi中,除了使用#39外,要在程序中(如ShowMessage中)显示“单个单引号”要如何处理?'''和'''''都会出现编译错误。其实,是四个单引号表示一个单引号,也就是是 '''',第二个和第三表明这是一个“'”,第一个和第四个是表明这是一个字符型。呵呵,很有趣哦:)

  ☆ShowMessage中的汉化问题。ShowMessage中的按钮都是E文的,让人很不舒服。其实经过我们的一番DIY,也能把它们都弄成中文的。
    首先要保存当前的工程,然后选Project|Languages|Add...,出现Add Language对话框,选择你要汉化的工程(也可以自定义文件夹),Next;选最后一项“中文(中国)”,Next;Next;Next;Finish;OK;然后就出现了Translation Manager对话框,在左边选“中文(中国)|Resource Scripts|Projet1_DRC(这个具体要看你的工程文件名)”,然后右边的列表里找到“Const_SMsgDlgOK”项,将其的“中文(中国)(translated)”格改为“确定”(原为OK),保存后退出。这下,再运行一下程序,哈哈,是不是就是中文按钮啦!
    不过,ShowMessage这种类型的信息对话框非常简单了,可以在系统调试期间显示给开发人员一些过程信息。但由于过于简单,所以我建议在软件的正式版中不要使用这样的对话框。而且,最好用MessageBox代替ShowMessage以减小软件的体积,例如,同样一个DLL文件,采用MessageBox 编译后的DLL文件大小为58K,而ShowMessage后就变成了301K!!


上面这些经验也许你并不是就一定用的到,但所谓“书到用时方恨少”!废话无需多说,大家鼓鼓掌吧,嘻嘻:)有不足之处,还请各位前辈指教!

Delphi开发技巧集合 告诉 webbrowser 使用IE去渲染,即可正常显示了! 阅读详情

相关推荐

delphi字符串函数大全

当前位置: 若萱在线 > 技术教程 > 编程技术 > Delphi编程 > 教程正文   delphi字符串函数大全 作者:若萱在线    教程来源:本站原创    点击数:118    更新时间:2006-3-5 【VIVI收藏】     首部 function AnsiResemblesText(const AText, AOther: string): Boolean; $[StrUtils

2427

Delphi中批量把双引号替换为单引号的方法

Delphi调试模式中抓出来的SQL语句中变量值是双引号,不能直接执行,要替换为单引号包裹才行。 DELPHI中双引号用''''表示,单引号用''表示。但是 //下面这种写法是错误的。执行结果是全部被替换成空了。 Memo2.Text:=StringReplace(Trim(ssql), '''', '', [rfReplaceAll]); //正确写法如下: Memo2.Text:=S...

wh445306 1316

Delphi:窗体自适应屏幕分辨率

Delphi:窗体自适应屏幕分辨率

fghydx的专栏 1544

delphi 键盘代码编码表

常数名称 十六进制值 十进制值 对应按键 Delphi编程表示(字符串型)_tzlin注   ...

weixin_33752045的博客 491

几个Delphi小技巧

几个Delphi小技巧1、判断Num Lock、Caps Lock、Scroll Lock指示灯状态  以Num Lock为例:  function IsNumLockOn() : boolean;  begin    Result := (GetKeyState(VK_NUMLOCK) and $01)   end;  如果灯亮则返回True,不亮返回False。  VK_NUMLOCK 替换成

727

delphi小技巧

====================================================== 注:重要!程序员如何有效的放松身心!下班后做什么? ====================================================== delphi小技巧 如何通过opendialog获取文件路径,下面是几个常用的方法,大家可以根据情况进行拼接: e

178

delphi开发的小技巧

版权声明请尊重原创作品。转载请保持文章完整性,并以超链接形式注明原始作者“tingsking18”和主站点地址,方便其他朋友提问和指正。   这是我从网上收集到的一些delphi开发的小技巧,现在与大家一起分享◇[DELPHI]网络邻居复制文件uses shellapi;copyfile(pchar(newfile.txt),pchar(//computername/di

我一路走来--- 1693

delphi小技巧总汇

◇[DELPHI]网络邻居复制文件uses shellapi;copyfile(pchar(newfile.txt),pchar(//computername/direction/targer.txt),false);◇[DELPHI]产生鼠标拖动效果通过MouseMove事件、DragOver事件、EndDrag事件实现,例如在PANEL上的LABEL:var xpanel,ypanel

hlms的专栏 1757

一些delphi开发的小技巧

DBGrid雙擊獲取數據 procedure TForm4.DBGrid1DblClick(Sender:TObject); begin Edit4.Text :=DBGrid1.DataSource.DataSet.Fieldbyname('id').AsString ; Edit5.Text :=DBGrid1.DataSource.DataSet.Fieldbyname('

丿小敗丨灬丶親_聆聽CSDN專屬博客 932

delphi小技巧集锦

function GetKbStatus():string;//返回当前键盘状态,包括NumLoce、Caps Lock、Insert//每个状态信息占两个字符,顺序为:NumLoce、Caps Lock、Insert//Copy Right 549@11:29 2003-7-22var Status:string;    KeyStates:TKeyboard

1170

delphi一些小技巧 从别处看到

开发环境--------Delphi7是一个很经典的版本,在Win2000/XP下推荐安装Delphi7来开发软件,在Vista下推荐使用Delphi2007开发软件。安装好Delphi7后,应立即安装Delphi7UpdatePack1,Delphi2007则建议尽量安装最新的版本。工欲善其事,必先利其器,为了提升开发效率,为了能更加得心应手的处理接下来的开发...

aisu3043的博客 270

delphi十个小技巧

delphi十个小技巧。。。。  1、判断一个字符串是否包含于另外一个字符串的方法       例如:if pos('ab','abcd')            messagedlg('ab是包含于abcd',mtConfirmation,[mbYes,      mbNo],0);      pos(obj,target) 在target字符串中找出第一个出现obj的第

唐林的专栏 2163

delphi编程集锦:小技巧,小方法

◇[DELPHI]网络邻居复制文件 uses shellapi; copyfile(pchar(newfile.txt),pchar(//computername/direction/targer.txt),false); ◇[DELPHI]产生鼠标拖动效果 通过MouseMove事件、DragOver事件、EndDrag事件实现,例如在PANEL上的LABEL: var xpanel,y

刘老师 1178

Delphi小技巧杂记

//获取任务栏尺寸 procedure TForm1.Button1Click(Sender: TObject); var TaskList: HWnd; Bordered: TRect; begin TaskList := FindWindow(’Shell_TrayWnd’, nil); GetWindowRect(TaskList, Bordered); La

winstonbonaparte的专栏 3395

Delphi 小技巧

Delphi 编辑器有些小技巧,总结一下。1。Ctrl+shift+C 组合键这个组合键可以自动完成类的方法定义框架,比如  TForm1 = class(TForm)  private    ...{ Private declarations }  public    ...{ Public declarations }    procedure abcde(a,b,c:inte

592
上一篇: [转帖]九句英语闯天下
下一篇: 今天接从钦州回来的高中同学.
SafeF8
博客等级 码龄22年 10粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值