📄 umain.pas
字号:
WANTTODELETETOOLBAR := TranslateStr('ToolabrCustomize',64911);
TOOLBAREXISTS := TranslateStr('ToolabrCustomize',64884);
end; // with
with dxBarManager1.CustomPopMenuCaptions do
begin
RESET := TranslateStr('ToolabrCustomize',64891);
DELETE := TranslateStr('ToolabrCustomize',64892);
NAME := TranslateStr('ToolabrCustomize',64893);
DEFAULTSTYLE := TranslateStr('ToolabrCustomize',64895);
TEXTONLYALWAYS := TranslateStr('ToolabrCustomize',64864);
TEXTONLYINMENUS := TranslateStr('ToolabrCustomize',64865);
IMAGEANDTEXT := TranslateStr('ToolabrCustomize',64866);
BEGINAGROUP := TranslateStr('ToolabrCustomize',64867);
end; // with
end;
procedure TMainWindow.RestoreWindowSettings;
begin
gProperties.RestoreWindowState(MainWindow);
PanelLeft.Width:=gProperties.HSPosition;
PanelR_TOP.Height:=gProperties.VSPosition;
// case gProperties.ToolBarStyle of //
// 0: MBarStyle1.Click;
// 1: MBarStyle2.Click;
// 2: MBarStyle3.Click;
// 3: MBarStyle4.Click;
// 4: MBarStyle5.Click;
// 5: MBarStyle6.Click;
// end; // case
end;
procedure TMainWindow.SaveWindowSettings;
begin
gProperties.HSPosition:=PanelLeft.Width;
gProperties.VSPosition:=PanelR_TOP.Height;
gProperties.SaveWindowState(self);
gProperties.AddressHistory.Assign(AddressBox.Items);
dxBarManager1.SaveToIniFile(gProperties.ConfigDir+'Toolbar.ini');
end;
procedure TMainWindow.LoadToobarStatus;
begin
dxBarManager1.LoadFromIniFile(gProperties.ConfigDir+'Toolbar.ini');
cxTreeList1.Preview.Visible := gProperties.ShowPerview;
BarBtnShowPerview.Down := gProperties.ShowPerview;
end;
procedure TMainWindow.LoadTreeListSettings;
var
i,Col_Index,Col_SortOrder,iWidth:Integer;
inifile:TIniFile;
begin
inifile := TIniFile.Create(gProperties.ConfigDir + ChangeFileExt(ExtractFileName(Application.Exename),'.ini'));
for i:= 0 to cxTreeList1.ColumnCount - 1 do
with cxTreeList1.Columns[i] do
begin
Col_Index := inifile.ReadInteger('TreeList',Name+'_ColIndex',-1);
if Col_Index<>-1 then
Position.ColIndex := Col_Index;
Col_SortOrder := inifile.ReadInteger('TreeList',Name+'_ColSortOrder',-1);
if Col_SortOrder<>-1 then
case Col_SortOrder of //
0: SortOrder := soNone;
1: SortOrder := soAscending;
2: SortOrder := soDescending;
else
SortOrder := soNone;
end; // case
if i=1 then
iWidth := 25
else
iWidth := 100;
Width := inifile.ReadInteger('TreeList',Name+'_Width',iWidth);
end; // for
Col_Read.Width := 25;
end;
procedure TMainWindow.SaveTreeListSettings;
var
i:Integer;
inifile:TIniFile;
begin
inifile := TIniFile.Create(gProperties.ConfigDir + ChangeFileExt(ExtractFileName(Application.Exename),'.ini'));
for i:= 0 to cxTreeList1.ColumnCount - 1 do
with cxTreeList1.Columns[i] do
begin
inifile.WriteInteger('TreeList',Name+'_ColIndex',Position.ColIndex);
inifile.WriteInteger('TreeList',Name+'_ColSortOrder',Ord(SortOrder));
inifile.WriteInteger('TreeList',Name+'_Width',Width);
end; // for
end;
procedure TMainWindow.FlagMenuItemClick(Sender:TObject);
var i,f:Integer;
begin
f:=(Sender as TMenuItem).Tag;
for i := 0 to cxTreeList1.SelectionCount - 1 do
begin
cxTreeList1.Selections[i].Values[1] := f;
TLocalRssItem(cxTreeList1.Selections[i].Data).Flag := f;
end;
end;
procedure TMainWindow.LoadFlags;
var
MItem:TMenuItem;
i:Integer;
itm:TcxImageComboBoxItem;
begin
//XPMenu1.Active:=False;
for i := PMFlag.Items.Count - 1 downto 0 do // Iterate
begin
if PMFlag.Items[i].Tag>1 then
PMFlag.Items.Delete(i);
end; // for
for i := FlagImageComboBox.Properties.Items.Count - 1 downto 0 do // Iterate
begin
if FlagImageComboBox.Properties.Items.Items[i].Tag>1 then
FlagImageComboBox.Properties.Items.Delete(i);
end;
for i := 0 to FlagList.Count - 1 do // Iterate
begin
MItem :=TMenuItem.Create(nil);
MItem.Tag :=FlagList.Item[i].FlagID;
MItem.Caption:=FlagList.Item[i].Caption;
MItem.OnClick := FlagMenuItemClick;
MItem.GroupIndex := 1;
MItem.ImageIndex := FlagList.Item[i].ImageIndex;
MItem.AutoCheck :=True;
PMFlag.Items.Add(MItem);
itm:=TcxImageComboBoxItem(FlagImageComboBox.Properties.Items.Add);
itm.Description := FlagList.Item[i].Caption;
itm.ImageIndex := FlagList.Item[i].ImageIndex;
itm.Tag := 2;
itm.Value := FlagList.Item[i].FlagID;
end; // for
MFlag.OnClick := FlagMenuItemClick;
MFlagNull.OnClick := FlagMenuItemClick;
//XPMenu1.Active := True;
end;
procedure TMainWindow.FormCreate(Sender: TObject);
begin
ExecPath := ExtractFilePath(Application.Exename);
ADBlockCount := 0;
AutoSetReaded := True;
FirstShow := True;
gProperties := TMProperties.Create(ExecPath);
//if gProperties. then
if not FileExists(gProperties.AppPath+'Config\flag.xml') then
StrToFile(gProperties.AppPath+'Config\flag.xml','<?xml version="1.0" encoding="UTF-8"?><flag></flag>');
GetFlagList(gProperties.AppPath+'Config\flag.xml');
LoadFlags;
If gProperties.EnableScript Then
embeddedwb1.DownloadOptions := embeddedwb1.DownloadOptions - [DLCTL_NO_SCRIPTS]
else
embeddedwb1.DownloadOptions := embeddedwb1.DownloadOptions + [DLCTL_NO_SCRIPTS];
HistoryIndex := -1;
HistoryList := TStringList.Create;
HistoryList.Clear;
AddressBox.Items.AddStrings(gProperties.AddressHistory);
cxTreeList1.DoubleBuffered := True;//打开双缓冲,避免闪烁
FeedTree.DoubleBuffered :=True;
TranslateFormMain;
RestoreWindowSettings;
LoadToobarStatus;
LoadTreeListSettings;
HTMLXml := CoDOMDocument.Create;
XSL := CoDOMDocument.Create;
XSL.load(gProperties.Style.CurrentStyle.FileName);
LoadOPMLFile;
LoadFavOPMLFile;
Application.ShowMainForm := True;
if gProperties.RefreshAtStart then
UpdateWithChild(ChannelNode);
end;
procedure TMainWindow.FormDestroy(Sender: TObject);
begin
gProperties.Destroy;
HistoryList.Free;
FeedList.Free;
Opml.Free;
end;
procedure TMainWindow.FormClose(Sender: TObject; var Action: TCloseAction);
begin
SaveWindowSettings;
gProperties.SaveSettings;
SaveTreeListSettings;
FeedList.Save;
Opml.Save(gProperties.AppPath+FeedOpmlFile);
FavList.Save;
FavOpml.Save(gProperties.AppPath+FavOpmlFile);
FlagList.Save(gProperties.AppPath+'Config\flag.xml');
end;
procedure TMainWindow.FindAddress(Url:WideString);
begin
UpdateCombo:=true;
if AddressBox.Text<>Url then
AddressBox.Text:=Url;
EmbeddedWB1.Navigate(AddressBox.Text);
end;
procedure TMainWindow.ApplyStyle(Sender:TObject);
var HTML:string;
begin
XSL.load(TStyleItem(BarCmbStyle.Items.Objects[BarCmbStyle.ItemIndex]).FileName);
HTML:= HTMLXml.transformNode(XSL.documentElement);
HTML:=FastReplace(HTML,'<META http-equiv="Content-Type" content="text/html; charset=utf-16">',
'');
HTML := FastReplace(HTML,'$ImagesFolder$',gProperties.AppPath+'Styles\Images\');
ShowHtmlInBrowser(HTML);
gProperties.CurrentStyle:=BarCmbStyle.Text;
end;
Procedure TMainWindow.ShowHtmlInBrowser( Const Html: WideString );
var
Stream: TStringStream;
Begin
Try
Stream := TStringStream.Create(Html);
Try
embeddedwb1.BringToFront;
embeddedwb1.LoadFromStream(Stream);
BarCmbStyle.Enabled:=True;
Finally
Stream.Free;
End;
Except
End;
End;
procedure TMainWindow.actBackEecute(Sender: TObject);
begin
FindAddress(HistoryList[HistoryIndex - 1]);
end;
procedure TMainWindow.actForwardExecute(Sender: TObject);
begin
FindAddress(HistoryList[HistoryIndex + 1]);
end;
procedure TMainWindow.actGoExecute(Sender: TObject);
begin
if trim(AddressBox.text) <> '' then
FindAddress(AddressBox.text);
end;
procedure TMainWindow.actBackUpdate(Sender: TObject);
begin
if HistoryList.Count > 0 then
actBack.Enabled := HistoryIndex > 0
else
actBack.Enabled := False;
end;
procedure TMainWindow.actForwardUpdate(Sender: TObject);
begin
if HistoryList.Count > 0 then
actForward.Enabled := HistoryIndex < HistoryList.Count - 1
else
actForward.Enabled := False;
end;
procedure TMainWindow.EmbeddedWB1StatusTextChange(Sender: TObject;
const Text: WideString);
begin
JvStatusBar1.Panels[0].Text:=' '+Text;
end;
procedure TMainWindow.EmbeddedWB1NewWindow2(Sender: TObject;
var ppDisp: IDispatch; var Cancel: WordBool);
begin
case gProperties.ShowPopupsMode of
POP_Always: Cancel := False;
POP_Never: Cancel := True;
POP_Ask:
begin
Cancel := HTMLMessageDlg(TranslateStr('Message',9101),
TranslateStr('Message',9102));
end;
else
Cancel := False;
end;
end;
procedure TMainWindow.actExitExecute(Sender: TObject);
begin
Close;
end;
procedure TMainWindow.actOptionExecute(Sender: TObject);
begin
Application.CreateForm(TfmOption, fmOption);
try
fmOption.ShowPage(0);
finally
fmOption.Free;
end;
end;
procedure TMainWindow.OnProgress(Sender:TObject;Position,Max:integer);
begin
if ProgressBar<>nil then
begin
ProgressBar.Max:= Max;
ProgressBar.Position:=Position;
if ProgressBar.Position=ProgressBar.Max then
begin
ProgressBar.Position:=0;
ProgressBar.Visible:=False;
end
else
ProgressBar.Visible:=True;
end
end;
procedure TMainWindow.actAboutExecute(Sender: TObject);
Var
Dlg: TAboutDialog;
begin
Dlg := TAboutDialog.Create( Self );
Try
Dlg.ShowModal;
Finally
Dlg.Free;
End;
end;
procedure TMainWindow.EmbeddedWB1ProgressChange(Sender: TObject; Progress,
ProgressMax: Integer);
begin
OnProgress(Sender,Progress,ProgressMax);
end;
function TMainWindow.AddFeed(parent:TcxTreeListNode;FeedTitle,XmlURL,Description,HtmlUrl,FileName:string):TFeedItem;
var Item:TFeedItem;
tnode:TcxTreeListNode;
otl:TOutlineType;
begin
if (not FileExists(gProperties.ChannelDir + FileName)) or (FileName = '') then
begin
FileName:=CreateGuid+'.xml';
CreateEmptyRssXml(gProperties.ChannelDir,FileName);
end;
if parent.Level=0 then
otl := Opml.Body.Items.Add('outline')
else
otl:=TFeedItem(parent.Data).Outline.Items.Add('outline');
otl.Type_:='rss';
otl.Title:=FeedTitle;
otl.XmlUrl:=XmlURL;
otl.HtmlUrl:=HtmlUrl;
otl.Description:=Description;
otl.FileName:=FileName;
Item := FeedList.Add(otl);
tnode:=FeedTree.AddChild(parent,Item);
tnode.Texts[0]:=FeedTitle;
tnode.ImageIndex:=2;
tnode.SelectedIndex:=2;
Item.TreeNode:=tnode;
Item.Rss.OnItemChange := Event_ItemsChange;
Item.OnNewItem := Event_OnNewItem;
Item.Rss.ExecItemChanged;
Result := Item;
end;
function TMainWindow.GetRootNode(aNode:TcxTreeListNode):TcxTreeListNode;
var pNode:TcxTreeListNode;
begin
pNode := aNode;
while pNode.Level>0 do
begin
pNode:=pNode.Parent;
end;
Result:=pNode;
end;
procedure TMainWindow.LoadToTree(aNode:TcxTreeListNode;oln:TOutlineType);
var i:Integer;
tnode:TcxTreeListNode;
feeditem:TFeedItem;
otl:TOutlineType;
begin
for i := 0 to oln.Items.Count - 1 do // Iterate
begin
otl:=oln.Items.Item[i];
feeditem:=FeedList.Add(otl);
tnode:=FeedTree.AddChild(aNode , feeditem );
tnode.Texts[0]:=otl.Title;
feeditem.TreeNode:=tnode;
if otl.Type_<>'folder' then
begin
feeditem.Rss.OnItemChange := Event_ItemsChange;
feeditem.Rss.ExecItemChanged;
end;
if otl.hasChild then
LoadToTree(tnode,otl);
end; // for
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -