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

📄 mainfrm.pas

📁 delphi本地数据库引擎
💻 PAS
📖 第 1 页 / 共 3 页
字号:
begin
  TableComboBox.Items.Clear;
  for I := 0 to TinyDatabase.TableDefs.Count - 1 do
    TableComboBox.Items.Add(TinyDatabase.TableDefs[I].Name);
  TableComboBox.ItemIndex := -1;
end;

procedure TMainForm.InitLanguageMenu;
var
  LangName: string;
  I: Integer;
  MenuItem: TMenuItem;
begin
  for I := 0 to AppLangMgr.Count - 1 do
  begin
    MenuItem := TMenuItem.Create(Self);
    ViewLanguageItem.Add(MenuItem);
    LangName := AppLangMgr.Items[I].LangName;
    MenuItem.Caption := LangName;
    MenuItem.Hint := LangName;
    MenuItem.GroupIndex := 1;
    MenuItem.RadioItem := True;
    MenuItem.Tag := I;
    MenuItem.OnClick := LanguageItemClick;
  end;
  ViewLanguageItem.Enabled := AppLangMgr.Count > 0;
end;

procedure TMainForm.AdjustCaption(DatabaseName: string);
begin
  Caption := 'TinyDB Desktop';
  if DatabaseName <> '' then Caption := Caption + ' (' + DatabaseName + ') ';
end;

procedure TMainForm.SetOpenTableMode(Mode: TOpenTableMode);
begin
  FOpenTableMode := Mode;
  if Mode = otGrid then
  begin
    ViewOpenTableGridAction.Checked := True;
    ViewOpenTableCardAction.Checked := False;
  end else
  begin
    ViewOpenTableGridAction.Checked := False;
    ViewOpenTableCardAction.Checked := True;
  end;
end;

procedure TMainForm.DoParam;
begin
  if ParamCount >=1 then
    OpenDatabase(ParamStr(1));
end;

procedure TMainForm.DoFileDropMessage(var Msg: tagMSG; var Handled: Boolean);
const
  BufferLength = MAX_PATH;
var
  DroppedFilename: string;
  FileIndex: UINT;
  QtyDroppedFiles: Word;
  FileNameBuffer: array[0..BufferLength] of Char;
begin
  case Msg.Message of
    WM_DROPFILES:
      begin
        FileIndex := $FFFFFFFF;
        QtyDroppedFiles := DragQueryFile(Msg.WParam, FileIndex,
                                         FileNameBuffer, BufferLength);
        for FileIndex := 0 to (QtyDroppedFiles - 1) do
        begin
          DragQueryFile(Msg.WParam, FileIndex, FileNameBuffer, BufferLength);
          DroppedFilename := StrPas(FileNameBuffer);
          try
            OpenDatabase(DroppedFilename);
          except
            on E: Exception do Application.ShowException(E);
          end;
          Break;  //only open one database file
        end;
        DragFinish(Msg.WParam);
        Handled := True;
      end;
  end;
end;

procedure TMainForm.CheckLanguageMenu(Index: Integer);
begin
  if (Index >= 0) and (Index < ViewLanguageItem.Count) then
    ViewLanguageItem.Items[Index].Checked := True;
end;

procedure TMainForm.LanguageItemClick(Sender: TObject);
var
  MenuItem: TMenuItem;
  Index: Integer;
  I: Integer;
begin
  MenuItem := Sender as TMenuItem;
  Index := MenuItem.Tag;
  AppLangMgr.InitLang(Index);
  for I := 0 to Screen.FormCount - 1 do
  begin
    if Screen.Forms[I] is TBaseForm then
      (Screen.Forms[I] as TBaseForm).TransLanguage;
  end;
  CheckLanguageMenu(AppLangMgr.CurrentLangIndex);
  Options.LanguageName := AppLangMgr.Items[AppLangMgr.CurrentLangIndex].LangName;
  SaveOptions;
end;

procedure TMainForm.ShowDockPanel(APanel: TPanel; MakeVisible: Boolean; Client: TControl);
begin
  if not MakeVisible and (APanel.VisibleDockClientCount > 1) then
    Exit;

  if APanel = LeftDockPanel then
    SplitterPanel.Visible := MakeVisible;

  if MakeVisible then
  begin
    if APanel = LeftDockPanel then
    begin
      APanel.Width := ClientWidth div 4;
      SplitterPanel.Left := APanel.Width + SplitterPanel.Width;
    end
  end else
  begin
    if APanel = LeftDockPanel then
      APanel.Width := 0;
  end;
  if MakeVisible and (Client <> nil) then
  begin
    Client.Show;
  end;
end;

function TMainForm.GetFieldStrByType(FieldType: TFieldType): string;
var
  I: Integer;
begin
  I := FFieldList.IndexOfObject(TObject(FieldType));
  if I = -1 then Result := ''
  else Result := FFieldList.Names[I];
end;

function TMainForm.GetFieldCommentsByType(FieldType: TFieldType): string;
var
  I: Integer;
begin
  I := FFieldList.IndexOfObject(TObject(FieldType));
  if I = -1 then Result := ''
  else Result := FFieldList.Values[FFieldList.Names[I]];
end;

procedure TMainForm.AdjustUI(Opened: Boolean);
begin
  if Opened then AdjustCaption(TinyDatabase.FileName)
  else AdjustCaption('');
  FileCloseDBAction.Enabled := Opened;
  FileExportItem.Enabled := Opened;
  ViewRefreshAction.Enabled := Opened;
  ToolCompactAction.Enabled := Opened;
  ToolRepairAction.Enabled := Opened;
  ToolChgPwdAction.Enabled := Opened;
  ToolChgEncAction.Enabled := Opened;
  DatabaseMenu.Visible := Opened;
  DBOpenTableAction.Enabled := Opened;
  DBNewTableAction.Enabled := Opened;
  DBDeleteTableAction.Enabled := Opened;
  DBRenameTableAction.Enabled := Opened;
  DBEmptyTableAction.Enabled := Opened;
  DBDeleteIndexAction.Enabled := Opened;
  DBRenameFieldAction.Enabled := Opened;
  DBCommentsAction.Enabled := Opened;
  DBPropertyAction.Enabled := Opened;
  ViewOpenTableModeItem.Enabled := Opened;
  ViewOpenTableGridAction.Enabled := Opened;
  ViewOpenTableCardAction.Enabled := Opened;
  TableComboBox.Enabled := Opened;
  TableComboBox.Color := Iif(Opened, clWindow, $00DCDCDC);
  if not Opened then TableComboBox.Text := '';
end;

procedure TMainForm.OpenDatabase(DatabaseName: string);
var
  Count: Integer;
  Password: string;
begin
  TinyDatabase.Close;
  TinyDatabase.FileName := DatabaseName;
  TinyDatabase.Open;
  Count := 1;
  while not TinyDatabase.CanAccess and (Count <= 3) do
  begin
    if ShowInputForm(Password, AppLangMgr.Trans('Database password'), True) then
    begin
      FPassword := Password;
      TinyDatabase.Password := FPassword;
      if not TinyDatabase.CanAccess then
      begin
        Application.MessageBox(PChar(AppLangMgr.Trans('Password is incorrect. you can not open the database.')), PChar(Application.Title), 48);
        Inc(Count);
      end;
    end else
    begin
      TinyDatabase.Close;
      TinyDatabase.FileName := '';
      Break;
    end;
  end;
  if (TinyDatabase.FileName <> '') and (TinyDatabase.CanAccess) then
  begin
    ShowDBInfoForm(TinyDatabase);
    AdjustUI(True);
    MRUManager.AddMRU(TinyDatabase.FileName);
    InitMRUMenuItem;
    InitTableComboxBox;
  end;
end;

procedure TMainForm.BeginProgress;
begin
  ProgressPanel.Visible := True;
  ProgressBar.Position := 0;
end;

procedure TMainForm.EndProgress;
begin
  ProgressPanel.Visible := False;
end;

procedure TMainForm.DoProgress(Percent: Integer);
begin
  ProgressBar.Position := Percent;
end;

procedure TMainForm.FileNewDBActionExecute(Sender: TObject);
var
  Value: TNewDBFormData;
begin
  if ShowNewDBForm(Value) then
  begin
    TinyDatabase.Close;
    if TinyDatabase.CreateDatabase(Value.FileName, Value.Compress, TCompressLevel(Value.CompLevel), Value.CompAlgo, Value.Encrypt, Value.EncAlgo, Value.Password, True) then
    begin
      TinyDatabase.FileName := Value.FileName;
      TinyDatabase.Password := Value.Password;
      TinyDatabase.Open;
      FPassword := Value.Password;
      AdjustUI(True);
      ShowDBInfoForm(TinyDatabase);
      DBInfoForm.InvokeNewTableForm;
      MRUManager.AddMRU(TinyDatabase.FileName);
      InitMRUMenuItem;
      InitTableComboxBox;
    end else
    begin
      TinyDatabase.FileName := '';
      Application.MessageBox(PChar(AppLangMgr.Trans('Fail to create database.')), PChar(Application.Title), 16);
    end;
  end;
end;

procedure TMainForm.FileOpenDBActionExecute(Sender: TObject);
begin
  if OpenDialog.Execute then
    OpenDatabase(OpenDialog.FileName);
end;

procedure TMainForm.FileCloseDBActionExecute(Sender: TObject);
begin
  if DBInfoForm <> nil then
  begin
    DBInfoForm.Close;
    AdjustUI(False);
  end;
end;

procedure TMainForm.FileExportTextActionExecute(Sender: TObject);
var
  SaveDialog: TSaveDialog;
begin
  SaveDialog := TSaveDialog.Create(Self);
  try
    SaveDialog.Options := SaveDialog.Options + [ofOverwritePrompt];
    SaveDialog.Filter := 'Text Files(*.txt)|*.txt|All Files(*.*)|*.*';
    SaveDialog.DefaultExt := '.txt';
    if SaveDialog.Execute then
    begin
      DBInfoForm.ExportDBToText(SaveDialog.FileName);
      Application.MessageBox(PChar(AppLangMgr.Trans('Exporting finished.')), PChar(Application.Title), 48);
    end;
  finally
    SaveDialog.Free;
  end;
end;

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

procedure TMainForm.HelpContentActionExecute(Sender: TObject);
begin
  ShowHelp;
end;

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

procedure TMainForm.HelpAdviseActionExecute(Sender: TObject);
var
  S: string;
begin
  S := 'About TinyDB ' + STDBVersion;
  ShellExecute(Handle, 'Open', PChar('mailto:haoxg@21cn.com?subject="' + S + '"'), '', '', 1);
end;

procedure TMainForm.HelpBugReportActionExecute(Sender: TObject);
var
  S: string;
begin
  S := 'TinyDB ' + STDBVersion + ' Bug Report';
  ShellExecute(Handle, 'Open', PChar('mailto:haoxg@21cn.com?subject="' + S + '"'), '', '', 1);
end;

procedure TMainForm.HelpHomepageActionExecute(Sender: TObject);
begin
  ShellExecute(Handle, 'Open', 'http://www.TinyDatabase.com', '', '', 1);
end;

procedure TMainForm.LeftDockPanelDockDrop(Sender: TObject;
  Source: TDragDockObject; X, Y: Integer);
begin
  if (Sender as TPanel).DockClientCount = 1 then
    ShowDockPanel(Sender as TPanel, True, nil);
  (Sender as TPanel).DockManager.ResetBounds(True);
end;

procedure TMainForm.LeftDockPanelDockOver(Sender: TObject;
  Source: TDragDockObject; X, Y: Integer; State: TDragState;
  var Accept: Boolean);
var
  ARect: TRect;
begin
  Accept := Source.Control is TDBInfoForm;
  if Accept then
  begin
    ARect.TopLeft := LeftDockPanel.ClientToScreen(Point(0, 0));
    ARect.BottomRight := LeftDockPanel.ClientToScreen(

⌨️ 快捷键说明

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