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

📄 umain.pas

📁 自己写的一个 RSS 阅读器
💻 PAS
📖 第 1 页 / 共 5 页
字号:
    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 + -