📄 fmain.pas
字号:
Self.Name, 'viewToolbar', True);
StatusBar1.Visible := frmMailbox.Profile.Config.ReadBool(
Self.Name, 'viewStatusbar', True);
actViewToolbar.Checked := tb1.Visible;
actViewStatusbar.Checked := StatusBar1.Visible;
pnlAddressBook.Height := frmMailbox.Profile.Config.ReadInteger(
Self.Name, 'addressBookPanelHeight', Trunc(pnlAddrBookAndMbox.Height * 0.30));
pnlMailList.Height := frmMailbox.Profile.Config.ReadInteger(
Self.Name, 'pnlMailListHeight', Trunc(pnlMails.Height * 0.4));
pnlAddrBookAndMbox.Width :=
frmMailbox.Profile.Config.readInteger(Self.Name, 'pnlAddrBookAndMboxWidth',
Trunc(Self.Width * 0.25));
end;
procedure TfrmMain.dfsSplitter2Moved(Sender: TObject);
begin
frmMailbox.Profile.Config.WriteInteger(Self.Name, 'addressBookPanelHeight',
pnlAddressBook.Height);
end;
procedure TfrmMain.dfsSplitter3Moved(Sender: TObject);
begin
frmMailbox.Profile.Config.WriteInteger(Self.Name, 'pnlMailListHeight',
pnlMailList.Height);
end;
procedure TfrmMain.dfsSplitter1Moved(Sender: TObject);
begin
frmMailbox.Profile.Config.WriteInteger(Self.Name, 'pnlAddrBookAndMboxWidth',
pnlAddrBookAndMbox.Width);
end;
procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
logPop3.Clear;
tray.HideTaskbarIcon;
end;
procedure TfrmMain.actTBMessageReplyExecute(Sender: TObject);
begin
frmMaillist.actMessageReply.Execute;
end;
procedure TfrmMain.actTBMessageReplyUpdate(Sender: TObject);
begin
frmMaillist.actMessageReply.Update;
end;
procedure TfrmMain.actTBMessageForwardExecute(Sender: TObject);
begin
frmMaillist.actMessageForward.Execute;
end;
procedure TfrmMain.actTBMessageForwardUpdate(Sender: TObject);
begin
frmMaillist.actMessageForward.Update;
end;
function TfrmMain.AddLeadingZeroes(Value: Longword; len: Byte): String;
var tmpStr: String;
var i: Integer;
begin
if Length(IntToStr(Value)) >= len then begin Result := IntToStr(Value); exit; end;
for i := 1 to len - Length(IntToStr(Value)) do tmpStr := tmpStr + '0';
Result := tmpStr + IntToStr(Value);
end;
procedure TfrmMain.actTBSendUpdate(Sender: TObject);
begin
actTBSend.Enabled := frmMailbox.actAccountSendThis.Enabled or
frmMailbox.actAccountSendAll.Enabled;
end;
procedure TfrmMain.actTBSendExecute(Sender: TObject);
begin
if frmMailbox.actAccountSendThis.Enabled then
frmMailbox.actAccountSendThis.Execute
else
frmMailbox.actAccountSendAll.Execute;
end;
procedure TfrmMain.SetDefaultProfile(profileName: String);
begin
xmlIni.WriteString('general', 'defaultProfile', profileName);
end;
procedure TfrmMain.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
begin
// + key
if (Msg.CharCode = 107) and (GetFocus = frmMailView.msgImage.Handle) then begin
frmMailView.cmdZoomPlusClick(frmMailView.cmdZoomPlus);
Handled := True;
end // - key
else if (Msg.CharCode = 109) and (GetFocus = frmMailView.msgImage.Handle) then begin
frmMailView.cmdZoomMinusClick(frmMailView.cmdZoomMinus);
Handled := True;
end
else if (Msg.CharCode = 46) then begin //del key
Handled := actDeleteF;
end;
end;
procedure TfrmMain.CenterForm(frm: TForm);
var t, l: Integer;
begin
t := (Screen.Height div 2) - (frm.Height div 2);
l := (Screen.Width div 2) - (frm.Width div 2);
frm.Top := t;
frm.Left := l;
end;
procedure TfrmMain.actToolsAddressBookExecute(Sender: TObject);
begin
frmAddressBook.actOpenAddressBook.Execute;
end;
procedure TfrmMain.actTBAddrBookExecute(Sender: TObject);
begin
frmAddressBook.actOpenAddressBook.Execute;
end;
procedure TfrmMain.actFileImportExecute(Sender: TObject);
begin
frmImportMessagesWizard.ShowModal;
end;
procedure TfrmMain.defaultFolders;
var str: TStringList;
var lnk: TShellLink;
begin
df.Application := ExtractFilePath(Application.ExeName);
findTemporaryFolder;
df.Profiles := df.Application + 'Profiles\';
df.Themes := df.Application + 'Themes\';
df.PlugIns := df.Application + 'Plug-Ins\';
df.piImportMessages := df.PlugIns + 'Import\Messages\';
df.piImportAddressBook := df.PlugIns + 'Import\Address Book\';
df.piExportMessages := df.PlugIns + 'Export\Messages\';
df.piExportAddressBook := df.PlugIns + 'Export\Address Book\';
df.piAttachments := df.PlugIns + 'Attachments\';
//profiles & public address book folder
if not DirectoryExists(df.Profiles + 'Address Book') then
ForceDirectories(df.Profiles + 'Address Book');
//temp folder
if not DirectoryExists(df.Application + 'Temp\') then
ForceDirectories(df.Application + 'Temp\');
//themes folder
if not DirectoryExists(df.Themes) then
ForceDirectories(df.Themes);
//various import plug-Ins folders
if not DirectoryExists(df.piImportMessages) then
ForceDirectories(df.piImportMessages);
if not DirectoryExists(df.piImportAddressBook) then
ForceDirectories(df.piImportAddressBook);
//various export plug-Ins folders
if not DirectoryExists(df.piExportMessages) then
ForceDirectories(df.piExportMessages);
if not DirectoryExists(df.piExportAddressBook) then
ForceDirectories(df.piExportAddressBook);
if not DirectoryExists(df.piAttachments) then
ForceDirectories(df.piAttachments);
//warning file in Profiles folder
if not FileExists(df.Profiles + 'Read Me.txt') then begin
str := TstringList.Create;
str.Text := _('WARNING!!' + #13#10 + #13#10 +
'DO NOT EDIT OR DELETE ANY FILE OR FOLDER HERE!!!' + #13#10 +
'Everything is generated automaticaly.' + #13#10 + #13#10 + 'si.Mail Team');
str.SaveToFile(df.Profiles + 'Read Me.txt');
FreeAndNil(str);
end;
//add link to si.Mail in SendTo folder
if not FileExists(compInfo.Folders.SendTo + 'si.Mail.lnk') then begin
with lnk do begin
WorkingDirectory := df.Application;
IconIndex := 0;
Target := Application.ExeName;
Description := _('si.Mail - an e-mail client.');
IconLocation := Target;
Arguments := '/attach';
end;
ShellLinkCreate(lnk, compInfo.Folders.SendTo + 'si.Mail.lnk');
end;
end;
procedure TfrmMain.FormConstrainedResize(Sender: TObject; var MinWidth,
MinHeight, MaxWidth, MaxHeight: Integer);
begin
MinWidth := 640;
MinHeight := 480;
end;
procedure TfrmMain.WMCopyData(var Message: TWMCopyData);
var cs: PCopyDataStruct;
var sl: TStringList;
var tmpStr: String;
begin
cs := Message.CopyDataStruct;
sl := TStringList.Create;
try
SetLength(tmpStr, cs^.cbData);
Move(cs^.lpData^, PChar(tmpStr)^, cs^.cbData);
sl.Text := tmpStr;
processCommands(sl);
finally
FreeAndNil(sl);
end;
Message.Result := 1;
end;
procedure TfrmMain.processCommandLine;
var sl: TStringList;
var i: Integer;
begin
if FcmdLineProcessed then Exit;
FcmdLineProcessed := True;
sl := TStringList.Create;
try
if ParamCount > 0 then begin
for i := 1 to ParamCount do
sl.Add(ParamStr(i));
processCommands(sl);
end;
finally
FreeAndNil(sl);
end;
end;
procedure TfrmMain.processCommands(lst: TStringList);
var tmpStr1, tmpStr2, tmpStr3: String;
var strTo, strCc, strBcc, strAttach: String;
var strBody, strSubject: String;
begin
if UpperCase(lst.Strings[0]) = '/ATTACH' then begin
lst.Delete(0);
frmMaillist.actMessageNew.Execute;
frmMaillist.LastCompose.CreateMessage('',_('Files attached through Send To'), '', lst);
end
else if UpperCase(lst.Strings[0]) = '/RESTORE' then begin
tray.ShowMainForm;
ShowWindow(Self.Handle, SW_RESTORE);
BringWindowToTop(Self.Handle);
end
else if UpperCase(lst.Strings[0]) = '/MAILURL' then begin
lst.Delete(0);
tmpStr1 := lst.Text;
tmpStr1 := StringReplace(tmpStr1, '&', '&', [rfReplaceAll, rfIgnoreCase]);
if UpperCase(LeftStr(tmpStr1, 7)) = 'MAILTO:' then begin
tmpStr1 := RightStr(tmpStr1, Length(tmpStr1) - 7);
//to field is everything up to ?
strTo := DecodeURL(FetchEx(tmpStr1, '?', ''));
if tmpStr1 <> '' then begin
if tmpStr1[1] = '&' then
tmpStr1 := RightStr(tmpStr1, Length(tmpStr1) - 1);
//parse other parameters
while tmpStr1 <> '' do begin
tmpStr2 := FetchEx(tmpStr1, '&', '');
tmpStr3 := UpperCase(LeftStr(tmpStr2, Pos('=',tmpStr2)));
if tmpStr3 = 'SUBJECT=' then begin
strSubject := DecodeURL(RightStr(tmpStr2, Length(tmpStr2) - Length(tmpStr3)));
end
else if tmpStr3 = 'CC=' then begin
if strCc <> '' then
strCc := strCc + ',';
strCc := strCc + DecodeURL(RightStr(tmpStr2, Length(tmpStr2) - Length(tmpStr3)));
end
else if tmpStr3 = 'BCC=' then begin
if strBcc <> '' then
strBcc := strBcc + ',';
strBcc := strBcc + DecodeURL(RightStr(tmpStr2, Length(tmpStr2) - Length(tmpStr3)));
end
else if tmpStr3 = 'ATTACH=' then begin
if strAttach <> '' then
strAttach := strAttach + ',';
strAttach := strAttach + DecodeURL(RightStr(tmpStr2, Length(tmpStr2) - Length(tmpStr3)));
end
else if tmpStr3 = 'BODY=' then begin
if strBody <> '' then
strBody := strBody + #13#10;
strBody := strBody + DecodeURL(RightStr(tmpStr2, Length(tmpStr2) - Length(tmpStr3)));
end;
end;
end;
frmMaillist.actMessageNew.Execute;
lst.Text := strAttach;
frmMaillist.LastCompose.CreateMessage(strBody, strSubject, strTo, strCc, strBcc, lst);
end
else
MessageDlg(_('Wrong mailto: format.'), mtError, [mbOK], 0);
end;
if frmMaillist.LastCompose <> nil then begin
try
ShowWindow(frmMaillist.LastCompose.Handle, SW_RESTORE);
except
end;
end;
end;
procedure TfrmMain.actHelpCheckNewerExecute(Sender: TObject);
var Major: Word;
var Minor: Word;
var Release: Word;
var Build: Word;
begin
GetFileVersion(Application.ExeName, Major, Minor, Release, Build);
CheckForNewer(siMailHome, Major, Minor, Release, Build);
end;
procedure TfrmMain.actToolsCustomizeExecute(Sender: TObject);
begin
frmThemeConfig.ShowModal;
end;
procedure TfrmMain.actTBCustomizeExecute(Sender: TObject);
begin
actToolsCustomize.Execute;
end;
procedure TfrmMain.actTBMessageReplyAllUpdate(Sender: TObject);
begin
frmMaillist.actMessageReplyAll.Update;
end;
procedure TfrmMain.actTBMessageReplyAllExecute(Sender: TObject);
begin
frmMaillist.actMessageReplyAll.Execute;
end;
procedure TfrmMain.StatusBar1Resize(Sender: TObject);
begin
StatusBar1.Panels[0].Size := Trunc(Self.ClientWidth * 0.25);
StatusBar1.Panels[1].Size := Trunc(Self.ClientWidth * 0.55);
StatusBar1.Panels[2].Size := Trunc(Self.ClientWidth * 0.18);
(*dlProgress.Height := StatusBar1.Height;
dlProgress.Width := StatusBar1.Panels[2].Size;
dlProgress.Repaint;*)
end;
procedure TfrmMain.actTBMessagePrintUpdate(Sender: TObject);
begin
actTBMessagePrint.Enabled := frmMailView.actFilePrintPrint.Enabled;
end;
procedure TfrmMain.actTBMessagePrintExecute(Sender: TObject);
begin
frmMailView.actFilePrintPrint.Execute;
end;
procedure TfrmMain.actTrayComposeExecute(Sender: TObject);
begin
frmMailbox.actAccountComposeMessageThis.Execute;
end;
procedure TfrmMain.actTrayComposeUpdate(Sender: TObject);
begin
actTrayCompose.Enabled := frmMailbox.actAccountComposeMessageThis.Enabled;
end;
procedure TfrmMain.dlProgressDblClick(Sender: TObject);
begin
frmTasks.Show;
end;
procedure TfrmMain.actTBFetchNSendExecute(Sender: TObject);
begin
if frmMailbox.actAccountSendFetchThis.Enabled then
frmMailbox.actAccountSendFetchThis.Execute
else
frmMailbox.actAccountSendFetchAll.Execute;
end;
procedure TfrmMain.actTBFetchNSendUpdate(Sender: TObject);
begin
frmMailbox.actAccountSendFetchThis.Update;
actTBFetchNSend.Enabled := frmMailbox.actAccountSendFetchThis.Enabled or
frmMailbox.actAccountSendFetchAll.Enabled;
end;
procedure TfrmMain.mGestureJvMouseGestureCustomInterpretation(
aGesture: String);
begin
StatusBar1.Panels.Items[0].Caption := aGesture;
end;
function TfrmMain.ValidateFileName(FileName: String): String;
var i: Integer;
begin
for i := 1 to Length(FileName) do begin
if FileName[i] in sNotAllowedInFileName then
FileName[i] := '_';
end;
Result := FileName;
end;
procedure TfrmMain.actFileExportExecute(Sender: TObject);
begin
frmExportMessagesWizard.ShowModal;
end;
procedure TfrmMain.actFocusMailboxesExecute(Sender: TObject);
begin
if frmMailbox.Visible then
frmMailbox.trMailbox.SetFocus;
end;
procedure TfrmMain.actFocusAddrBkExecute(Sender: TObject);
begin
if frmAddressBook.Visible then
frmAddressBook.trAddressBook.SetFocus;
end;
procedure TfrmMain.actFocusMessageListExecute(Sender: TObject);
begin
if frmMaillist.Visible then
frmMaillist.lstMailList.SetFocus;
end;
procedure TfrmMain.actFocusMessageViewExecute(Sender: TObject);
begin
if frmMailView.Visible then
frmMailView.SetFocus;
end;
procedure TfrmMain.actSaveLogExecute(Sender: TObject);
begin
logPop3.SaveToFile(df.Application + 'pop3.log');
end;
procedure TfrmMain.actCustomizeExecute(Sender: TObject);
begin
//
end;
procedure TfrmMain.WMQueryEndSession(var Message: TWMQueryEndSession);
begin
Message.Result := 1;
actFileExit.Execute;
end;
procedure TfrmMain.dfsSplitter3Restore(Sender: TObject);
begin
frmMailbox.Profile.Config.WriteInteger(Self.Name, 'pnlMailListHeight',
pnlMailList.Height);
end;
procedure TfrmMain.dfsSplitter2Restore(Sender: TObject);
begin
frmMailbox.Profile.Config.WriteInteger(Self.Name, 'addressBookPanelHeight',
pnlAddressBook.Height);
end;
procedure TfrmMain.dfsSplitter1Restore(Sender: TObject);
begin
frmMailbox.Profile.Config.WriteInteger(Self.Name, 'pnlAddrBookAndMboxWidth',
pnlAddrBookAndMbox.Width);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -