delphi7编程技巧

原创 2015年11月21日 16:49:42

加入一句{$R WindowsXP},控件具有系统主题风格。

implementation


{$R *.dfm}
{$R windowsXP}


{ TMyThread }

==============================


procedure TForm1.Button1Click(Sender: TObject);
const
  {$I str.inc}
begin
   showmessage(MSG);
end;

文件 str.inc

 MSG = 'abc';


=============================

设置标题可以用[color=#FF0000]SetTextBuf('abc')Text:='abc'[/color].

Delphi/Pascal code
?
1
2
3
4
5
6
7
procedure TForm1.FormCreate(Sender: TObject);
begin
  SetTextBuf('abc');
  ShowMessage(Text);
  Text := 'def';
  ShowMessage(Caption)
end;


新建一个普通工程,然后在工程源文件里,在program一句的下一行加上{$APPTYPE CONSOLE},这样就可以在程序中使用Write之类的语句在控制台输出调试信息了。
====================================
Delphi/Pascal code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
program Project2;
 
{$APPTYPE CONSOLE}
 
uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};
 
{$R *.res}
 
begin
  Write('start!');
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.


=============================================

procedure也可以有返回值:

Delphi/Pascal code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure Add(a,b:Integer);
asm//eax存储a,edx存储b,相加的结果又保存到eax
  add eax,edx
end;
 
procedure TForm1.FormCreate(Sender: TObject);
type
  TAdd=function(a,b:Integer): Integer;
var
  P: Pointer;
  I: Integer;
begin   
  P := @Add;
  I := TAdd(P)(1,2);
 
  ShowMessageFmt('%d', [I])
end;
==================================

{$R 'zz.res' 'zz.rc'}
这样就能在工程里包含zz.rc脚本,并自动build出zz.res!

==================================


===========================================



局部常量字符串 or 全局常量字符串?

Delphi/Pascal code
?
1
2
3
4
5
6
7
8
9
10
11
12
procedure a;
const
  STR = 'abc';
begin
  Form1.Tag := Integer(PChar(STR));
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  a;
  ShowMessage(PChar(Form1.Tag))
end;


●●还以为看错了呢!发表于: 2014-02-06 13:23:59 新帖啊
楼主还在使用加入一句{$R WindowsXP},控件具有系统主题风格???都2014年了,还在用什么版本?
{$R WindowsXP}根本就已经淘汰了!就这样谁敢给你救命稻草?
如果是多年前的老版本比如D7,放几个按钮、单选、复选框,编译后按一下Alt试试?......

新版本直接工程--选项--应用程序--选中启用运行时主题,即可!

======================

父进程与子进程通信:
父进程调用SetEnvironmentVariable设置进程的环境变量(比如一个窗口A的句柄什么的),然后调用CreateProcess(其参数lpEnvironment指定为nil)来启动子进程。
子进程启动之后,就可以使用GetEnvironmentVariable来取得环境变量的值(得到句柄,就可以对窗口A发消息了)。



=========

在implementation下头的函数声明:

Delphi/Pascal code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
implementation
 
{$R *.dfm}
 
procedure a; forward;//注意关键词forward
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  a//虽然在此之前未实现,但事先已经声明,所以可以调用
end;
 
procedure a;//实现
begin
  ShowMessage('abc')
end;


=======================

在某些情况下用[color=#FF0000]Clipboard.AsText来输出调试信息很好用。
比如写一个dll,将他注入到第三方的程序,此时通过在dll里写剪贴板就方便调试了。[/color]

OutputDebugString,用这个输出调试信息更好一点吧。


用GUID作为 内核对象的名字 或 窗口的类名 等,可做唯一性判断。

[code=delphi]procedure TForm1.FormCreate(Sender: TObject);
begin
  CreateMutex(nil, True, '{B44CCB6D-293C-4A5F-AEF2-05B3B100BBDF}');
  if GetLastError = ERROR_ALREADY_EXISTS then
  begin
    ShowMessage('软件已经运行!');
    ExitProcess(1)
  end;
end;[code]



=======================

循环语句配合Break,可以减少代码的缩进

例如:

Delphi/Pascal code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
procedure a;
var
  I: Integer;
begin
  I:=1+2;
  if I=3 then
  begin
    I:=3+1;
    if I=4 then
    begin
      I:=4+1;
      if I=5 then
      begin
        I:=5+1;
        if I=6 then
        begin
        end
      end
    end;
  end;
 
  ShowMessage('')
end;


改写后:
Delphi/Pascal code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure b;
var
  I: Integer;
begin
  repeat
    I:=1+2;
    if I<>3 then Break;
 
    I:=3+1;
    if I<>4 then Break;
 
    I:=4+1;
    if I<>5 then Break;
 
    I:=5+1;
    if I<>6 then Break
  until False;
 
  ShowMessage('')
end;
===================================

好贴勿沉,继续接力。如何使程序在Win7下自动请求以管理员身份运行。
1、编辑文件UAC.manifest,内容如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">     
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> 
       <security> 
           <requestedPrivileges> 
               <requestedExecutionLevel level="requireAdministrator"/> 
           </requestedPrivileges> 
       </security> 
</trustInfo> 
</assembly> 

2、编辑文件uac.rc,内容如下:
1 24 UAC.manifest

3、工程文件参见以下:
program DFKCpatch;

uses
  renyuanFunction,
  Messages,
  AutoRegOleUnit in 'AutoRegOleUnit.pas' {Form1};

{$R *.res}
{$R uac.res}
{$R library.res}

var
  Res: TResourceStream;


function RunAsAdmin(hWnd: hWnd; filename: string; Parameters: string): Boolean;
{
    See Step 3: Redesign for UAC Compatibility (UAC)
    http://msdn.microsoft.com/en-us/library/bb756922.aspx
}
var
  sei: TShellExecuteInfo;
begin
  ZeroMemory(@sei, SizeOf(sei));
  sei.cbSize := SizeOf(TShellExecuteInfo);
  sei.Wnd := hWnd;
  sei.fMask := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_FLAG_NO_UI;
  sei.lpVerb := PChar('runas');
  sei.lpFile := PChar(filename); // PAnsiChar;
  if Parameters <> '' then
    sei.lpParameters := PChar(Parameters); // PAnsiChar;
  sei.nShow := SW_SHOWNORMAL; //Integer;

  Result := ShellExecuteEx(@sei);
end;

begin
  Application.Initialize;
  Application.Title := 'DFKC Patch';
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

Delphi7 编程环境 技巧记录

最近公司的一个旧的项目用到delphi.前同事已经离开.反正这个项目软件到我手里了.开始了解一些delphi的开发. 用Delphi7,既然学了,就留下点记录和笔记.艺不压身吧. 编程环境设置: 1,...
  • thanklife
  • thanklife
  • 2013年09月12日 22:00
  • 1479

单片机编程开发技巧

工作了7个月之久,对单片机的编程也开始慢慢熟悉起来,以前总是知道单片机就是定时器,状态机,中断这些东西结合起来效率是相当高的,但是自从接手开发GPF这个芯片之后,我发现了另外一种单片机的开发技巧,高手...
  • morixinguan
  • morixinguan
  • 2016年06月27日 12:05
  • 2710

30个java编程小技巧

Java是目前最流行的编程语言之一——它可以用来编写Windows程序或者是Web应用,移动应用,网络程序,消费电子产品,机顶盒设备,它无处不在。 有超过30亿的设备是运行在Java之上的。根据...
  • my_name_nb
  • my_name_nb
  • 2017年03月28日 21:33
  • 986

C、C++编程技巧

技巧1          计算某个数转化为二进制后,其二进制数中含有多少个1?...
  • lukairui7747
  • lukairui7747
  • 2014年06月26日 20:30
  • 736

VS2013编程实用小技巧

1. Peek View可以在不新建TAB的情况下快速查看、编辑一个函数的代码。用法:在光标移至某个函数下,按下alt+F12,显示Peek窗口,按F12直接转到定义。 然后在Peek窗口里可以...
  • zx3517288
  • zx3517288
  • 2016年10月26日 21:58
  • 1461

30 个java编程技巧(最佳实践的初学者)

1.return 一个空的集合,而不是 null 如果一个程序返回一个没有任何值的集合,请确保一个空集合返回,而不是空元素。这样你就不用去写一大堆 ”if else” 判断null元素。 ...
  • zyf__java
  • zyf__java
  • 2016年09月05日 08:23
  • 6232

python优雅编程技巧

"""python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素.集合对象还支持union(联合), intersection(交), difference(...
  • xuejianhui
  • xuejianhui
  • 2016年04月06日 20:37
  • 854

SHELL编程之常用技巧

前言本文是shell编程系列的第六篇,集中介绍了bash编程中部分高级编程方法和技巧。通过学习本文内容,可以帮你解决以下问题: bash可以网络编程么? .(){ .|.& };. 据说执行这些符号可...
  • renwotao2009
  • renwotao2009
  • 2016年06月21日 07:58
  • 1021

【Matlab编程】Matlab高效编程技巧

1.默认状态下,matlab显示精度是short型,而默认的计算精度是double型,并且显示精度与计算精度没有关系。 2. 一只失明的猫的问题:注意方法! 3.给数组预分配空间是基本的高效编程准则...
  • tengweitw
  • tengweitw
  • 2014年06月16日 18:39
  • 2224

shell实用编程技巧

一. 特殊文件: /dev/null和/dev/tty Linux系统提供了两个对Shell编程非常有用的特殊文件,/dev/null和/dev/tty。其中/dev/null将会丢掉所有写入它...
  • dantangfan
  • dantangfan
  • 2013年10月02日 12:51
  • 1634
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:delphi7编程技巧
举报原因:
原因补充:

(最多只允许输入30个字)