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

📄 mainfrm.pas

📁 优秀的本地存储数据库
💻 PAS
📖 第 1 页 / 共 2 页
字号:
    Constellation := CardTinyTable.FieldByName('Constellation').AsInteger;
    BloodType := CardTinyTable.FieldByName('BloodType').AsInteger;
    Taste := CardTinyTable.FieldByName('Taste').AsString;
    Homepage := CardTinyTable.FieldByName('Homepage').AsString;
    HomeZip := CardTinyTable.FieldByName('HomeZip').AsString;
    HomeAddr := CardTinyTable.FieldByName('HomeAddr').AsString;
    HomeTel1 := CardTinyTable.FieldByName('HomeTel1').AsString;
    HomeTel2 := CardTinyTable.FieldByName('HomeTel2').AsString;
    HomeFax := CardTinyTable.FieldByName('HomeFax').AsString;
    CorpZip := CardTinyTable.FieldByName('CorpZip').AsString;
    CorpAddr := CardTinyTable.FieldByName('CorpAddr').AsString;
    CorpJob := CardTinyTable.FieldByName('CorpJob').AsString;
    CorpDept := CardTinyTable.FieldByName('CorpDept').AsString;
    CorpTel1 := CardTinyTable.FieldByName('CorpTel1').AsString;
    CorpTel2 := CardTinyTable.FieldByName('CorpTel2').AsString;
    CorpFax := CardTinyTable.FieldByName('CorpFax').AsString;
    CorpHomepage := CardTinyTable.FieldByName('CorpHomepage').AsString;
    ExtMemo := CardTinyTable.FieldByName('ExtMemo').AsString;
  end;
end;

procedure TMainForm.SaveCardData(CardData: TCardFormData);
begin
  with CardData do
  begin
    CardTinyTable.FieldByName('Name').AsString := Name;
    CardTinyTable.FieldByName('Nickname').AsString := Nickname;
    CardTinyTable.FieldByName('Emails').AsString := Emails;
    CardTinyTable.FieldByName('HandTel').AsString := HandTel;
    CardTinyTable.FieldByName('BP').AsString := BP;
    CardTinyTable.FieldByName('Oicq').AsString := Oicq;
    CardTinyTable.FieldByName('Icq').AsString := Icq;
    CardTinyTable.FieldByName('Sex').AsInteger := Sex;
    CardTinyTable.FieldByName('Birthday').AsDateTime := Birthday;
    CardTinyTable.FieldByName('UseBirth').AsBoolean := UseBirth;
    CardTinyTable.FieldByName('Constellation').AsInteger := Constellation;
    CardTinyTable.FieldByName('BloodType').AsInteger := BloodType;
    CardTinyTable.FieldByName('Taste').AsString := Taste;
    CardTinyTable.FieldByName('Homepage').AsString := Homepage;
    CardTinyTable.FieldByName('HomeZip').AsString := HomeZip;
    CardTinyTable.FieldByName('HomeAddr').AsString := HomeAddr;
    CardTinyTable.FieldByName('HomeTel1').AsString := HomeTel1;
    CardTinyTable.FieldByName('HomeTel2').AsString := HomeTel2;
    CardTinyTable.FieldByName('HomeFax').AsString := HomeFax;
    CardTinyTable.FieldByName('CorpZip').AsString := CorpZip;
    CardTinyTable.FieldByName('CorpAddr').AsString := CorpAddr;
    CardTinyTable.FieldByName('CorpJob').AsString := CorpJob;
    CardTinyTable.FieldByName('CorpDept').AsString := CorpDept;
    CardTinyTable.FieldByName('CorpTel1').AsString := CorpTel1;
    CardTinyTable.FieldByName('CorpTel2').AsString := CorpTel2;
    CardTinyTable.FieldByName('CorpFax').AsString := CorpFax;
    CardTinyTable.FieldByName('CorpHomepage').AsString := CorpHomepage;
    CardTinyTable.FieldByName('ExtMemo').AsString := ExtMemo;
  end;
end;

procedure TMainForm.FormCreate(Sender: TObject);
var
  DBFileName: string;
begin
  DBFileName := GetDBFileName;
  if not FileExists(DBFileName) then
  begin
    if not CreateDatabase then
    begin
      MessageBox(Application.Handle, PChar(SFailToCreateDb), PChar(Application.Title), 16);
      Application.Terminate;
    end;
  end;

  if not OpenDatabase then
  begin
    Application.Terminate;
  end;

  FillFolderTreeView;
  NameSearchEdit.Text := '';
end;

procedure TMainForm.FormDestroy(Sender: TObject);
begin
  CardTinyTable.Close;
  FolderTinyTable.Close;
end;

procedure TMainForm.NewCardActionExecute(Sender: TObject);
var
  CardData: TCardFormData;
  FolderID: Integer;
begin
  if TreeView.Selected = nil then
    TreeView.Items[1].Selected := True;
  if TreeView.Selected.AbsoluteIndex = 0 then
    TreeView.Items[1].Selected := True;

  FolderID := Integer(TreeView.Selected.Data);
  if FolderID < 1 then FolderID := 1;

  CardData.UseBirth := False;
  if ShowCardForm(CardData) then
  begin
    CardTinyTable.Filtered := False;
    CardTinyTable.Append;
    CardTinyTable.FieldByName('FolderID').AsInteger := FolderID;
    SaveCardData(CardData);
    CardTinyTable.Post;

    FillListView(FolderID);
  end;
end;

procedure TMainForm.NewFolderActionExecute(Sender: TObject);
var
  ParentID: Integer;
  FolderName: string;
  TreeNode: TTreeNode;
begin
  if TreeView.Selected = nil then Exit;
  ParentID := Integer(TreeView.Selected.Data);

  if ShowInputForm(FolderName, SNewFolder, SFolderName) then
  begin
    FolderTinyTable.Filtered := False;
    FolderTinyTable.Append;
    FolderTinyTable.FieldByName('ParentID').AsInteger := ParentID;
    FolderTinyTable.FieldByName('Name').AsString := FolderName;
    FolderTinyTable.Post;

    TreeNode := TreeView.Items.AddChild(TreeView.Selected, FolderName);
    TreeNode.Data := Pointer(FolderTinyTable.FieldByName('ID').AsInteger);
    TreeNode.ImageIndex := 1;
    TreeNode.SelectedIndex := 1;
    TreeNode.MakeVisible;
    TreeNode.Selected := True;
  end;
end;

procedure TMainForm.PropertyActionExecute(Sender: TObject);
var
  ListItem: TListItem;
  CardID: Integer;
  CardData: TCardFormData;
begin
  if ListView.Selected = nil then Exit;
  ListItem := ListView.Selected;

  CardID := Integer(ListItem.Data);
  CardTinyTable.Filtered := False;
  CardTinyTable.IndexName := '';
  if CardTinyTable.FindKey([CardID]) then
  begin
    LoadCardData(CardData);
    if ShowCardForm(CardData) then
    begin
      CardTinyTable.Edit;
      SaveCardData(CardData);
      CardTinyTable.Post;
      UpdateListItem(ListItem, CardData);
    end;
  end;
end;

procedure TMainForm.DeleteCardActionExecute(Sender: TObject);
var
  CardID: Integer;
  R: Integer;
begin
  if ListView.Selected = nil then Exit;
  R := MessageBox(Application.Handle, PChar(SQueryDeleteCard), PChar(Application.Title), 36);
  if R = ID_NO then Exit;

  CardID := Integer(ListView.Selected.Data);
  CardTinyTable.Filtered := False;
  CardTinyTable.IndexName := '';
  if CardTinyTable.FindKey([CardID]) then
  begin
    CardTinyTable.Delete;
    ListView.Selected.Delete;
  end;
end;

procedure TMainForm.EncryptActionExecute(Sender: TObject);
var
  Data: TChgPwdFormData;
begin
  Data.CheckPwd := TinyDatabase.Encrypted;
  if ShowChgPwdForm(Data) then
  begin
    if TinyDatabase.ChangePassword(Data.Password, Data.CheckPwd) then
    begin
      MessageBox(Handle, PChar(SChgPwdSucc), PChar(Application.Title), 48)
    end else
      MessageBox(Handle, PChar(SChgPwdFail), PChar(Application.Title), 48);
  end;
end;

procedure TMainForm.FileExitItemClick(Sender: TObject);
begin
  Close;
end;

procedure TMainForm.ViewToolBarItemClick(Sender: TObject);
begin
  ViewToolBarItem.Checked := not ViewToolBarItem.Checked;
  ToolBar.Visible := ViewToolBarItem.Checked;
end;

procedure TMainForm.ViewStatusBarItemClick(Sender: TObject);
begin
  ViewStatusBarItem.Checked := not ViewStatusBarItem.Checked;
  StatusBar.Visible := ViewStatusBarItem.Checked;
end;

procedure TMainForm.ViewLargeIconItemClick(Sender: TObject);
begin
  (Sender as TMenuItem).Checked := True;
  ListView.ViewStyle := TViewStyle((Sender as TMenuItem).Tag);
end;

procedure TMainForm.ViewRefreshItemClick(Sender: TObject);
begin
  if TreeView.Selected = nil then Exit;
  FillListView(Integer(TreeView.Selected.Data));
end;

procedure TMainForm.HelpAboutItemClick(Sender: TObject);
begin
  ShowAboutForm;
end;

{$WRITEABLECONST ON}

procedure TMainForm.TreeViewChange(Sender: TObject; Node: TTreeNode);
const
  OldFolderID: Integer = -1;
var
  FolderID: Integer;
begin
  FolderID := Integer(Node.Data);
  if FolderID = OldFolderID then Exit;
  OldFolderID := FolderID;
  FillListView(FolderID);
end;

procedure TMainForm.TreePopDeleteFolderItemClick(Sender: TObject);
var
  TreeNode: TTreeNode;
  FolderID, R: Integer;
begin
  if TreeView.Selected = nil then Exit;
  TreeNode := TreeView.Selected;
  if TreeNode.AbsoluteIndex in [0,1] then Exit;
  R := MessageBox(Application.Handle, PChar(SQueryDeleteFolder), PChar(Application.Title), 36);
  if R = ID_NO then Exit;

  FolderID := Integer(TreeNode.Data);
  FolderTinyTable.Filtered := False;
  FolderTinyTable.IndexName := '';
  if FolderTinyTable.FindKey([FolderID]) then
  begin
    FolderTinyTable.Delete;

    CardTinyTable.Filtered := False;
    CardTinyTable.IndexName := 'ByFolderID';
    while CardTinyTable.FindKey([FolderID]) do
    begin
      CardTinyTable.Delete;
    end;

    TreeNode.Delete;
  end;
end;

procedure TMainForm.TreeViewEditing(Sender: TObject; Node: TTreeNode;
  var AllowEdit: Boolean);
begin
  if Node.AbsoluteIndex in [0, 1] then AllowEdit := False
  else AllowEdit := True;
end;

procedure TMainForm.TreeViewEdited(Sender: TObject; Node: TTreeNode;
  var S: String);
var
  FolderID: Integer;
begin
  FolderID := Integer(Node.Data);
  FolderTinyTable.Filtered := False;
  FolderTinyTable.IndexName := '';
  if FolderTinyTable.FindKey([FolderID]) then
  begin
    FolderTinyTable.Edit;
    FolderTinyTable.FieldByName('Name').AsString := S;
    FolderTinyTable.Post;

    Node.Text := FolderTinyTable.FieldByName('Name').AsString;
  end;
end;

procedure TMainForm.TreeViewMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  Node: TTreeNode;
  HitTest: THitTests;
begin
  HitTest := TreeView.GetHitTestInfoAt(X, Y);
  if (htOnIcon in HitTest) or (htOnLabel in HitTest)then
  begin
    Node := TreeView.GetNodeAt(X, Y);
    if Node <> nil then Node.Selected := True;
  end;
end;

procedure TMainForm.TreeViewPopupMenuPopup(Sender: TObject);
begin
  TreePopDeleteFolderItem.Enabled := not (TreeView.Selected.AbsoluteIndex in [0,1]);
end;

procedure TMainForm.ListViewPopupMenuPopup(Sender: TObject);
var
  Selected: Boolean;
begin
  Selected := (ListView.Selected <> nil);

  ListPopDeleteCardItem.Enabled := Selected;
  ListPopPropertyItem.Enabled := Selected;
end;

procedure TMainForm.ListViewChange(Sender: TObject; Item: TListItem;
  Change: TItemChange);
begin
  NameSearchEdit.Text := Item.Caption;
end;

procedure TMainForm.NameSearchPanelResize(Sender: TObject);
begin
  NameSearchEdit.Width := NameSearchPanel.ClientWidth;
end;

procedure TMainForm.NameSearchEditKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  I: Integer;
begin
  if Key = VK_RETURN then
  begin
    KillMessage(Handle, WM_CHAR);
    NameSearchEdit.SelectAll;
    for I := 0 to ListView.Items.Count - 1 do
    begin
      if CompareText(ListView.Items[I].Caption, NameSearchEdit.Text) = 0 then
      begin
        ListView.Items[I].MakeVisible(False);
        ListView.Items[I].Selected := True;
        NameSearchEdit.SelectAll;
        Exit;
      end;
    end;
    MessageBeep(0);
  end;
end;

end.

⌨️ 快捷键说明

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