Delphi----心得00

98.5.24
INI文件的操作要点
(1)在interface关键字后的uses子句中加入
   uses ...,inifiles;
(2)设置变量:var inifile:=TIniFile;
(3)使用前,一定要先做:
   inifile:=TIniFile.Create(inifilename);
   我在这里绕了个弯子,写成
   inifile.Create(inifilename);

TShiftState用来检测CTRL,ALT,Shift,以及鼠标按键的状态,
常常用在键盘或鼠标的事件处理程序之中。

DCU文件(编译的库单元)的重用
(1)在interface里的uses子句中引用。如Windows,Dialogs,
   等等,要求被引用的DCU一定要放在Delphi 3/Lib子目录中。
(2)在implementation里的uses子句中引用。如果是自行编写的
   DCU文件,应采用这一方式,并将被引用的DCU文件放入当前
   工程所在的子目录中。
executefile函数(在FmxUtils.DCU中定义)不能用在FormCreate
   事件中。真奇怪......

内置的版本号控制功能
在Project Options中的VersionInfo项里,有版本信息的定制,
包括一个有趣的版本号自动增加功能(Auto-increment build
number),即每Build一次,版本号中的Build Number加1。选中
Include version information in project,编译,用资源管
理器里找到生成的.exe文件,点右键,查看“属性”一项,就
会看到在属性中多了一页“版本”,里面就是你刚才输入的各
项内容。

98.5.17
定制Speedbar
右键点击左上角的加速键条(speedbar),选中Properties,
在列表框中找到你想要加入speedbar的命令按钮,将它拖到
speedbar上的合适位置即可。如果speedbar上没有多余的空间
来容纳新的按钮,可把鼠标在speedbar右框处变为双向箭头的
形状,向右拖动一段距离,就可腾出空间。如想删除speedbar
上的某个按钮,可简单地把它拖出speedbar的范围,就能删除。

98.5.13
计算出的字段
在写一个程序时,我要在DBGrid中显示出一个memo的部分信息,当我把那个
memo字段放进去后,运行时只能显示出“(memo)”字样。从书上找到计算字
段的用法后,我在TTable中增加一个计算字段MemoHeader,宽度为40,在此
TTable的OnCalcFields事件中输入:
  with MyTable do
    FieldByName('memoheader').asstring:=FieldByName('memo').asstring;
在DBGrid中放入MemoHeader,运行,OK!

字段编辑器
解决了上面的问题后,我继续学习字段编辑器的作用。原来,DELPHI通过字
段编辑器,近乎完美地实现了数据库的字段级的控制,这包括:
1)字段在DBGrid中标题、宽度、能否可见;
2)字段的显示格式和编辑时输入的过滤条件;
3)字段是否只读;
4)字段的类型:数据字段/计算字段/查询字段/内部计算字段;
5)字段的显示/赋值/修改等事件的定制。
Delphi真的...很强哟!

98.5.7
设计Form时的快捷键
Del 删除所选组件
Esc 选择当前组件的容器(通常是Panel,Group或Form)
F11 在Form或Unit和对象检查器之间切换
F12 在Form和代码编辑器间切换
Ctrl-F12 显示“查看Unit”对话框
Shift-F12 显示“查看Form”对话框
TAB 下一个组件
Shift-TAB 上一个组件
方向键 选中此方向上最近的组件
Ctrl-方向键 将所选组件移动一个点
Shift-方向键 将所选组件改变一个点的大小
Ctrl-Shift-方向键 将所选组件移动一个格
Shift-click     按住Shift键再用鼠标点击组件,可以选择多个组件。
  --= 下面这条是我摸索出来的 =--
Ctrl-drag       按住Ctrl键在一个容器组件(如Panel,QReport,Groupbox等)
                里拖动鼠标,可强制选择鼠标拖过的矩形框中的所有属于此容
                器的可视组件但不包括该容器组件。

98.5.5
使用QReport的若干经验
1)QuickRep1.DataSet:=query1
   不然无输出结果
2)从qrpt2man.doc中查知,格式化输出结果的方法是:
   在QRDBText.Mask中设为.00;0,将使输出带两位小数。
3)设置Group时,先加入一个QGroup,再加入一个QRBand,将QGroup的
   FooterBand设为刚才的QRBand,就可将其联系起来。
4)在Group中打印的合计数,其ResetAfterPrint设为True,可实现分组合计。

98.5.4
看了《中国计算机报》4月30日软件与应用版的《Delphi中创建Splash窗口》,
心里又是高兴又是惋惜。高兴的是我已经知道了这个方法(说明我水平不低:)
惋惜的是我应该写一篇同类的稿件,说不定...
(见我在4月16日的专题)

98.4.30
今天新学了个format函数,对给定的字符串格式化,返回结果字符串:
format('%*.*f',[8,2,123.456]); //等价于format('%*8.2f',[123.456])
format('%d %d %0:d %d'[10,20]);

取得系统信息
GetSystemInfo

98.4.29
(以下TIPS取自DelphiTI.zip)
播放一个wav文件
use mmsystem;

SndPlaySound('hello.wav',SND_FILENAME or SND_SYNC)

优化WIN95下的ORACLE连接
在[ORA_HOME]/NETWORK/ADMIN/SQLNET.ORA中增加一行
AUTOMATIC_IPC=OFF
(据说可将连接时间从15秒缩短至3秒!不过我试过似乎没啥改变...)

设置WIN95的墙纸
var s:string;
s:='c:/windows/athena.bmp';
SystemParametersInfo(SPI_SETDESKWALLPAPER,0,Pchar(s),0);

InputBox,InputQuery和ShowMessage函数的威力
uses dialogs;
var s,s1:string;
    b:boolean;
begin
  s:=trim(Inputbox('NewPassword','Password','masterkey'));
  b:=s<>'';
  s1:=s;
  if b then
     b:=InputQuery('Confirm Password','Password',s1);
  if not b or (s1<>s) then
     ShowMessage('Password Failed');
end;  // 试试吧!

使你的form适应不同的显示分辨率
假设你在800*600的分辨率下设计的form,第一步:
inplementation
const
  ScreenWidth: LongInt = 800; {I designed my form in 800x600 mode.}
  ScreenHeight: LongInt = 600;

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
  scaled := true;
  if (screen.width <> ScreenWidth) then
  begin
    height := longint(height) * longint(screen.height) div ScreenHeight;
    width := longint(width) * longint(screen.width) div ScreenWidth;
    scaleBy(screen.width, ScreenWidth);
  end;
end;

下一步,要让每个子控制的字体改变到合适的大小:
type
  TFooClass = class(TControl); { needed to get at protected }
                               { font property }

var
  i: integer;
begin
  for i := ControlCount - 1 downto 0 do
    TFooClass(Controls[i]).Font.Size :=
        (NewFormWidth div OldFormWidth) *
        TFooClass(Controls[i]).Font.Size;
end;


98.4.27
用raise引发一个错误处理例程
示例:先给出下面的定义
type EPasswordInvalid=class(Exception);
这样你就可以随时引发一个"password invalid"的例外:
if Password<>CorrectPassword then
   raise EPasswordInvalid.Create('Increect Password entered');
运行后,出现信息框
Project Project1.exe raise exception class EPasswordInvalid
with message 'Incorrect Password entered'. Process stopped.
Use step or run to continue.
再按Run按钮,出现一个信息框:
  Incorrect Password entered.

1998.4.26
从DEMO例程中学到的若干小技巧
在demo/internet/http/webbrows/main.pas中,
procedure TForm1.DocumentSourceClick(Sender:Tobject);
begin
  with DocSourceForm do
  begin
    show;  // 显示HTML源码的FORM
    Memo1.lines.clear; // 清空memo1中内容
    Memo1.lines.add(HTML1.SourceText); // 植入源码
    Memo1.SelStart:=0 // ***
    SendMessage(Memo1.Handle, // Memo1的窗口句柄
      EM_ScrollCaret //将Edit Control中的caret光标滚动到视野中
      0,0 //这两个参数暂不使用
  end;
end;
(此SendMessage系一WinAPI调用,给一个或一组窗口发送消息,直到
相应窗口处理此消息后才有返回值。相似的另一函数为PostMessage,
它将消息放入消息队列中后立即返回。)
*** 清空当前选择并将光标移动到指定字符(0代表第一个字符)。如同时
设memo1.sellength为一非0值,可选择一段文本。

1998.4.23
几个有关子目录的操作的过程:
MkDir(str);
ChDir(str);
GetDir(DriveID,str);
SetCurrentDir(str);
IOResult  --上面几个过程调用成功即返回0值

1998.4.16 在demo/db下有一MastApp,演示了如何在启动一个大程序前期显示一个小小封面 splash.pas: begin SplashForm:=TsplashForm.Create(Application); SplashForm.show; SplashForm.update; //这一句强制调用WinAPI的UpdateWindow函数 ... ... end. 另一种在函数中返回值的方法: Function MyFunc(...):integer; begin ... ... MyFunc:=8; //只要对函数名赋值,函数立即返回。 end;

几个常用函数 MessageBeep --播放Windows标准声音文件 MessageBox --显示一个信息对话框 TWinControl类: SetFocus 设置为当前输入焦点 AsString 比 AsInteger 在表间字段互相赋值时更有效,更不易出错。 Application.Message('errtext','errcaption',mb_OK);弹出一对话框,按OK确定。

1998.4.15 用ExecuteFile执行一外部程序 uses ShellAPI; // 提供 ShellExecute 函数在demos/doc/filmanex目录下,有一FMXUtils中提供各种文件操作增强函数, 其中Function ExecuteFile(filename,params,WDir,SW_SHOW) 可运行外部程序。

1998.4.10 连入远程ORACLE服务器(续) 今天我发现,只需在TDatabase元件中,设DriverName为ORACLE,在Parms中加入 Server Name=orac, 照样能连入远程的ORACLE服务器,根本不需要设置BDE alias。

1998.4.9 发布自己的应用程序 今天使用DELPHI自带的Install Shield,做了一个安装程序。在没有装DELPHI的 机器上安装我做的数据库应用程序。开始系统提示找不到别名,最后我运行了一 下Bdeadmin.exe,增设一个别名,OK!

1998.4.8 连入远程ORACLE服务器 今天使用BDE设置oracle, OK。Net Protocol:TNS/ServerName=orac

1998.4.6 自动登录远程数据库 Database.Parms的内容如下: user name=[yourname] Database.Parms[1]:='password=yourpass' 再把Login Prompt一项设为False,其它的就不用再说了吧?

1998.4.1 在Win95 的 ORACLE client 中增加ODBC驱动 进入ORACLE 32-bit Adminstrator,选System DSN,Add,选择Oracle73(已在Easy Install中设好): Data Source Name: orac Description:My Oracle 7.3 ODBC SQL*Net Connect String:tns:orac --OK! 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值