📄 mainfrm.pas
字号:
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 + -