开发一个delphi写的桌面图标管理代码

原创 2015年11月19日 14:02:28

参加工作了就很少有时间去玩delphi了,这个适合初学者看看,大神勿喷

工具 delhpi7.0    access数据库

原则win下有安装office就可用    当初不太熟悉sqlite所有没用这做数据库。

{*****************************************************************************
* 版本信息:
*     浅诺桌面管理工具v1.0
* 文件名称:
*     UseShortcutKey.pas
* 内容摘要:
*     桌面快捷方式管理(分类及运行)
* 历史记录:
*     2013.1.28 created by xzj
* 大型修改:
*     2013.2.5 modified by xzj
*     快捷方式名称不显示快捷方式ID,相关功能做相应的修改,将ID存放在数组naID中
*
* 程序为作者原创,修改请保留作者信息,改后程序可发至作者邮箱共同参考、共同进步,
* 谢谢支持。
******************************************************************************}
unit UseShortcutKey;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, TntStdCtrls, jpeg, ExtCtrls, TntExtCtrls, TntForms,
  ComCtrls, TntComCtrls, ImgList, DB, ADODB, Menus, TntMenus, Buttons, RzTray,
  TntButtons, Spin, RzButton, Mask, RzEdit, RzBtnEdt, RzBmpBtn, RzCmboBx,
  RzTabs, RzTrkBar, WinSkinStore, WinSkinData;
const
  WM_MouseEnter = $B013;
  WM_MouseLeave = $B014;
type
  TFormUse = class(TForm)
    imglogo: TTntImage;
    lblName: TTntLabel;
    lbl1: TTntLabel;
    lbl2: TTntLabel;
    tntscrlbxType: TTntScrollBox;
    tntpmnType: TTntPopupMenu;
    tmr1: TTimer;
    con1: TADOConnection;
    qryCmd: TADOQuery;
    il1: TImageList;
    ImageTxt: TImage;
    ImageRAR: TImage;
    ImageFiles: TImage;
    ImageMDB: TImage;
    ImageXLS: TImage;
    ImageDOC: TImage;
    ImagePPT: TImage;
    Imagepsd: TImage;
    ImagePhoto: TImage;
    Imagepdf: TImage;
    ImageDPR: TImage;
    ImagePAS: TImage;
    Imagedfm: TImage;
    ImageDLL: TImage;
    ImageWZ: TImage;
    Image1: TImage;
    Image2: TImage;
    rztrycn1: TRzTrayIcon;
    tntmntmAdd: TTntMenuItem;
    tntpgcntrl1: TTntPageControl;
    pg1: TTntTabSheet;
    edtAdd: TTntEdit;
    pg2: TTntTabSheet;
    edtEdt: TTntEdit;
    tntmntmqx: TTntMenuItem;
    tntpmnPro: TTntPopupMenu;
    tntmntmEdtPro: TTntMenuItem;
    tntmntmDelPro: TTntMenuItem;
    tntmntmTail: TTntMenuItem;
    tntmntmList: TTntMenuItem;
    tntmntmdefault: TTntMenuItem;
    tntmntmN1: TTntMenuItem;
    tntmntmWc: TTntMenuItem;
    tntpmnOperbtn: TTntPopupMenu;
    tntmntmEdit: TTntMenuItem;
    tntmntmdelete: TTntMenuItem;
    lbl3: TTntLabel;
    edtnow: TTntEdit;
    lbl4: TTntLabel;
    tntmntmN2: TTntMenuItem;
    tntmntmhide: TTntMenuItem;
    N1: TTntMenuItem;
    tntmntmdelall: TTntMenuItem;
    Imagebat: TImage;
    tntmntmdelalltype: TTntMenuItem;
    tntmntmN3: TTntMenuItem;
    tntcntrlbr1: TTntControlBar;
    tntmntmSendLink: TTntMenuItem;
    tntmntmN4: TTntMenuItem;
    tntpmnPC: TTntPopupMenu;
    btnPC: TRzMenuButton;
    btn1: TRzShapeButton;
    tntpmnMN: TTntPopupMenu;
    tntmntmClose: TTntMenuItem;
    tmr2: TTimer;
    tntmntmAutoOpen: TTntMenuItem;
    tntmntmSendAll: TTntMenuItem;
    edtTime: TTntEdit;
    tmr3: TTimer;
    tmrRe: TTimer;
    edtKeyNow: TTntEdit;
    tmrsx: TTimer;
    pnl1: TPanel;
    grp1: TGroupBox;
    qrySet: TADOQuery;
    qryInit: TADOQuery;
    tntpgcntrl2: TRzPageControl;
    pg3: TRzTabSheet;
    lvPro: TTntListView;
    pg4: TRzTabSheet;
    mmo1: TTntMemo;
    pg5: TRzTabSheet;
    tntpnl1: TTntPanel;
    tntmntmN5: TTntMenuItem;
    tntmntmexit: TTntMenuItem;
    tntmntmHideZT: TTntMenuItem;
    tntmntmHideV: TTntMenuItem;
    grp2: TTntGroupBox;
    lbl5: TTntLabel;
    cbbFC: TRzColorComboBox;
    lbl6: TTntLabel;
    cbbFONTC: TRzColorComboBox;
    cbbGC: TRzColorComboBox;
    lbl7: TTntLabel;
    lbl9: TTntLabel;
    cbbEC: TRzColorComboBox;
    cbbFT: TRzComboBox;
    lbl8: TTntLabel;
    lbl11: TTntLabel;
    cbbHD: TRzComboBox;
    cbbSH: TRzComboBox;
    lbl10: TTntLabel;
    lbl12: TTntLabel;
    rztrckbr1: TRzTrackBar;
    dlgFont1: TFontDialog;
    lbl13: TTntLabel;
    btn2: TRzButtonEdit;
    skndt1: TSkinData;
    sknstr1: TSkinStore;
    procedure FormCreate(Sender: TObject);
    procedure BtnTypeClick (Sender: TObject);
    procedure LoadShortcutKey(Sender : TObject);
    procedure tmr1Timer(Sender: TObject);
    procedure edtAddKeyPress(Sender: TObject; var Key: Char);
    procedure tntmntmAddClick(Sender: TObject);
    procedure edtEdtKeyPress(Sender: TObject; var Key: Char);
    procedure Openqry(var qry1 : TADOQuery; sqltxt : string);
    procedure Execqry(var qry1 : TADOQuery; sqltxt : string);
    procedure tntmntmqxClick(Sender: TObject);
    procedure lvProDblClick(Sender: TObject);
    procedure tntmntmTailClick(Sender: TObject);
    procedure tntmntmListClick(Sender: TObject);
    procedure tntmntmdefaultClick(Sender: TObject);
    procedure tntmntmEdtProClick(Sender: TObject);
    procedure tntmntmWcClick(Sender: TObject);
    procedure LBWindowProc(var Message: TMessage);
    procedure WMDROPFILES_L(var Msg: TMessage);
    procedure tntmntmDelProClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure tntmntmEditClick(Sender: TObject);
    procedure tntmntmdeleteClick(Sender: TObject);
    procedure tntmntmhideClick(Sender: TObject);
    procedure lvProMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure tntmntmdelallClick(Sender: TObject);
    procedure lvProEdited(Sender: TObject; Item: TTntListItem;
      var S: WideString);
    procedure lvProKeyPress(Sender: TObject; var Key: Char);
    procedure tntmntmdelalltypeClick(Sender: TObject);
    procedure CreateLink(programPath,programArg,LinkPath,Descr : string);
    procedure tntmntmSendLinkClick(Sender: TObject);
    procedure GetSystemPath();
    procedure MenuBtnOnClick(Sender : TObject);
    procedure btn1Click(Sender: TObject);
    procedure tntmntmCloseClick(Sender: TObject);
    //procedure tmr2Timer(Sender: TObject);
    procedure tntmntmAutoOpenClick(Sender: TObject);
    procedure tntmntmSendAllClick(Sender: TObject);
    procedure tmr3Timer(Sender: TObject);
    procedure tmrReTimer(Sender: TObject);
    procedure tmrsxTimer(Sender: TObject);
    procedure cbbFCChange(Sender: TObject);
    procedure cbbFONTCChange(Sender: TObject);
    procedure cbbGCChange(Sender: TObject);
    procedure cbbECChange(Sender: TObject);
    procedure cbbFTChange(Sender: TObject);
    procedure cbbHDChange(Sender: TObject);
    procedure cbbSHChange(Sender: TObject);
    procedure InitForm();
    procedure AddInitForm();
    procedure tntmntmexitClick(Sender: TObject);
    procedure tntmntmHideZTClick(Sender: TObject);
    procedure tntmntmHideVClick(Sender: TObject);
    procedure rztrckbr1Change(Sender: TObject);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure imglogoMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure tntpnl1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure grp2MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure tntpgcntrl2Change(Sender: TObject);
    procedure btn2ButtonClick(Sender: TObject);
  private
    { Private declarations }
    abtnType: array[1..50] of TRzBitBtn;  //分组按钮
    anID : array[0..500] of Integer;
    sActiveBtn : string;                //当前活动的按钮
    SYS_COLOR : TColor;      //窗体颜色
    FONT_COLOR : TColor;     //字体颜色
    GROUP_COLOR : TColor;    //被选中的分组字体颜色
    EDITING_COLOR : TColor;  //修改时界面颜色
    HIDE_DIRECTION : string; //窗体隐藏方向
    sTypeLoadFlag : string;  //类型加载标识(用于不重复加载)
    procedure WMMouseEnter(var Msg: TMessage); message WM_MouseEnter;
    procedure QNLoadType();
  public
    { Public declarations }
  end;

var
  FormUse: TFormUse;
  sPath: string;
  sType: string;
  hInNow : HKL;       //当前输入法
  keyValue : string;  //按键查询
  isEditing : Boolean; //是否是编辑状态
  RWindowProc: TWndMethod;
  LWindowProc: TWndMethod;
  OldBtn : TRzBitBtn;
implementation
uses registry, shlobj, ActiveX, ComObj, ShellAPI;
{$R *.dfm}

{****************************************************************
* 过程名称:  Openqry
* 功能描述:  数据库查询
* 参数说明:  TADOQuery,string
* 返 回 值:  无
* 历史记录:  2013.1.28 created by xzj
*****************************************************************}
procedure  TFormUse.Openqry(var qry1 : TADOQuery; sqltxt : string);
begin
  with qry1 do
  begin
    Close;
    sql.clear;
    sql.add(sqltxt);
    Open;
  end;
end;

{****************************************************************
* 过程名称:  Execqry
* 功能描述:  数据库操作
* 参数说明:  TADOQuery,string
* 返 回 值:  无
* 历史记录:  2013.1.28 created by xzj
*****************************************************************}
procedure  TFormUse.Execqry(var qry1 : TADOQuery; sqltxt : string);
begin
  with qry1 do
  begin
    Close;
    sql.clear;
    sql.add(sqltxt);
    ExecSQL;
  end;
end;

{****************************************************************
* 过程名称:  WMMouseEnter
* 功能描述:  鼠标碰到隐藏的窗体,窗体下拉
* 参数说明:  TMessage
* 返 回 值:  无
* 历史记录:  2013.1.28 created by xzj
*****************************************************************}
procedure TFormUse.WMMouseEnter(var Msg: TMessage);
var iIndex : Integer;
begin
  if (Top < 0) and (HIDE_DIRECTION = '向上隐藏') then
  begin
    //while(Top < 0) do
    //begin
    //  iIndex := 10;
    //  Top := Top + 2;
    //  while(iIndex > 0) do
    //  begin
    //    iIndex := iIndex - 1;
    //  end;
    //end;
    Top := 0;
    //为保证下拉窗体后呈现在最前面
    SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE); //将窗体推到最前
    //发现不取消效果更好
    SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE); //然后取消窗体最前
  end
  else if (Left < 0) and (HIDE_DIRECTION = '向左隐藏') then
  begin
    Left := 0;
    //为保证下拉窗体后呈现在最前面
    SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE); //将窗体推到最前
    //发现不取消效果更好
    SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE); //然后取消窗体最前
  end
  else if ((Left + Self.Width) > screen.Width) and (HIDE_DIRECTION = '向右隐藏') then
  begin
    Left := Screen.Width - Self.Width;
    //为保证下拉窗体后呈现在最前面
    SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE); //将窗体推到最前
    //发现不取消效果更好
    SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE); //然后取消窗体最前
  end
  else if ((Top + Self.Height) > Screen.Height) and (HIDE_DIRECTION = '向下隐藏') then
  begin
    Top := Screen.Height - Self.Height;
    //为保证下拉窗体后呈现在最前面
    SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE); //将窗体推到最前
    //发现不取消效果更好
    SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE); //然后取消窗体最前
  end;
  Tmr1.Enabled := True;
end;

{****************************************************************
* 过程名称:  GetTempDirectory
* 功能描述:  取系统临时路径
* 参数说明:  无
* 返 回 值:  string 路径
* 历史记录:  2013.1.28 created by xzj
*****************************************************************}
function GetTempDirectory: string; 
var
  TempDir: array[0..255] of Char;
begin
  GetTempPath(255, @TempDir);
  Result := StrPas(TempDir);

end;

{****************************************************************
* 过程名称:  QNLoadType
* 功能描述:  加载类型选择按钮
* 参数说明:  无
* 返 回 值:  无
* 历史记录:  2013.1.28 created by xzj
*****************************************************************}
procedure TFormUse.QNLoadType();
var i, j,k,nRand : Integer;
    bmpName : string;
begin
  Randomize;
  with qryCmd do
  begin
    Close;
    SQL.Clear;
    SQL.Add('select * from PRO_TYPE');
    Open;
  end;
  //加载前释放所有内存,防止内存冲突
  for k := 1 to 49 do
  begin
    if abtnType[k] <> nil then
    begin
      abtnType[k].Destroy;
      abtnType[k] := nil;
    end;
  end;

  nRand := Random(97) + 1;
  qryCmd.First;
  //默认让第一个按钮为‘所有程序’
  abtnType[1] := TRzBitBtn.Create(Self);
  abtnType[1].Height := 30;
  abtnType[1].Width := tntscrlbxType.Width - 5;
  abtnType[1].Top := 1;
  abtnType[1].Left := tntscrlbxType.Left;
  abtnType[1].Name := 'btn_0';
  abtnType[1].Parent := tntscrlbxType;
  abtnType[1].Caption := '所有程序';
  abtnType[1].ParentColor := True;
  abtnType[1].ParentFont := True;
  bmpName := 'emotions\' + IntToStr(nRand) + 'fixed.bmp';
  abtnType[1].Glyph.LoadFromFile(bmpName);
  abtnType[1].OnClick := BtnTypeClick;
  abtnType[1].Visible := True;
  OldBtn := abtnType[1];
  for i := 1 to qryCmd.RecordCount do
  begin
    nRand := Random(95) + 1;
    abtnType[i + 1] := TRzBitBtn.Create(Self);
    abtnType[i + 1].Height := 30;
    abtnType[i + 1].Width := tntscrlbxType.Width - 5;
    j := trunc(i / 1);
    abtnType[i + 1].Top := 1 + (abtnType[i + 1].Height + 1) * j;
    j := i mod 1;
    abtnType[i + 1].Left := abtnType[i + 1].Width * (j);
    abtnType[i + 1].Name := 'btn_' + inttostr(i + 1);
    abtnType[i + 1].Parent := tntscrlbxType;
    abtnType[i + 1].Caption := qryCmd.FieldByName('PRO_TYPE').Value;
    abtnType[i + 1].ParentColor := True;
    abtnType[i + 1].ParentFont := True;
    abtnType[i + 1].PopupMenu := tntpmnOperbtn;
    bmpName := 'emotions\' + IntToStr(nRand + 1) + 'fixed.bmp';
    abtnType[i + 1].Glyph.LoadFromFile(bmpName);
    abtnType[i + 1].OnClick := BtnTypeClick;
    abtnType[i + 1].Visible := True;
    //nNewTop := abtnType[i + 1].Top + 31;
    qryCmd.next;
  end;
  tntpgcntrl1.Visible := False;
end;

{****************************************************************
* 过程名称:  LoadShortcutKey
* 功能描述:  加载快捷方式
* 参数说明:  Sender : TObject
* 返 回 值:  无
* 历史记录:  2013.1.28 created by xzj
*****************************************************************}
procedure TFormUse.LoadShortcutKey(Sender : TObject);
var
  i : Integer;
  lListItem: TListItem;
  bmp: TBitmap;
  sFilePath: string;
begin
  qryCmd.First;
  il1.Clear;
  lvPro.Clear;

 for i := 0 to qryCmd.RecordCount - 1 do
  begin
    lListItem := lvPro.Items.Add;
    lListItem.Caption := Trim(qryCmd.fieldbyname('PRO_NAME').value);
    lListItem.ImageIndex := i;
    anID[lListItem.ImageIndex] := qryCmd.fieldbyname('ID').value;

   //读取程序图标
    sFilePath := qryCmd.FieldByName('PRO_PATH').Value;


    if (LowerCase(ExtractFileExt(sFilePath))) = '' then
      image1.Picture := ImageFiles.Picture
    else if (LowerCase(ExtractFileExt(sFilePath))) = '.txt' then
      image1.Picture := ImageTxt.Picture
    else if ((LowerCase(ExtractFileExt(sFilePath))) = '.rar') or ((LowerCase(ExtractFileExt(sFilePath))) = '.zip') then
      image1.Picture := ImageRAR.Picture
    else if (LowerCase(ExtractFileExt(sFilePath))) = '.mdb' then
      image1.Picture := ImageMDB.Picture
    else if (LowerCase(ExtractFileExt(sFilePath))) = '.xls' then
      image1.Picture := Imagexls.Picture
    else if ((LowerCase(ExtractFileExt(sFilePath))) = '.doc')
            or ((LowerCase(ExtractFileExt(sFilePath))) = '.docx') then
      image1.Picture := Imagedoc.Picture
    else if (LowerCase(ExtractFileExt(sFilePath))) = '.ppt' then
      image1.Picture := Imageppt.Picture
    else if (LowerCase(ExtractFileExt(sFilePath))) = '.pdf' then
      image1.Picture := Imagepdf.Picture
    else if (LowerCase(ExtractFileExt(sFilePath))) = '.psd' then
      image1.Picture := Imagepsd.Picture
    else if ((LowerCase(ExtractFileExt(sFilePath))) = '.jpg')
              or ((LowerCase(ExtractFileExt(sFilePath))) = '.bmp')
              or ((LowerCase(ExtractFileExt(sFilePath))) = '.jpeg')
              or ((LowerCase(ExtractFileExt(sFilePath))) = '.gif')
              or ((LowerCase(ExtractFileExt(sFilePath))) = '.cdr') then
      image1.Picture := ImagePhoto.Picture
    else if (LowerCase(ExtractFileExt(sFilePath))) = '.dpr' then
      image1.Picture := Imagedpr.Picture
    else if (LowerCase(ExtractFileExt(sFilePath))) = '.dfm' then
      image1.Picture := Imagedfm.Picture
    else if (LowerCase(ExtractFileExt(sFilePath))) = '.pas' then
      image1.Picture := Imagepas.Picture
    else if (LowerCase(ExtractFileExt(sFilePath))) = '.dll' then
      image1.Picture := Imagedll.Picture
    else if (LowerCase(ExtractFileExt(sFilePath))) = '.bat' then
      image1.Picture := Imagebat.Picture
    else if (LowerCase(ExtractFileExt(sFilePath))) = '.exe' then
      image1.Picture.Icon.handle := ExtractIcon(hInstance, pchar(sFilePath), 0)
    else
      image1.Picture := Imagewz.Picture;

    bmp := TBitmap.Create;
    bmp.width := image1.Picture.Width;
    bmp.height := image1.Picture.Height;
    bmp.canvas.Draw(0, 0, image1.Picture.Graphic);
    bmp.SaveToFile(GetTempDirectory + 'QNsystem.bmp');
    image2.Picture.LoadFromFile(GetTempDirectory + 'QNsystem.bmp');
    il1.Add(image2.Picture.Bitmap, image2.Picture.bitmap);

    qryCmd.Next;
  end;
  qryCmd.Close;
end;

{****************************************************************
* 过程名称:  BtnTypeClick
* 功能描述:  类型按钮响应
* 参数说明:  Sender : TObject
* 返 回 值:  无
* 历史记录:  2013.1.28 created by xzj
* 修改描述: 2013.2.3 modified by xzj
*            添加按钮颜色改变功能,当前分组变为绿色
*            2013.2.17 modified by xzj
*            如果类型选择与先前一样则不重复加载快捷方式
*            2013.2.18 modified by xzj
*            修改2.17所修改的不重复加载,编辑后刷新问题
*****************************************************************}
procedure TFormUse.BtnTypeClick(Sender : TObject);
var sqltxt : string;
begin
  keyValue := '';   //按钮直接查询要用的初始化
  if ActiveControl.ClassType <> TRzBitBtn then
    Exit;
  if Copy(ActiveControl.Name,1,4) <> 'btn_' then
    Exit;

  sType := TRzBitBtn(Sender).Caption;
  if (sTypeLoadFlag = sType) and (isEditing = false) then
  begin
    tntpgcntrl2.ActivePage := pg3;
    Exit;
  end;
  //按钮颜色改变
  sTypeLoadFlag := sType;
  OldBtn.Font.Color := FONT_COLOR;
  OldBtn.ParentFont := True;
  TRzBitBtn(Sender).Font.Color := GROUP_COLOR;
  OldBtn := TRzBitBtn(Sender);

  if TRzBitBtn(Sender).Name = 'btn_0' then
  begin
    sqltxt := 'select * from PRO_LIST order by PRO_NAME';
  end
  else
  begin
    sqltxt := 'select * from PRO_LIST where PRO_TYPE = ''' + sType + ''' order by PRO_NAME';
  end;
  with qryCmd do
  begin
    Close;
    SQL.Clear;
    SQL.Add(sqltxt);
    Open;
  end;
  sActiveBtn := sType;
  edtnow.Text := sActiveBtn;
  pg3.Caption := sActiveBtn;
  LoadShortcutKey(Sender);
  tntpgcntrl2.ActivePage := pg3;
end;

{****************************************************************
* 过程名称:  FormCreate
* 功能描述:  数据库连接,加载分组
* 参数说明:  Sender : TObject
* 返 回 值:  无
* 历史记录:  2013.1.29 created by xzj
*****************************************************************}
procedure TFormUse.FormCreate(Sender: TObject);
var
  sDir, connTmp: string;
begin
  getdir(0, sPath);
  sDir := ExtractFilePath(Application.ExeName);
  chDir(sDir); // 设置工作目录为程序目录。
  SetCurrentDir(sDir);
  connTmp := 'Provider=Microsoft.ACE.OLEDB.12.0;Data Source=' + sDir + '\LIST.accdb;Persist Security Info=False';

  con1.ConnectionString := connTmp;
  con1.Open;

  TOP := 0;
  LEFT := 0;
  FormUse.Width := screen.Width div 2 - 20;
  FormUse.Height := screen.Height - 32;
  tntpgcntrl2.Align := alclient;
  lvPro.Align := alclient;
  InitForm();
  QNLoadType; //加载类型按钮
end;

{****************************************************************
* 过程名称:  tmr1Timer
* 功能描述:  鼠标不在软件界面时自动隐藏界面
* 参数说明:  Sender : TObject
* 返 回 值:  无
* 历史记录:  2013.1.29 created by xzj
* 修改描述:  2013.2.1 modified by xzj
*            添加发送桌面快捷方式控制
*****************************************************************}
procedure TFormUse.tmr1Timer(Sender: TObject);
var
  rc: TRECT;
  pt: TPOINT;
begin
  if isEditing = True then
  begin
    Exit;
  end;
  GetWindowRect(self.Handle, rc);         //取窗体的矩形区域
  GetCursorPos(pt);                       //取得当前鼠标所在位置
  if (not PtInRect(rc, pt)) then          //如果鼠标不在窗体范围内
  begin
    if (HIDE_DIRECTION = '向上隐藏') then          //如果目前窗体正吸附在屏幕上沿,则上移隐藏窗体
    begin
      Top := 0 - Height + 2;
    end
    else if (HIDE_DIRECTION = '向下隐藏') then
    begin
      Top := Screen.Height - 2;
    end
    else if (HIDE_DIRECTION = '向左隐藏') then
    begin
      Left := 0 - Self.Width + 2;
      Top := 0;
    end
    else
    begin
      Left := Screen.Width - 2;
      Top := 0;
    end;
    Tmr1.Enabled := False;      //窗体隐藏后定时器关闭
    SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE); //将窗体推到最前
  end;
end;

{****************************************************************
* 过程名称:  edtAddKeyPress
* 功能描述:  添加新分组,使用回车键按钮事件来修改数据库内容
* 参数说明:  Sender: TObject; var Key: Char
* 返 回 值:  无
* 历史记录:  2013.1.29 created by xzj
* 修改描述:  2013.2.1 modified by xzj
*            控制分组名不为空
*****************************************************************}
procedure TFormUse.edtAddKeyPress(Sender: TObject; var Key: Char);
var sqltxt : string;
begin
  if Key = #13 then
  begin
    if edtAdd.Text = '' then
    begin
      ShowMessagePos('类名不能为空',(Self.Left + 250),(Self.Top + 300));
      exit;
    end;

    sqltxt := 'select * from PRO_TYPE where PRO_TYPE = ''' + edtAdd.Text + ''' ';
    with qryCmd do
    begin
      Close;
      SQL.Clear;
      SQL.Add(sqltxt);

      Open;
    end;
    if(qryCmd.RecordCount > 0) then
    begin
      ShowMessagePos('已存在名为' + edtAdd.Text + '的类别!',(Self.Left + 250),(Self.Top + 300));
      exit;
    end;
    sqltxt := 'insert into PRO_TYPE(PRO_TYPE) values(''' + edtAdd.Text + ''') ';
    with qryCmd do
    begin
      Close;
      SQL.Clear;
      SQL.Add(sqltxt);

      ExecSQL;
    end;
    edtAdd.Text := '按回车键确认';
    QNLoadType;   //重新加载分组
  end;
end;

{****************************************************************
* 过程名称:  tntmntmAddClick
* 功能描述:  添加新分组,显示输入框
* 参数说明:  Sender: TObject
* 返 回 值:  无
* 历史记录:  2013.1.29 created by xzj
*****************************************************************}
procedure TFormUse.tntmntmAddClick(Sender: TObject);
begin
  tntpgcntrl1.visible := True;
  tntpgcntrl1.activepage := pg1;
  edtAdd.SetFocus;
end;

{****************************************************************
* 过程名称:  edtEdtKeyPress
* 功能描述:  修改分组,使用回车键按钮事件来修改数据库内容
* 参数说明:  Sender: TObject; var Key: Char
* 返 回 值:  无
* 历史记录:  2013.1.29 created by xzj
*****************************************************************}
procedure TFormUse.edtEdtKeyPress(Sender: TObject; var Key: Char);
var sqltxt,sqlEdtType,sqlEdtList : string;
begin
  if sActiveBtn = '' then
  begin
    ShowMessagePos('请选中要修改的类别!',(Self.Left + 250),(Self.Top + 300));
    exit;
  end;
  sqlEdtType := 'update PRO_TYPE set PRO_TYPE = ''' + edtEdt.Text +''' where PRO_TYPE = ''' + sActiveBtn + ''' ';
  sqlEdtList := 'update PRO_LIST set PRO_TYPE = ''' + edtEdt.Text +''' where PRO_TYPE = ''' + sActiveBtn + ''' ';
  if Key = #13 then
  begin
    if edtEdt.Text = '' then
    begin
      ShowMessagePos('类名不能为空',(Self.Left + 250),(Self.Top + 300));
      exit;
    end;
    sqltxt := 'select * from PRO_TYPE where PRO_TYPE = ''' + edtEdt.Text + ''' ';
    Openqry(qrycmd,sqltxt);
    if(qryCmd.RecordCount > 0) then
    begin
      ShowMessagePos('已存在名为' + edtEdt.Text + '的类别!',(Self.Left + 250),(Self.Top + 300));
      exit;
    end
    else
    begin
      Execqry(qryCmd,sqlEdtType);
      Execqry(qrycmd,sqlEdtList);
    end;
    edtAdd.Text := '按回车键确认';
    QNLoadType;  //重新加载分组
  end;
end;

{****************************************************************
* 过程名称:  tntmntmqxClick
* 功能描述:  取消操作,隐藏添加和修改的page
* 参数说明:  Sender: TObject
* 返 回 值:  无
* 历史记录:  2013.1.29 created by xzj
*****************************************************************}
procedure TFormUse.tntmntmqxClick(Sender: TObject);
begin
  tntpgcntrl1.visible := False;
end;

{****************************************************************
* 过程名称:  lvProDblClick
* 功能描述:  双击快捷方式运行相应的程序
* 参数说明:  Sender: TObject
* 返 回 值:  无
* 历史记录:  2013.1.30 created by xzj
* 修改描述:
*            2013.1.31 modified by xzj
*            处于编辑状态不让运行程序
*****************************************************************}
procedure TFormUse.lvProDblClick(Sender: TObject);
var sActive,sqltxt : string;
begin

  if not Assigned(lvPro.Selected) then  //没有选中快捷方式,运行无效
  begin
    Exit;
  end
  else if isEditing = True then
  begin
    ShowMessagePos('现在处于编辑状态,请退出编辑',(Self.Left + 250),(Self.Top + 300));
    exit;
  end
  else
  begin
    //获取被选中的快捷方式在数据库中对应的ID
    sActive := IntToStr(anID[lvPro.Selected.ImageIndex]);
    //查询对应的快捷方式记录
    sqltxt := 'select * from PRO_LIST where ID = ' + sActive + '';
    Openqry(qryCmd,sqltxt);
    //找到记录中的快捷方式路径,打开.exe文件
    ShellExecute(handle, 'open', pchar(Trim(qryCmd.FieldByName('PRO_PATH').Value)), nil, nil, SW_SHOWNORMAL);

    //运行程序后隐藏窗体
    if (HIDE_DIRECTION = '向上隐藏') then          
    begin
      Top := 0 - Height + 2;
    end
    else if (HIDE_DIRECTION = '向下隐藏') then
    begin
      Top := Screen.Height - 2;
    end
    else if (HIDE_DIRECTION = '向左隐藏') then
    begin
      Left := 0 - Self.Width + 2;
      Top := 0;
    end
    else
    begin
      Left := Screen.Width - 2;
      Top := 0;
    end;
    //窗体隐藏后定时器关闭
    Tmr1.Enabled := False;
  end;
end;

{****************************************************************
* 过程名称:  tntmntmTailClick
* 功能描述:  修改查看方式为‘详情’
* 参数说明:  Sender: TObject
* 返 回 值:  无
* 历史记录:  2013.1.30 created by xzj
*****************************************************************}
procedure TFormUse.tntmntmTailClick(Sender: TObject);
begin
  lvPro.ViewStyle := vsSmallIcon;
  tntmntmTail.Checked := True;
  tntmntmList.Checked := False;
  tntmntmdefault.Checked := False;
end;

{****************************************************************
* 过程名称:  tntmntmListClick
* 功能描述:  修改查看方式为‘列表’
* 参数说明:  Sender: TObject
* 返 回 值:  无
* 历史记录:  2013.1.30 created by xzj
*****************************************************************}
procedure TFormUse.tntmntmListClick(Sender: TObject);
begin
  lvPro.ViewStyle := vsList;
  tntmntmTail.Checked := False;
  tntmntmList.Checked := True;
  tntmntmdefault.Checked := False;
end;

{****************************************************************
* 过程名称:  tntmntmdefaultClick
* 功能描述:  修改查看方式为‘默认’
* 参数说明:  Sender: TObject
* 返 回 值:  无
* 历史记录:  2013.1.30 created by xzj
*****************************************************************}
procedure TFormUse.tntmntmdefaultClick(Sender: TObject);
begin
  lvPro.ViewStyle := vsIcon;
  tntmntmTail.Checked := False;
  tntmntmList.Checked := False;
  tntmntmdefault.Checked := True;
end;

{****************************************************************
* 过程名称:  tntmntmEdtProClick
* 功能描述:  进入编辑状态,做好编辑准备
* 参数说明:  Sender: TObject
* 返 回 值:  无
* 历史记录:  2013.1.30 created by xzj
*****************************************************************}
procedure TFormUse.tntmntmEdtProClick(Sender: TObject);
begin
  //防止用户多次点击编辑按钮
  if isEditing = True then
  begin
    Exit;
  end;
  tntmntmEdtPro.Checked := True;
  //标示进入编辑状态
  isEditing := True;
  //界面变色,提示用户现在是编辑状态
  lvPro.Color := EDITING_COLOR;
  if  tntmntmEdtPro.Checked = True then
  begin
    //快捷方式进入可编辑状态
    lvPro.ReadOnly := False;
    //添加快捷方式时使用拖曳方式
    LWindowProc := lvPro.WindowProc;
    lvPro.WindowProc := LBWindowProc;
    DragAcceptFiles(lvPro.Handle, True);
    //删除按钮可用
    tntmntmDelPro.Enabled := True;
    //完成按钮可用
    tntmntmWc.Enabled := True;
    //删除所有按钮可用
    tntmntmdelall.Enabled := True;
  end;
  if tntmntmhide.Checked = True then
    tntmntmhide.Click;
  tntmntmhide.Enabled := False;
end;

{****************************************************************
* 过程名称:  tntmntmWcClick
* 功能描述:  编辑完成,做的与进入编辑状态相反
* 参数说明:  Sender: TObject
* 返 回 值:  无
* 历史记录:  2013.1.30 created by xzj
*****************************************************************}
procedure TFormUse.tntmntmWcClick(Sender: TObject);
begin
  lvPro.Color := SYS_COLOR;
  lvPro.ParentColor := True;
  //lvPro.ParentFont := True;
  isEditing := False;
  tntmntmEdtPro.Checked := False;
  tntmntmDelPro.Enabled := False;
  tntmntmWc.Enabled := False;
  tntmntmdelall.Enabled := False;
  lvPro.ReadOnly := True;
  tntmntmhide.Enabled := True;
  //关闭拖曳
  lvPro.WindowProc := LWindowProc;
  DragAcceptFiles(lvPro.Handle, False);
end;

{****************************************************************
* 过程名称:  tntmntmEdtProClick
* 功能描述:  取快捷链接的目标文件
* 参数说明:  const linkname: string
* 返 回 值:  string
* 历史记录:  2013.1.30 created by xzj
*****************************************************************}
function ExeFromLink(const linkname: string): string;
var
  link: IShellLink;
  storage: IPersistFile;
  filedata: TWin32FindData;
  buf: array[0..MAX_PATH] of Char;
  widepath: WideString;
begin
  OleCheck(CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IShellLink, link));
  OleCheck(link.QueryInterface(IPersistFile, storage));
  widepath := linkname;
  Result := '无效的快捷方式!快捷链接已失效!';
  if Succeeded(storage.Load(@widepath[1], STGM_READ)) then
    if Succeeded(link.Resolve(GetActiveWindow, SLR_NOUPDATE)) then
      if Succeeded(link.GetPath(buf, sizeof(buf), filedata, SLGP_UNCPRIORITY)) then
        Result := buf;
  storage := nil;
  link := nil;
end;

{****************************************************************
* 过程名称:  LBWindowProc
* 功能描述:  辅助拖曳
* 参数说明:  Message: TMessage
* 返 回 值:  无
* 历史记录:  2013.1.30 created by xzj
*****************************************************************}
procedure TFormUse.LBWindowProc(var Message: TMessage);
begin
  if Message.Msg = WM_DROPFILES then
    WMDROPFILES_l(Message);
  LWindowProc(Message);
end;

{****************************************************************
* 过程名称:  WMDROPFILES_L
* 功能描述:  添加快捷方式
* 参数说明:  Message: TMessage
* 返 回 值:  无
* 历史记录:  2013.1.30 created by xzj
*****************************************************************}
procedure TFormUse.WMDROPFILES_L(var Msg: TMessage);
var
  pcFileName: PChar;
  i, iSize, iFileCount: integer;
  v_ps: string;
  sCutPath : string;
  sCutName : string;
  sqltxt : string;
begin
  pcFileName := '';
  iFileCount := DragQueryFile(Msg.wParam, $FFFFFFFF, pcFileName, 255);
  for i := 0 to iFileCount - 1 do
  begin
    iSize := DragQueryFile(Msg.wParam, i, nil, 0) + 1;
    pcFileName := StrAlloc(iSize);
    DragQueryFile(Msg.wParam, i, pcFileName, iSize);
//    if FileExists(pcFileName) then  //判断是否存在
    v_ps := pcFileName;

    StrDispose(pcFileName);
  end;
  DragFinish(Msg.wParam);

  //Delphi取快捷方式的目标路径
  if LowerCase(ExtractFileExt(v_ps)) = '.lnk' then //判断是否为快捷后缀文件
    sCutPath := ExeFromLink(v_ps)
  else
    sCutPath := LowerCase(v_ps);
  sCutName := ExtractFilename(sCutPath);
  sqltxt := 'insert into PRO_LIST(PRO_TYPE,PRO_NAME,PRO_PATH) '
          + 'values(''' + sActiveBtn + ''', ''' + copy(sCutName, 1, pos(ExtractFileExt(sCutName), sCutName) - 1) + ''', ''' + sCutPath + ''') ';
  Execqry(qryCmd,sqltxt);
  //使用鼠标移动事件刷新
  lvPro.Tag := 1;
end;

{****************************************************************
* 过程名称:  tntmntmDelProClick
* 功能描述:  删除快捷方式
* 参数说明:  Sender: TObject
* 返 回 值:  无
* 历史记录:  2013.1.30 created by xzj
*****************************************************************}
procedure TFormUse.tntmntmDelProClick(Sender: TObject);
var sqltxt : string;
begin
  if not Assigned(lvPro.Selected) then
  begin
    Exit;
  end;

  sqltxt := 'delete from PRO_LIST where ID = ' + IntToStr(anID[lvPro.Selected.ImageIndex]) + ' ';
  Execqry(qryCmd,sqltxt);
  //使用鼠标移动事件刷新
  lvPro.Tag := 1;
end;

{****************************************************************
* 过程名称:  FormShow
* 功能描述:  布置进入界面初始状态
* 参数说明:  Sender: TObject
* 返 回 值:  无
* 历史记录:  2013.1.30 created by xzj
* 修改描述: 2013.2.1 modified by xzj
*            如果本程序开机自启动,则菜单按钮开机自启动选中
*            2013.2.21 modified by xzj
*            添加隐藏项的初始化
*****************************************************************}
procedure TFormUse.FormShow(Sender: TObject);
var
  reg : TRegistry;
  isExist : Boolean;
begin
  ActiveControl := abtnType[1];
  abtnType[1].click;
  tntpgcntrl2.ActivePage := pg3;
  pg3.Caption := sActiveBtn;
  rztrycn1.Hint := '浅诺桌面管理工具v1.0';
  GetSystemPath();

  Reg := Tregistry.Create;
  Reg.RootKey := HKEY_LOCAL_MACHINE;
  reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run', True);
  isExist := reg.ValueExists('浅诺桌面管理工具v1.0');
  if isExist = True then
  begin
    tntmntmAutoOpen.Checked := True;
  end
  else
  begin
    tntmntmAutoOpen.Checked := False;
  end;

  lblName.Font.Size := 20;
  AddInitForm();
  //skndt1.LoadFromCollection(sknstr1,4);
  //skndt1.Active := True;
end;

{****************************************************************
* 过程名称:  tntmntmEditClick
* 功能描述:  显示修改分组框
* 参数说明:  Sender: TObject
* 返 回 值:  无
* 历史记录:  2013.1.30 created by xzj
*****************************************************************}
procedure TFormUse.tntmntmEditClick(Sender: TObject);
begin
  tntpgcntrl1.visible := True;
  pg2.Visible := True;
  tntpgcntrl1.activepage := pg2;
  pg1.Visible := False;
  edtnow.Text := sActiveBtn;
  edtEdt.SetFocus;
end;

{****************************************************************
* 过程名称:  tntmntmdeleteClick
* 功能描述:  删除已选中分组
* 参数说明:  Sender: TObject
* 返 回 值:  无
* 历史记录:  2013.1.30 created by xzj
*****************************************************************}
procedure TFormUse.tntmntmdeleteClick(Sender: TObject);
var sqltxt : string;
begin
  if Application.MessageBox(System.Pchar('是否要删除' + sActiveBtn + '?'), '询问', 1 + 32) = id_OK then
  begin
    sqltxt := 'delete from PRO_TYPE where PRO_TYPE = ''' + sActiveBtn + ''' ';

    with qryCmd do
    begin
      Close;
      SQL.Clear;
      SQL.Add('select * from PRO_LIST where PRO_TYPE = ''' + sActiveBtn + ''' ');
      Open;

      if IsEmpty then
      begin
        Close;
        SQL.Clear;
        SQL.Add(sqltxt);
        ExecSQL;
      end
      else
      begin
        ShowMessagePos('要删除的类别下有程序,不可删除!',(Self.Left + 250),(Self.Top + 300));
      end;
    end;
    QNLoadType;
    ActiveControl := abtnType[1];
    abtnType[1].Click;
    pg3.Caption := abtnType[1].Caption;
  end;
end;

{****************************************************************
* 过程名称:  tntmntmhideClick
* 功能描述:  显示和隐藏分组
* 参数说明:  Sender: TObject
* 返 回 值:  无
* 历史记录:  2013.1.30 created by xzj
*****************************************************************}
procedure TFormUse.tntmntmhideClick(Sender: TObject);
var sqltxt : string;
begin
  if tntmntmhide.Checked = True then
  begin
    tntmntmhide.Checked := False;
    tntscrlbxType.Visible := True;
    sqltxt := 'update PRO_SET set SHOW_TYPE = True where ID = 1 ';
  end
  else
  begin
    tntmntmhide.Checked := True;
    tntscrlbxType.Visible := False;
    sqltxt := 'update PRO_SET set SHOW_TYPE = False where ID = 1 ';
  end;
  Execqry(qryCmd,sqltxt);
  if tntmntmTail.Checked = True then
  begin
    tntmntmList.Click;
    tntmntmTail.Click;
  end
  else if tntmntmList.Checked = True then
  begin
    tntmntmTail.Click;
    tntmntmList.Click;
  end
  else
  begin
    tntmntmList.Click;
    tntmntmdefault.Click;
  end;
end;

{****************************************************************
* 过程名称:  lvProMouseMove
* 功能描述:  显示操作帮助,修改快捷方式后刷新
* 参数说明:  Sender: TObject; Shift: TShiftState; X,Y: Integer
* 返 回 值:  无
* 历史记录:  2013.1.31 created by xzj
* 修改描述:  2013.2.21 modified by xzj
*            添加鼠标拖动窗体效果
*****************************************************************}
procedure TFormUse.lvProMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
  var i : Integer;
begin
  if isEditing = False then
  begin
    lvPro.Hint := '双击图标可打开文件';
  end
  else
  begin
    lvPro.Hint := '将快捷方式拖入本框即可添加';


    //修改快捷方式后刷新
    if(lvPro.Tag = 1) then
    begin
        for i := 1 to 49 do
        begin
          if abtnType[i] <> nil then
          begin
            if abtnType[i].Caption = sActiveBtn then
            begin
              ActiveControl := abtnType[i];
              abtnType[i].Click;
              Break;
            end;
          end;
        end;
        lvPro.Tag := 0;
    end;
    
  end;
    lvPro.ShowHint := True;
    {
  //获取当前输入法
  hInNow := GetKeyboardLayout(0);
  for i := 0 to Screen.Imes.Count - 1 do
  begin
    if HKL(Screen.Imes.Objects[i]) = hInNow then
    begin
      //ShowMessage(Screen.Imes.Strings[i]);
      Break;
    end;
  end;
  }
  //拖动窗体
  if (ssleft in Shift) then
  begin
    ReleaseCapture;
    Perform(WM_syscommand, $F012, 0);
  end;
end;

{****************************************************************
* 过程名称:  tntmntmdelallClick
* 功能描述:  删除所有的快捷方式,并初始化数据库表
* 参数说明:  Sender: TObject
* 返 回 值:  无
* 历史记录:  2013.1.31 created by xzj
*****************************************************************}
procedure TFormUse.tntmntmdelallClick(Sender: TObject);
var sqltxt : string;
begin
  if Application.MessageBox(System.Pchar('是否要删除所有程序?'), '询问', 1 + 32) = id_OK then
  begin
    sqltxt := 'delete from PRO_LIST';
    Execqry(qryCmd,sqltxt);
    sqltxt := 'Alter table[PRO_LIST] Alter column[ID] counter(1,1) ';
    Execqry(qryCmd,sqltxt);
    lvPro.Clear;
  end;
end;

{****************************************************************
* 过程名称:  tntmntmdelalltypeClick
* 功能描述:  删除所有的分组,并初始化数据库表
* 参数说明:  Sender: TObject
* 返 回 值:  无
* 历史记录:  2013.1.31 created by xzj
*****************************************************************}
procedure TFormUse.tntmntmdelalltypeClick(Sender: TObject);
var sqltxt : string;
begin
  if Application.MessageBox(System.Pchar('是否要删除所有分组?'), '询问', 1 + 32) = id_OK then
  begin
    sqltxt := 'select * from PRO_LIST';
    Openqry(qryCmd, sqltxt);
    if qryCmd.IsEmpty then
    begin
      sqltxt := 'delete from PRO_TYPE';
      Execqry(qryCmd,sqltxt);
      sqltxt := 'Alter table[PRO_TYPE] Alter column[ID] counter(1,1) ';
      Execqry(qryCmd,sqltxt);
      lvPro.Clear;
    end
    else
    begin
      ShowMessagePos('还有快捷方式,不可做‘删除所有’操作',(Self.Left + 250),(Self.Top + 300));
    end;
  end;
  QNLoadType;
  ActiveControl := abtnType[1];
  abtnType[1].Click;
  pg3.Caption := abtnType[1].Caption;
end;

{****************************************************************
* 过程名称:  lvProEdited
* 功能描述:  修改快捷方式名称
* 参数说明:  Sender: TObject; Item: TTntListItem;var S: WideString
*            其中S就是修改后的名称
* 返 回 值:  无
* 历史记录:  2013.1.31 created by xzj
*****************************************************************}
procedure TFormUse.lvProEdited(Sender: TObject; Item: TTntListItem;
  var S: WideString);
  var sActiveID,sqltxt : string;
begin
  //lvPro.Tag := 1;
  sActiveID := IntToStr(anID[lvPro.Selected.ImageIndex]);
  sqltxt := 'update PRO_LIST set PRO_NAME = ''' + S + ''' where ID = ' + sActiveID + ' ';
  Execqry(qryCmd,sqltxt);
end;

{****************************************************************
* 过程名称:  Get_HZPY_First
* 功能描述:  获取汉字拼音首字母
* 参数说明:  hz : string
* 返 回 值:  Char
* 历史记录:  2013.1.31 created by xzj
*****************************************************************}
function Get_HZPY_First(hz : string) : Char;
begin
  case WORD(hz[1])shl 8 + WORD(hz[2]) of
    $B0A1..$B0C4 : Result := 'a';
    $B0C5..$B2C0 : Result := 'b';
    $B2C1..$B4ED : Result := 'c';
    $B4EE..$B6E9 : Result := 'd';
    $B6EA..$B7A1 : Result := 'e';
    $B7A2..$B8C0 : Result := 'f';
    $B8C1..$B9FD : Result := 'g';
    $B9FE..$BBF6 : Result := 'h';
    $BBF7..$BFA5 : Result := 'j';
    $BFA6..$C0AB : Result := 'k';
    $C0AC..$C2E7 : Result := 'l';
    $C2E8..$C4C2 : Result := 'm';
    $C4C3..$C5B5 : Result := 'n';
    $C5B6..$C5BD : Result := 'o';
    $C5BE..$C6D9 : Result := 'p';
    $C6DA..$C8BA : Result := 'q';
    $C8BB..$C8F5 : Result := 'r';
    $C8F6..$CBF9 : Result := 's';
    $CBFA..$CDD9 : Result := 't';
    $CDDA..$CEF3 : Result := 'w';
    $CEF4..$D1B8 : Result := 'x';
    $D1B9..$D4D0 : Result := 'y';
    $D4D1..$D7F9 : Result := 'z';
  else
    //传入的为数字或字母则原样返回
    Result := hz[1];
  end;
end;

{****************************************************************
* 过程名称:  lvProKeyPress
* 功能描述:  按键之间查找
* 参数说明:  Sender: TObject; var Key: Char
* 返 回 值:  无
* 历史记录:  2013.1.31 created by xzj
*****************************************************************}
procedure TFormUse.lvProKeyPress(Sender: TObject; var Key: Char);
var sActiveName,sSelect : string;
    i,j : Integer;
    nIsReg : Boolean;    //对比是否相等
begin
  if isEditing = True then
  begin
    Exit;
  end;
  nIsReg := False;
  keyValue := keyValue + Key;
  //回车键运行程序
  if Key = #13 then
  begin
    lvProDblClick(Sender);
  end
  else
  begin
    tmrRe.Enabled := True;  //打开计时器
    
    for i := 0 to lvPro.Items.Count - 1 do
    begin
      for j := 0 to Length(lvPro.Items.Item[i].Caption) do
      begin
        sActiveName := Copy(lvPro.Items.Item[i].Caption,j + 1,1);
        if(sActiveName = '') then
        begin
          Break;
        end;
        sSelect := sSelect + LowerCase(Get_HZPY_First(sActiveName));
        if(sSelect = keyValue) then
        begin
          nIsReg := True;
          lvPro.Items.Item[i].Selected := True;
          Break;
        end;
        //长度超出所输入的字母,直接退出循环,优化
        if(Length(sSelect) > Length(keyValue)) then
        begin
          Break;
        end;
      end;
      if(sSelect <> KeyValue) then
      begin
        sSelect := '';
      end;
      if nIsReg then
      begin
        break;
      end;
    end;
  end;
  
  if nIsReg = False then
  begin
    keyValue := '';
  end;
end;

{****************************************************************
* 过程名称: CreateLink
* 功能描述: 创建桌面快捷方式
* 参数说明: programPath:目标文件全路径  programArg:目标文件参数
*           LinkPath:快捷方式全路径     Descr:快捷方式描述
* 返 回 值: 无
* 历史记录: 2013.2.1 created by xzj
****************************************************************}
procedure TFormUse.CreateLink(programPath,programArg,LinkPath,Descr : string);
var
  AnObj : IUnknown;
  ShellLink : IShellLink;
  AFile : IPersistFile;
  FileName : WideString;
begin
  if UpperCase(ExtractFileExt(LinkPath)) <> '.LNK' then
  begin
    raise Exception.Create('快捷方式无效!');
  end;
  try
    OleInitialize(nil);
    AnObj := CreateComObject(CLSID_ShellLink);
    ShellLink := AnObj as IShellLink;
    AFile := AnObj as IPersistFile;
    ShellLink.SetPath(PChar(programPath));
    ShellLink.SetArguments(PChar(programArg));
    ShellLink.SetWorkingDirectory(PChar(ExtractFilePath(programPath)));
    ShellLink.SetDescription(PChar(Descr));
    FileName := LinkPath;
    AFile.Save(PWChar(FileName),True);
  finally
    OleUninitialize;
  end;
end;

{****************************************************************
* 过程名称: tntmntmSendLinkClick
* 功能描述: 发送桌面快捷方式响应
* 参数说明: Sender: TObject
* 返 回 值: 无
* 历史记录: 2013.2.1 created by xzj
****************************************************************}
procedure TFormUse.tntmntmSendLinkClick(Sender: TObject);
var
  tmp : array[0..MAX_PATH] of Char;
  pitem : PITEMIDLIST;
  DeskDir : string;
  sSelectID : string;
  sqltxt : string;
begin
  //获取桌面路径
  SHGetSpecialFolderLocation(Handle,CSIDL_DESKTOP,pitem);
  SHGetPathFromIDList(pitem,tmp);
  DeskDir := string(tmp);
  if Length(DeskDir) > 3 then
  begin
    DeskDir := DeskDir + '\';
  end;
  if not Assigned(lvPro.Selected) then
  begin
    CreateLink(ParamStr(0),'',DeskDir + Application.Title + '.lnk','');
  end
  else
  begin
    //获取当前获焦的快捷方式ID
    sSelectID := IntToStr(anID[lvPro.Selected.ImageIndex]);
    //获取当前获焦的快捷方式名称
    sqltxt := 'select * from PRO_LIST where ID = ' + sSelectID + ' ';
    Openqry(qryCmd, sqltxt);
    //发送桌面快捷方式
    CreateLink(qryCmd.fieldbyname('PRO_PATH').AsString,'',DeskDir + lvPro.Selected.Caption + '.lnk','');
  end;
end;

{****************************************************************
* 过程名称: tntmntmSendAllClick
* 功能描述: 发送当前分组下的所有桌面快捷方式到桌面
* 参数说明: Sender: TObject
* 返 回 值: 无
* 历史记录: 2013.2.2 created by xzj
****************************************************************}
procedure TFormUse.tntmntmSendAllClick(Sender: TObject);
var
  tmp : array[0..MAX_PATH] of Char;
  pitem : PITEMIDLIST;
  DeskDir : string;
  sqltxt : string;
  i : Integer;
begin
  //获取桌面路径
  SHGetSpecialFolderLocation(Handle,CSIDL_DESKTOP,pitem);
  SHGetPathFromIDList(pitem,tmp);
  DeskDir := string(tmp);
  if Length(DeskDir) > 3 then
  begin
    DeskDir := DeskDir + '\';
  end;
  if sActiveBtn = '所有程序' then
  begin
    sqltxt := 'select * from PRO_LIST order by ID';
  end
  else
  begin
    sqltxt := 'select * from PRO_LIST where PRO_TYPE = ''' + sActiveBtn + ''' order by ID ';
  end;
  Openqry(qryCmd,sqltxt);
  qryCmd.First;
  for i := 0 to qryCmd.RecordCount - 1 do
  begin
    //发送桌面快捷方式
    CreateLink(qryCmd.fieldbyname('PRO_PATH').AsString,'',DeskDir + qryCmd.fieldbyname('PRO_NAME').AsString + '.lnk','');
    qryCmd.Next;
  end;
end;

{****************************************************************
* 过程名称: GetSystemPath
* 功能描述: 加载系统盘符
* 参数说明: 无
* 返 回 值: 无
* 历史记录: 2013.2.1 created by xzj
****************************************************************}
procedure TFormUse.GetSystemPath();
var
  i : Integer;
  nRand : Integer;
  newMenu : TMenuItem;
  str : string;
  nRes : Integer;
begin
  Randomize;
  for i := 65 to 90 do
  begin
    nRes := GetDriveType(PChar(Chr(i) + ':\'));
    if(nRes = 2) or (nRes = 3)  then
    begin
      nRand := Random(97) + 1;
      str := Char(i);
      newMenu := TMenuItem.Create(self);
      newMenu.Caption := str + '盘';
      newMenu.Bitmap.LoadFromFile('emotions\' + IntToStr(nRand) + 'fixed.bmp');
      newMenu.Name := str;
      newMenu.OnClick := MenuBtnOnClick;
      tntpmnPC.Items.Add(newMenu);
    end;
  end;
end;

{****************************************************************
* 过程名称: MenuBtnOnClick
* 功能描述: 盘符按钮响应事件
* 参数说明: 无
* 返 回 值: 无
* 历史记录: 2013.2.1 created by xzj
****************************************************************}
procedure TFormUse.MenuBtnOnClick(Sender : TObject);
var
  nClickBtn : string;
begin
     nClickBtn := TMenuItem(Sender).Caption;
     nClickBtn := Copy(nClickBtn,1,1);
     nClickBtn := nClickBtn + ':\';

    //打开指定路径
    ShellExecute(handle, 'open', pchar(nClickBtn), nil, nil, SW_SHOWNORMAL);
    //运行程序后隐藏窗体
    if (HIDE_DIRECTION = '向上隐藏') then          
    begin
      Top := 0 - Height + 2;
    end
    else if (HIDE_DIRECTION = '向下隐藏') then
    begin
      Top := Screen.Height - 2;
    end
    else if (HIDE_DIRECTION = '向左隐藏') then
    begin
      Left := 0 - Self.Width + 2;
      Top := 0;
    end
    else
    begin
      Left := Screen.Width - 2;
      Top := 0;
    end;
    //窗体隐藏后定时器关闭
    Tmr1.Enabled := False;
end;

{****************************************************************
* 过程名称: btn1Click
* 功能描述: 关闭计算机
* 参数说明: Sender: TObject
* 返 回 值: 无
* 历史记录: 2013.2.1 created by xzj
****************************************************************}
procedure TFormUse.btn1Click(Sender: TObject);
begin
  if Application.MessageBox(System.Pchar('关闭计算机?'), '询问', 1 + 32) = id_OK then
  begin
    ShellExecute(Handle,'open','shutdown.exe','-f -s -t 0', nil, SW_HIDE);
  end;
end;

{****************************************************************
* 过程名称: tntmntmCloseClick
* 功能描述: 关闭程序
* 参数说明: Sender: TObject
* 返 回 值: 无
* 历史记录: 2013.2.1 created by xzj
****************************************************************}
procedure TFormUse.tntmntmCloseClick(Sender: TObject);
begin
  close;
end;

{****************************************************************
* 过程名称: tmr2Timer
* 功能描述: 标签变色,美化界面
* 参数说明: Sender: TObject
* 返 回 值: 无
* 历史记录: 2013.2.1 created by xzj
****************************************************************}
{
procedure TFormUse.tmr2Timer(Sender: TObject);
var
  sColor : array[1..10] of Tcolor;
  i : Integer;
begin
  Randomize;
  sColor[1] := clYellow;
  sColor[2] := clLime;
  sColor[3] := clPurple;
  sColor[4] := clMaroon;
  sColor[5] := clGreen;
  sColor[6] := clAqua;
  sColor[7] := clWhite;
  sColor[8] := clBlue;
  sColor[9] := clInactiveCaption;
  sColor[10] := clRed;
  i := Random(10) + 1;
  lblName.Font.Color := sColor[i];
  i := Random(10) + 1;
  lbl1.Font.Color := sColor[i];
  btn1.Font.Color := sColor[i];
  i := Random(10) + 1;
  lbl2.Font.Color := sColor[i];
  btnPC.Font.Color := sColor[i];

  //i := Random(10) + 1;
  //if (i = 7) or (sActiveBtn = '所有程序') then
  //  Exit;
  //lvPro.Font.Color := clRed;
  //tntscrlbxType.Font.Color := clRed;

end;
}
{****************************************************************
* 过程名称: tntmntmAutoOpenClick
* 功能描述: 开机自启动
* 参数说明: Sender: TObject
* 返 回 值: 无
* 历史记录: 2013.2.1 created by xzj
****************************************************************}
procedure TFormUse.tntmntmAutoOpenClick(Sender: TObject);
var
  reg: tregistry;
begin
//把程序写入到注册表的启动中
  if not tntmntmAutoOpen.Checked then
  begin
    Reg := Tregistry.Create;
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    try

      reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run', True);
      Reg.WriteString('浅诺桌面管理工具v1.0', ExtractFilePath(Application.ExeName) + 'QnDeskMng.exe');
      tntmntmAutoOpen.Checked := True;
    finally
      Reg.closekey;
      reg.Free;
    end;
  end
  else
  begin
    Reg := Tregistry.Create;
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    try
      reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run', True);
      Reg.DeleteValue('浅诺桌面管理工具v1.0');
      tntmntmAutoOpen.Checked := False;
    finally
      Reg.closekey;
      reg.Free;
    end;
  end;
end;

{****************************************************************
* 过程名称: tmr3Timer
* 功能描述: 显示当前时间
* 参数说明: Sender: TObject
* 返 回 值: 无
* 历史记录: 2013.2.2 created by xzj
****************************************************************}
procedure TFormUse.tmr3Timer(Sender: TObject);
begin
  edtTime.Text := FormatDateTime('yyyy年mm月dd日hh时nn分ss秒',Now());
end;

{****************************************************************
* 过程名称: tmrReTimer
* 功能描述: 刷新当前键值
* 参数说明: Sender: TObject
* 返 回 值: 无
* 历史记录: 2013.2.2 created by xzj (解决按键查询的键值更新问题)
****************************************************************}
procedure TFormUse.tmrReTimer(Sender: TObject);
begin
  keyValue := '';

  //关闭计时器
  tmrRe.Enabled := False;
end;

{****************************************************************
* 过程名称: tmrsxTimer
* 功能描述: 不显示任务栏图标,没有选中快捷方式不让发送桌面快捷方式
* 参数说明: Sender: TObject
* 返 回 值: 无
* 历史记录: 2013.2.2 created by xzj
* 修改记录: 2013.2.17 modified by xzj
*           窗体在隐藏状态时将窗体推到最前
****************************************************************}
procedure TFormUse.tmrsxTimer(Sender: TObject);
begin
    //程序不显示任务栏
  ShowWindow(Application.Handle,SW_HIDE);
  
  //没有选中快捷方式不让发送桌面快捷方式
  if not Assigned(lvPro.Selected) then
  begin
    tntmntmSendLink.Enabled := False;
  end
  else
  begin
    tntmntmSendLink.Enabled := True;
  end;

  //显示当前选中的快捷方式
  if Assigned(lvPro.Selected) then
    edtKeyNow.Text := lvPro.Selected.Caption
  else
    edtKeyNow.Text := '无';

  //窗体在隐藏状态时将窗体推到最前
  if(Top = 0 - Height + 2) or ( Top = Screen.Height - 2) or (Left = 0 - Self.Width + 2) or (Left = Screen.Width - 2) then
    SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE); //将窗体推到最前
end;

{****************************************************************
* 过程名称: cbbFCChange
* 功能描述: 修改窗体颜色
* 参数说明: Sender: TObject
* 返 回 值: 无
* 历史记录: 2013.2.6 created by xzj 
****************************************************************}
procedure TFormUse.cbbFCChange(Sender: TObject);
var
  sqltxt : string;
begin
  sqltxt := 'update PRO_SET set FORM_COLOR = ''' + ColorToString(cbbFC.SelectedColor) + ''' where ID = 1 ';
  Execqry(qrySet,sqltxt);
  Self.Color := cbbFC.SelectedColor;
  SYS_COLOR := cbbFC.SelectedColor;
end;

{****************************************************************
* 过程名称: cbbFONTCChange
* 功能描述: 修改字体颜色
* 参数说明: Sender: TObject
* 返 回 值: 无
* 历史记录: 2013.2.6 created by xzj
****************************************************************}
procedure TFormUse.cbbFONTCChange(Sender: TObject);
var
  sqltxt : string;
begin
  sqltxt := 'update PRO_SET set FONT_COLOR = ''' + ColorToString(cbbFONTC.SelectedColor) + ''' where ID = 1 ';
  Execqry(qrySet,sqltxt);
  Self.Font.Color := cbbFONTC.SelectedColor;
  FONT_COLOR := cbbFONTC.SelectedColor;
  lblName.ParentFont := True;
  lblName.Font.Size := 20;
end;

{****************************************************************
* 过程名称: cbbGCChange
* 功能描述: 修改选中分组字体的颜色
* 参数说明: Sender: TObject
* 返 回 值: 无
* 历史记录: 2013.2.6 created by xzj
****************************************************************}
procedure TFormUse.cbbGCChange(Sender: TObject);
var
  sqltxt : string;
begin
  sqltxt := 'update PRO_SET set GROUP_COLOR = ''' + ColorToString(cbbGC.SelectedColor) + ''' where ID = 1 ';
  Execqry(qrySet,sqltxt);
  GROUP_COLOR := cbbGC.SelectedColor;
end;

{****************************************************************
* 过程名称: cbbECChange
* 功能描述: 修改编辑状态时区域的颜色
* 参数说明: Sender: TObject
* 返 回 值: 无
* 历史记录: 2013.2.6 created by xzj
****************************************************************}
procedure TFormUse.cbbECChange(Sender: TObject);
var
  sqltxt : string;
begin
  sqltxt := 'update PRO_SET set EDITING_COLOR = ''' + ColorToString(cbbEC.SelectedColor) + ''' where ID = 1 ';
  Execqry(qrySet,sqltxt);
  EDITING_COLOR := cbbEC.SelectedColor;
end;

{****************************************************************
* 过程名称: cbbFTChange
* 功能描述: 修改窗体类型
* 参数说明: Sender: TObject
* 返 回 值: 无
* 历史记录: 2013.2.6 created by xzj
****************************************************************}
procedure TFormUse.cbbFTChange(Sender: TObject);
var
  //sFormStyle : string;
  sqltxt : string;
begin
  sqltxt := 'update PRO_SET set FORM_STYLE = ''' + cbbFT.Text + ''' where ID = 1 ';
  Execqry(qrySet,sqltxt);
  ShowMessagePos('重启后有效!',(Self.Left + 250),(Self.Top + 300));
  {
  sFormStyle := cbbFT.Text;
  if sFormStyle = 'bsNone' then
    Self.BorderStyle := bsNone
  else if sFormStyle = 'bsDialog' then
    Self.BorderStyle := bsDialog
  else if sFormStyle = 'bsSingle' then
    Self.BorderStyle := bsSingle
  else if sFormStyle = 'bsSizeable' then
    Self.BorderStyle := bsSizeable
  else if sFormStyle = 'bsSizeToolWin' then
    Self.BorderStyle := bsSizeToolWin
  else
    Self.BorderStyle := bsToolWindow;
  }
end;

{****************************************************************
* 过程名称: cbbHDChange
* 功能描述: 修改窗体隐藏方向
* 参数说明: Sender: TObject
* 返 回 值: 无
* 历史记录: 2013.2.6 created by xzj
****************************************************************}
procedure TFormUse.cbbHDChange(Sender: TObject);
var
  sqltxt : string;
begin
  sqltxt := 'update PRO_SET set HIDE_DIRECTION = ''' + cbbHD.Text + ''' where ID = 1 ';
  Execqry(qrySet,sqltxt);
  HIDE_DIRECTION := cbbHD.Text;
end;

{****************************************************************
* 过程名称: cbbSHChange
* 功能描述: 设置是否显示帮助
* 参数说明: Sender: TObject
* 返 回 值: 无
* 历史记录: 2013.2.6 created by xzj
****************************************************************}
procedure TFormUse.cbbSHChange(Sender: TObject);
var
  sqltxt : string;
begin
  if Trim(cbbSH.Text) = '是' then
  begin
    sqltxt := 'update PRO_SET set SHOW_HELP = true where ID = 1 ';
    pg4.TabVisible := True;
  end
  else
  begin
    sqltxt := 'update PRO_SET set SHOW_HELP = False where ID = 1 ';
    pg4.TabVisible := False;
  end;
  Execqry(qrySet,sqltxt);
end;

{****************************************************************
* 过程名称: InitForm
* 功能描述: 初始化窗体
* 参数说明: Sender: TObject
* 返 回 值: 无
* 历史记录: 2013.2.6 created by xzj
****************************************************************}
procedure TFormUse.InitForm();
var
  sFormStyle : string;
begin
  Openqry(qryInit,'select * from PRO_SET where ID = 1');
  SYS_COLOR := StringToColor(qryInit.fieldbyname('FORM_COLOR').AsString);
  self.Color := SYS_COLOR;
  FONT_COLOR := StringToColor(qryInit.fieldbyname('FONT_COLOR').AsString);
  Self.Font.Color := FONT_COLOR;
  EDITING_COLOR := StringToColor(qryInit.fieldbyname('EDITING_COLOR').AsString);
  GROUP_COLOR := StringToColor(qryInit.fieldbyname('GROUP_COLOR').AsString);
  if(qryInit.fieldbyname('SHOW_HELP').AsString = 'True') then
  begin
    pg4.TabVisible := True;
    cbbSH.Value := '是';
  end
  else
  begin
    pg4.TabVisible := False;
    cbbSH.Value := '否';
  end;



  sFormStyle := qryInit.fieldbyname('FORM_STYLE').AsString;
  if sFormStyle = 'bsNone' then
    Self.BorderStyle := bsNone
  else if sFormStyle = 'bsDialog' then
    Self.BorderStyle := bsDialog
  else if sFormStyle = 'bsSingle' then
    Self.BorderStyle := bsSingle
  else if sFormStyle = 'bsSizeable' then
    Self.BorderStyle := bsSizeable
  else if sFormStyle = 'bsSizeToolWin' then
    Self.BorderStyle := bsSizeToolWin
  else
    Self.BorderStyle := bsToolWindow;

  HIDE_DIRECTION := qryInit.fieldbyname('HIDE_DIRECTION').AsString;
  
  cbbFC.SelectedColor := SYS_COLOR;
  cbbFONTC.SelectedColor := FONT_COLOR;
  cbbGC.SelectedColor := GROUP_COLOR;
  cbbEC.SelectedColor := EDITING_COLOR;
  cbbFT.Value := sFormStyle;
  cbbHD.Value := HIDE_DIRECTION;
end;

{****************************************************************
* 过程名称: tntmntmexitClick
* 功能描述: 退出窗体
* 参数说明: Sender: TObject
* 返 回 值: 无
* 历史记录: 2013.2.18 created by xzj
****************************************************************}
procedure TFormUse.tntmntmexitClick(Sender: TObject);
begin
  close;
end;

{****************************************************************
* 过程名称: tntmntmHideZTClick
* 功能描述: 隐藏状态栏
* 参数说明: Sender: TObject
* 返 回 值: 无
* 历史记录: 2013.2.21 created by xzj
****************************************************************}
procedure TFormUse.tntmntmHideZTClick(Sender: TObject);
var sqltxt : string;
begin
  if tntmntmHideZT.Checked = True then
  begin
    tntmntmHideZT.Checked := False;
    tntcntrlbr1.Visible := True;
    sqltxt := 'update PRO_SET set SHOW_TOOL = True where ID = 1 ';
  end
  else
  begin
    tntmntmHideZT.Checked := True;
    tntcntrlbr1.Visible := False;
    sqltxt := 'update PRO_SET set SHOW_TOOL = False where ID = 1 ';
  end;
  Execqry(qryCmd,sqltxt);
  if tntmntmTail.Checked = True then
  begin
    tntmntmList.Click;
    tntmntmTail.Click;
  end
  else if tntmntmList.Checked = True then
  begin
    tntmntmTail.Click;
    tntmntmList.Click;
  end
  else
  begin
    tntmntmList.Click;
    tntmntmdefault.Click;
  end;
end;

{****************************************************************
* 过程名称: tntmntmHideZTClick
* 功能描述: 隐藏版本信息
* 参数说明: Sender: TObject
* 返 回 值: 无
* 历史记录: 2013.2.21 created by xzj
****************************************************************}
procedure TFormUse.tntmntmHideVClick(Sender: TObject);
var sqltxt : string;
begin
  if tntmntmHideV.Checked = True then
  begin
    tntmntmHideV.Checked := False;
    imglogo.Visible := True;
    grp1.Visible := True;
    sqltxt := 'update PRO_SET set SHOW_LOGO = True where ID = 1 ';
  end
  else
  begin
    tntmntmHideV.Checked := True;
    imglogo.Visible := False;
    grp1.Visible := False;
    sqltxt := 'update PRO_SET set SHOW_LOGO = False where ID = 1 ';
  end;
  Execqry(qryCmd,sqltxt);
  if tntmntmTail.Checked = True then
  begin
    tntmntmList.Click;
    tntmntmTail.Click;
  end
  else if tntmntmList.Checked = True then
  begin
    tntmntmTail.Click;
    tntmntmList.Click;
  end
  else
  begin
    tntmntmList.Click;
    tntmntmdefault.Click;
  end;
end;

{****************************************************************
* 过程名称: AddInitForm
* 功能描述: 版本信息、分组、状态栏的隐藏状况初始化
* 参数说明: 无
* 返 回 值: 无
* 历史记录: 2013.2.21 created by xzj
****************************************************************}
procedure TFormUse.AddInitForm();
begin
  if(qryInit.FieldByName('SHOW_TYPE').AsString = 'True') then
  begin
    tntscrlbxType.Visible := True;
    tntmntmhide.Checked := False;
  end
  else
  begin
    tntscrlbxType.Visible := False;
    tntmntmhide.Checked := True;
  end;

  if(qryInit.FieldByName('SHOW_TOOL').AsString = 'True') then
  begin
    tntcntrlbr1.Visible := True;
    tntmntmHideZT.Checked := False;
  end
  else
  begin
    tntcntrlbr1.Visible := False;
    tntmntmHideZT.Checked := True;
  end;

  if(qryInit.FieldByName('SHOW_LOGO').AsString = 'True') then
  begin
    imglogo.Visible := True;
    tntmntmHideV.Checked := False;
    grp1.Visible := True;
  end
  else
  begin
    imglogo.Visible := False;
    tntmntmHideV.Checked := True;
    grp1.Visible := False;
  end;

  //初始化窗体透明度
  self.AlphaBlendValue := qryInit.fieldbyname('FORM_ABV').AsInteger;
  rztrckbr1.Position := qryInit.fieldbyname('FORM_ABV').AsInteger;

  //初始化快捷方式的字体
  lvPro.Font.Charset := qryInit.fieldbyname('LV_FONT_CHARSET').AsInteger;
  lvPro.Font.Color := StringToColor(qryInit.fieldbyname('LV_FONT_COLOR').AsString);
  lvPro.Font.Name := qryInit.fieldbyname('LV_FONT_NAME').AsString;
  lvPro.Font.Size := qryInit.fieldbyname('LV_FONT_SIZE').AsInteger;
  lvPro.Font.Style := [];
  if qryInit.FieldByName('LV_FSB').AsBoolean = True then
  begin
    lvPro.Font.Style := lvPro.Font.Style + [fsBold];
  end;
  if qryInit.FieldByName('LV_FSI').AsBoolean = True then
  begin
    lvPro.Font.Style := lvPro.Font.Style + [fsItalic];
  end;
  if qryInit.FieldByName('LV_FSU').AsBoolean = True then
  begin
    lvPro.Font.Style := lvPro.Font.Style + [fsUnderline];
  end;
  btn2.Text := qryInit.fieldbyname('LV_FONT_NAME').AsString + ','
             + qryInit.fieldbyname('LV_FONT_SIZE').AsString + ','
             + qryInit.fieldbyname('LV_FONT_COLOR').AsString;
end;

{****************************************************************
* 过程名称: rztrckbr1Change
* 功能描述: 设置窗体透明度
* 参数说明: Sender
* 返 回 值: 无
* 历史记录: 2013.2.21 created by xzj
****************************************************************}
procedure TFormUse.rztrckbr1Change(Sender: TObject);
var sqltxt : string;
begin
  sqltxt := 'update PRO_SET set FORM_ABV = ' + IntToStr(rztrckbr1.Position);
  self.AlphaBlendValue := rztrckbr1.Position;
  Execqry(qryCmd,sqltxt);
end;

{****************************************************************
* 过程名称: FormMouseMove
* 功能描述: 窗体拖动
* 参数说明: Sender: TObject; Shift: TShiftState; X,Y: Integer
* 返 回 值: 无
* 历史记录: 2013.2.21 created by xzj
****************************************************************}
procedure TFormUse.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if (ssleft in Shift) then
  begin
    ReleaseCapture;
    Perform(WM_syscommand, $F012, 0);
  end;
end;

{****************************************************************
* 过程名称: imglogoMouseMove
* 功能描述: 窗体拖动
* 参数说明: Sender: TObject; Shift: TShiftState; X,Y: Integer
* 返 回 值: 无
* 历史记录: 2013.2.21 created by xzj
****************************************************************}
procedure TFormUse.imglogoMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  FormMouseMove(Sender,Shift,X,Y);
end;

{****************************************************************
* 过程名称: tntpnl1MouseMove
* 功能描述: 窗体拖动
* 参数说明: Sender: TObject; Shift: TShiftState; X,Y: Integer
* 返 回 值: 无
* 历史记录: 2013.2.21 created by xzj
****************************************************************}
procedure TFormUse.tntpnl1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  FormMouseMove(Sender,Shift,X,Y);
end;

{****************************************************************
* 过程名称: grp2MouseMove
* 功能描述: 窗体拖动
* 参数说明: Sender: TObject; Shift: TShiftState; X,Y: Integer
* 返 回 值: 无
* 历史记录: 2013.2.21 created by xzj
****************************************************************}
procedure TFormUse.grp2MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  FormMouseMove(Sender,Shift,X,Y);
end;

{****************************************************************
* 过程名称: tntpgcntrl2Change
* 功能描述: 设置项置中
* 参数说明: Sender
* 返 回 值: 无
* 历史记录: 2013.2.21 created by xzj
****************************************************************}
procedure TFormUse.tntpgcntrl2Change(Sender: TObject);
begin
  if tntpgcntrl2.ActivePage = pg5 then
  begin
    grp2.Top := tntpnl1.Top + (tntpnl1.Height - grp2.Height) div 2;
    grp2.Left := tntpnl1.Left + (tntpnl1.Width - grp2.Width) div 2;
  end;
end;

{****************************************************************
* 过程名称: btn2ButtonClick
* 功能描述: 设置快捷方式的字体
* 参数说明: Sender
* 返 回 值: 无
* 历史记录: 2013.2.24 created by xzj
****************************************************************}
procedure TFormUse.btn2ButtonClick(Sender: TObject);
var sqltxt : string;
begin
  isEditing := True;
  //self.Left := (screen.Width - Self.Width) div 2;
  with dlgFont1 do
  begin
    Font := lvPro.Font;
    if Execute then
      lvPro.Font := Font;
  end;
  isEditing := False;
  btn2.Text := lvPro.Font.Name + ',' + IntToStr(lvPro.Font.Size) + ',' + ColorToString(lvPro.Font.Color);
  sqltxt := 'update PRO_SET set LV_FONT_CHARSET = ' + IntToStr(lvPro.Font.charset) + ', '
          + 'LV_FONT_COLOR = ''' + colortostring(lvPro.Font.Color) + ''', '
          + 'LV_FONT_NAME = ''' + lvpro.font.name + ''', '
          + 'LV_FONT_SIZE = ' + IntToStr(lvPro.Font.size) + ' ';
  if lvPro.Font.Style = [] then
  begin
     sqltxt := sqltxt + ', LV_FSB = False, LV_FSI = False, LV_FSU = False ';
  end
  else if lvPro.Font.Style = [fsBold] then
  begin
    sqltxt := sqltxt + ', LV_FSB = True, LV_FSI = False, LV_FSU = False ';
  end
  else if lvPro.Font.Style = [fsItalic] then
  begin
    sqltxt := sqltxt + ', LV_FSB = False, LV_FSI = True, LV_FSU = False ';
  end
  else if lvPro.Font.Style = [fsUnderline] then
  begin
    sqltxt := sqltxt + ', LV_FSB = False, LV_FSI = False, LV_FSU = True ';
  end
  else if lvPro.Font.Style = [fsBold] + [fsItalic] then
  begin
    sqltxt := sqltxt + ', LV_FSB = True, LV_FSI = True, LV_FSU = False ';
  end
  else if lvPro.Font.Style = [fsBold] + [fsUnderline] then
  begin
    sqltxt := sqltxt + ', LV_FSB = True, LV_FSI = False, LV_FSU = True ';
  end
  else if lvPro.Font.Style = [fsItalic] + [fsUnderline] then
  begin
    sqltxt := sqltxt + ', LV_FSB = False, LV_FSI = True, LV_FSU = True ';
  end
  else
  begin
    sqltxt := sqltxt + ', LV_FSB = True, LV_FSI = True, LV_FSU = True ';
  end;
  Execqry(qryCmd,sqltxt);
end;

end.

效果:


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

[Delphi]显示、隐藏桌面图标

一般在XP下可以这样,先获取桌面窗口句柄,然后隐藏或显示 var h: HWND; begin h := FindWindow('Progman', nil); //Progman 是...
  • 36
  • 36
  • 2012年07月24日 14:49
  • 1585

如何锁定屏幕?

在WindowsXP时工作时,我们经常要锁定计算机,当计算机被锁定后,只有重新登录才能够使用计算机,从而保证了计算机的安全。 但是,一般情况下我们需要锁定计算机操作时,都是按下CTRL+ALT+DEL...

VC 刷新桌面图标和任务栏图标

刷新任务栏图标: [cpp] view plain copy SHChangeNotify(SHCNE_ASSOCCHANGED ,SHCNF_IDLIST ,NULL, NU...

CreateProcess时不显示或者不创建窗口 (或用虚拟桌面实现后台调用外部程序)

最近接触一个项目,vc中主窗口调用某个存在的EXE可执行文件在DOS(或者后台)执行,但是不想让用户看到这个执行文件,也就是不显示或者不创建窗口。从网上搜了很多总结了三种方法,希望对大家有用: 网上...

一个虚拟桌面程序的实现

        前几天为朋友写了一个小工具,主要是为了做到一键隐藏大智慧炒股软件,第一个版本是利用窗口查找,然后向窗口发送WM_SHOW消息完成的。实现原理虽然简单,但是不具备通用性,按我最初的设想要...

Delphi实现非模态主窗口最小化子窗口不最小化

重载窗口CreateParams过程 TForm2= class(TForm) protected   procedure CreateParams(var Params: TCreatePar...
  • aroc_lo
  • aroc_lo
  • 2013年04月11日 15:17
  • 831

【MoreWindows工作笔记4】 获取文件图标,类型名称,属性 SHGetFileInfo

SHGetFileInfo是一个相当实用的Windows API函数。在Windows资源管理器中就要使用它。如图中的第3列显示的就是文件的类型名称: 下面来看看这个函数的详细用法:...

VC++创建一个自定义桌面图标

学习xbmoxia的文章原文地址 http://blog.csdn.net/xbmoxia/article/details/14165221 VS 2010 sp1 环境 1:打开解决方案资源资源...

Android 轻松打造一个APP动态切换桌面图标Launcher

为何八十老太裸死街头丶为何农户家的母猪夜夜惨叫丶为何尼姑家的房门夜夜被敲! 欢迎收看走进安卓之亮闪闪的不归路...

从桌面图标启动一个LauncherMode为标准模式的主activity为什么不会重复创建多个实例

一般我们主activity是能显示在桌面图标上的程序入口,并且默认情况launchMode是standard模式。 一般我们使用startActivity的时候,如果启动目标activity是stan...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:开发一个delphi写的桌面图标管理代码
举报原因:
原因补充:

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