⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 u_frmskill.pas

📁 Delphi技巧大全,学习DELPHI的值得一看的一本图书,快来看哦.
💻 PAS
字号:
unit u_frmSkill;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, ToolWin, ImgList, Menus, ActnList, XPMenu, StdCtrls,
  ExtCtrls, DB, ADODB;

type
  PMyNode = ^TMyNode;
  TMyNode = record
    ID,ParentID: Integer;
    Text: String;
    Floder: Boolean;
  end;
  
  TfrmSkill = class(TForm)
    CoolBar1: TCoolBar;
    ToolBar1: TToolBar;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    ToolButton3: TToolButton;
    imgNormal: TImageList;
    ToolButton4: TToolButton;
    ToolButton5: TToolButton;
    ToolButton6: TToolButton;
    ToolButton7: TToolButton;
    ToolButton8: TToolButton;
    ToolButton9: TToolButton;
    StatusBar1: TStatusBar;
    imgHot: TImageList;
    imgDisable: TImageList;
    ToolBar2: TToolBar;
    MainMenu1: TMainMenu;
    F1: TMenuItem;
    E1: TMenuItem;
    H1: TMenuItem;
    F2: TMenuItem;
    N1: TMenuItem;
    N2: TMenuItem;
    ActionList1: TActionList;
    NewFloder: TAction;
    NewSkill: TAction;
    DeleteItem: TAction;
    SaveText: TAction;
    RefreshTree: TAction;
    SearchFor: TAction;
    D1: TMenuItem;
    N3: TMenuItem;
    S1: TMenuItem;
    N4: TMenuItem;
    R1: TMenuItem;
    E2: TMenuItem;
    N5: TMenuItem;
    X1: TMenuItem;
    A1: TMenuItem;
    tvwSkill: TTreeView;
    imgTree: TImageList;
    Splitter1: TSplitter;
    RichEdit1: TRichEdit;
    ADOConnection1: TADOConnection;
    quyTemp: TADOQuery;
    F3: TMenuItem;
    procedure X1Click(Sender: TObject);
    procedure NewFloderExecute(Sender: TObject);
    procedure NewSkillExecute(Sender: TObject);
    procedure DeleteItemExecute(Sender: TObject);
    procedure SaveTextExecute(Sender: TObject);
    procedure RefreshTreeExecute(Sender: TObject);
    procedure SearchForExecute(Sender: TObject);
    procedure tvwSkillExpanded(Sender: TObject; Node: TTreeNode);
    procedure tvwSkillCollapsed(Sender: TObject; Node: TTreeNode);
    procedure tvwSkillChange(Sender: TObject; Node: TTreeNode);
    procedure FormCreate(Sender: TObject);
    procedure tvwSkillEdited(Sender: TObject; Node: TTreeNode;
      var S: String);
  private
    { Private declarations }
    CurNode: TTreeNode;
    procedure LoadDatabase;
    procedure LoadTree;
  public
    { Public declarations }
  end;

var
  frmSkill: TfrmSkill;

implementation

{$R *.dfm}

procedure TfrmSkill.X1Click(Sender: TObject);
begin
  Close;
end;

procedure TfrmSkill.NewFloderExecute(Sender: TObject);
var
  P: PMyNode;
  tmpNode: TTreeNode;
begin
  //新建文件夹
  if not PMyNode(CurNode.Data).Floder then
    exit;       //文章下不能再建文件夹

  new(P);
  P.ParentID:= PMyNode(CurNode.Data).ID;
  P.Floder:= True;

  //先新增一个记录,以获得ID
  with quyTemp do
  begin
    Close;
    SQL.Text:= 'Insert Into SkillBook (父编号, 文件夹) values ('
        + IntToStr(P.ParentID) + ',1)';
    ExecSQL;
    //找出刚新增的记录
    Close;
    SQL.Text:='select * from SkillBook order by 建立日期 desc';
    Open;

    P.ID:= FieldByName('编号').AsInteger;
  end;

  tmpNode:= tvwSkill.Items.AddChild(CurNode, '新项目');
  tmpNode.ImageIndex:= 0;
  tmpNode.Data:= P;
  tmpNode.Expanded:= True;
  tmpNode.Selected:= True;
  tmpNode.EditText;
end;

procedure TfrmSkill.NewSkillExecute(Sender: TObject);
var
  P: PMyNode;
  tmpNode: TTreeNode;
begin
  //新建文章
  if not PMyNode(CurNode.Data).Floder then
    exit;      //文章下不能再建文章

  new(P);
  P.ParentID:= PMyNode(CurNode.Data).ID;
  P.Floder:= False;     //类别为文章

  //先新增一个记录,以获得ID
  with quyTemp do
  begin
    Close;
    SQL.Text:= 'Insert Into SkillBook (父编号, 文件夹) values ('
        + IntToStr(P.ParentID) + ',0)';
    ExecSQL;
    //找出刚新增的记录
    Close;
    SQL.Text:='select * from SkillBook order by 建立日期 desc';
    Open;

    P.ID:= FieldByName('编号').AsInteger;
  end;

  tmpNode:= tvwSkill.Items.AddChild(CurNode, '新项目');
  tmpNode.ImageIndex:= 2;
  tmpNode.Data:= P;
  tmpNode.Expanded:= True;
  tmpNode.Selected:= True;
  tmpNode.EditText;
end;

procedure TfrmSkill.DeleteItemExecute(Sender: TObject);
begin
  if CurNode = nil then
  begin
    ShowMessage('请先选择要删除的文件夹!');
    exit;
  end;

  if CurNode.Count > 0 then
  begin
    ShowMessage('不能删除非空文件夹!');
    exit;       //不能删除非空文件夹!
  end;

  if MessageBox(Handle, PChar('是否真的要删除这个项目?'),
        PChar('删除确认'),MB_ICONQUESTION + MB_YESNO) = IDNO then
    exit;

  try
    with quyTemp do
    begin
      Close;
      SQL.Text:= 'Delete from SkillBook where 编号='
          + IntToStr(PMyNode(CurNode.Data).ID);
      ExecSQL;

      CurNode.Delete;
    end;
  except
    on e:Exception do
      ShowMessage(e.Message);
  end;
end;

procedure TfrmSkill.SaveTextExecute(Sender: TObject);
begin
  if CurNode.Data = nil then
    exit;

  with quyTemp do
  begin
    Close;
    SQL.Text:= 'update SkillBook set 内容=''' + RichEdit1.Text
        + ''' where 编号 = ' + IntToStr(PMyNode(CurNode.Data).ID);
    //showmessage(sql.text);
    ExecSQL;
  end;
end;

procedure TfrmSkill.RefreshTreeExecute(Sender: TObject);
begin
  tvwSkill.Items.Clear;
  LoadTree;
end;

procedure TfrmSkill.SearchForExecute(Sender: TObject);
begin
  //
end;

procedure TfrmSkill.tvwSkillExpanded(Sender: TObject; Node: TTreeNode);
begin
  if Node.ImageIndex= 2 then
    exit;
  Node.ImageIndex:= 1;
  Node.SelectedIndex:= 1;
end;

procedure TfrmSkill.tvwSkillCollapsed(Sender: TObject; Node: TTreeNode);
begin
  if Node.ImageIndex= 2 then
    exit;
  Node.ImageIndex:= 0;
  Node.SelectedIndex:= 0;
end;

procedure TfrmSkill.tvwSkillChange(Sender: TObject; Node: TTreeNode);
begin
  CurNode:= Node;
  Node.SelectedIndex:= Node.ImageIndex;

  if CurNode.Data = nil then
    exit;

  with quyTemp do
  begin
    Close;
    SQL.Text:= 'select * from SkillBook where 编号 = '
        + IntToStr(PMyNode(CurNode.Data).ID);
    Open;
    if IsEmpty then
      RichEdit1.Text:= ''
    else
      RichEdit1.Text:= FieldByName('内容').AsString;
  end;
end;

procedure TfrmSkill.LoadTree;
var
  i, j: integer;
  ParentNode, tmpNode: TTreeNode;
  P: PMyNode;
begin
  with quyTemp do
  begin
    Close;
    SQL.Text:= 'select * from SkillBook order by 父编号,编号';
    Open;

    for i:= 0 to RecordCount - 1 do
    begin
      new(P);
      P.ID:= FieldByName('编号').AsInteger;
      P.ParentID:= FieldByName('父编号').AsInteger;
      P.Text:= FieldByName('标题').AsString;
      P.Floder:= FieldByName('文件夹').AsBoolean;
      
      ParentNode:= nil;
      for j:= 0 to tvwSkill.Items.Count - 1 do
      begin
        if PMyNode(tvwSkill.Items[j].Data).ID = P.ParentID then
        begin
          ParentNode:= tvwSkill.Items[j];
        end;
      end;

      tmpNode:= tvwSkill.Items.AddChild(ParentNode, P.Text);
      tmpNode.Data:= P;
      if P.Floder then
        tmpNode.ImageIndex:= 1
      else
        tmpNode.ImageIndex:= 2;

      Next;
    end;
  end;
end;

procedure TfrmSkill.LoadDatabase;
var
  S: String;
begin
  try
    S:= 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='
        + GetCurrentDir + '\DelphiSkill.mdb;Persist Security Info=False';
    with ADOConnection1 do
    begin
      Close;
      ConnectionString:= S;
      Open;
    end;
  except
    on e:Exception do
    begin
      ShowMessage(e.Message);
      Close;
    end;
  end;
end;

procedure TfrmSkill.FormCreate(Sender: TObject);
begin
  LoadDatabase;
  LoadTree;
end;

procedure TfrmSkill.tvwSkillEdited(Sender: TObject; Node: TTreeNode;
  var S: String);
begin
  if Node.Data <> nil then
  begin
    if S = '' then
      S:= '新项目';
      
    with quyTemp do
    begin
      Close;
      SQL.Text:= 'update SkillBook set 标题=''' + S + ''' where 编号 = '
        + IntToStr(PMyNode(Node.Data).ID);
      ExecSQL;
    end;
    PMyNode(Node.Data).Text:= S;
  end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -