[返回]
中国计算机报1999年第89期

用Delphi 4设置系统的右键选单

杨 勇

  笔者所在的单位采用AutoCAD作为图纸设计的主要工具,每次出图时,都要把生成的xxx.PLT文件拷贝到局域网上一台连接绘图仪的计算机的共享目录中,然后再打印。

  由于复制文件的时候,需要从资源管理器里打开“网上邻居”,然后再找到相应的计算机的共享目录,最后把文件粘贴过去。如果网络比较繁忙,还会寻找一会儿,不免让人心焦。

  为了避免每次都重复以上的繁琐过程,笔者用Delphi4.0编写了一个小程序,用来把xxx.PLT文件直接复制到指定的网络目录中去。而且,为了方便使用,还把该程序注册到系统的右键选单,只要对xxx.PLT按下右键,选单中就会出现一项“发送到绘图仪(&P)”,如图1。

de066_1.jpg (7844 字节)
  图1

  程序的实现比较简单,主要使用了API函数CopyFile,用来拷贝PLT文件。此函数的用法可查阅在线帮助。这里着重介绍怎样把程序注册到右键选单和按下右键后怎样把参数传递给程序。

  在注册表中找到PLT文件的注册项HKEY—CLASSES—ROOT\.plt,其默认键值的数据是“AutoCADPlot”,然后在HKEY—CLASSES—ROOT下找到一个子键“AutoCADPlot”,在其下新建主键“shell”,在“shell”下新建主键“plot”,并将其默认键值设置成“发送到绘图仪(&P)”;在“plot”下新建主键“command”,并将其默认键值设置成“C:\Program Files\SendToPlot\SendToPlot.EXE "%1"”。现在,在资源管理器中对xxx.PLT右击,选单上已经多出了一项。上述过程用程序实现如下:

  procedure WriteToReg;

  var

   Reg : TRegistry;

  begin

   Reg:= TRegistry.Create;

  //写入右键选单

   Reg.RootKey:= HKEY—CLASSES—ROOT;

   if Reg.OpenKey(′AutoCADPlot\shell\Plot′, True) then

   begin

   Reg.WriteString(′′, ′发送到绘图仪(&P)′);

   Reg.CloseKey;

   end;

   if Reg.OpenKey(′AutoCADPlot\shell\Plot\command′, True) then

   begin

   Reg.WriteString(′′, ′C:\Program Files\SendToPlot\SendToPlot.EXE ′ + ′ ″%1″ ′);

   Reg.CloseKey;

   end;

   Reg.Free;

  end;

  其中,%1是鼠标所点击的文件名,也就是要传递给程序的参数。

  处理参数,用到两个函数:ParamCount和ParamStr。

  函数ParamCount返回命令行参数的个数;

  函数ParamStr(n)返回第n个命令行参数,其中,n=0返回可执行程序自身的名称,n=1返回第一个参数。

  程序如下:

  procedure TForm1.FormCreate(Sender: TObject);

  var

   Flag : Boolean;

   SourceStr, DestStr : String;

   Source, Dest : array[0..255] of Char;

  begin

   if ParamCount 〉 0 then

   begin

  //程序以最小化方式运行

   WindowState:= wsMinimized;

   SourceStr:= ParamStr(1);

   StrPCopy(Source, SourceStr);

   DestStr:= ′\\sj036\plot\′ + ExtractFileName(SourceStr); //目标文件名

   StrPCopy(Dest, DestStr);

   Flag:= CopyFile(Source, Dest, False);

   if Flag = False then

   Application.MessageBox(′发送文件错误′, ′错误′, mb_OK);

   end;

  以上程序在Delphi 4,Windows 98下通过。