14-12-2017, Saat: 13:07
Forumda XML parse ile ilgili örnekler mevcut ama bir tane de benden olsun 
Forumun RSS (RSS nedir) bilgilerini alıp ListView'da gösteren küçük bir uygulama yaptım.
XML parse, ListView içinde Record saklama, ShellExecute ve TFormatSettings kullanma gibi konularda faydalı olacağını düşünüyorum.
Ekran görüntüsü:

Kodlarda çok fazla anlatılacak bir şey yok bence. Yine soru gelirse cevaplamaya hazırım
Kaynak kodlar ve projenin tamamı burada.

Forumun RSS (RSS nedir) bilgilerini alıp ListView'da gösteren küçük bir uygulama yaptım.
XML parse, ListView içinde Record saklama, ShellExecute ve TFormatSettings kullanma gibi konularda faydalı olacağını düşünüyorum.
Ekran görüntüsü:

Kodlarda çok fazla anlatılacak bir şey yok bence. Yine soru gelirse cevaplamaya hazırım

unit main;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Xml.xmldom, Xml.XMLIntf, Xml.XMLDoc, Vcl.StdCtrls,
Vcl.ComCtrls, Winapi.ShellApi;
type
TForm1 = class(TForm)
lwXML: TListView;
XMLDocument1: TXMLDocument;
btnRefresh: TButton;
procedure btnRefreshClick(Sender: TObject);
procedure lwXMLDblClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
/// <summary> ListView'i XML verileri ile doldurur </summary>
procedure FillList;
/// <summary> ListView içinde tutulan veri hafızasını serbest bırakır </summary>
procedure ClearListItems;
/// <summary> String olarak verilen URL'yi varsayılan browser ile açar </summary>
procedure OpenUrl(Url: String);
/// <summary> XML ile gelen tarih bilgisini dd/mm/yyyy hh:nn:ss formatına çevirir </summary>
/// <remarks> XML tarih formatına örnek: Tue, 12 Dec 2017 16:51:48 +0300 </remarks>
function ChangeXmlDate(const xmlDate: String): String;
public
{ Public declarations }
end;
TWebData = record
title: String;
date_: String;
link: String;
end;
PWebData = ^TWebData;
var
Form1: TForm1;
implementation
uses DateUtils;
{$R *.dfm}
procedure TForm1.btnRefreshClick(Sender: TObject);
begin
FillList;
end;
procedure TForm1.FillList;
var
cur: TCursor;
aNode: IXMLNode;
NodeData: PWebData;
begin
cur := Screen.Cursor;
Screen.Cursor := crHourGlass;
ClearListItems;
lwXML.Clear;
lwXML.Items.BeginUpdate;
try
XMLDocument1.Active := False;
XMLDocument1.FileName := 'http://www.delphican.com/syndication.php';
XMLDocument1.Active := True;
aNode := XMLDocument1.DocumentElement.ChildNodes.First.ChildNodes.FindNode('item');
repeat
New(NodeData);
NodeData.title := aNode.ChildNodes['title'].Text;
NodeData.date_ := ChangeXmlDate(aNode.ChildNodes['pubDate'].Text);
NodeData.link := aNode.ChildNodes['link'].Text;
with lwXML.Items.Add do
begin
Caption := NodeData.title;
SubItems.Add(NodeData.date_);
Data := Pointer(NodeData);
end;
aNode := aNode.NextSibling;
until (aNode = nil);
finally
lwXML.Items.EndUpdate;
Screen.Cursor := cur;
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ClearListItems;
end;
procedure TForm1.lwXMLDblClick(Sender: TObject);
var
NodeData: TWebData;
begin
if lwXML.Selected <> nil then
begin
NodeData := PWebData(lwXML.Selected.Data)^;
OpenUrl(NodeData.link);
end;
end;
procedure TForm1.OpenUrl(Url: String);
var
SEInfo: TShellExecuteInfo;
begin
FillChar(SEInfo, SizeOf(SEInfo), 0);
SEInfo.cbSize := SizeOf(TShellExecuteInfo);
SEInfo.Wnd := 0;
SEInfo.lpFile := PChar(Url);
SEInfo.lpParameters := nil;
SEInfo.nShow := SW_SHOWDEFAULT;
SEInfo.lpVerb := 'open';
SEInfo.lpDirectory := nil;
ShellExecuteEx(@SEInfo);
end;
function TForm1.ChangeXmlDate(const xmlDate: String): String;
var
strDate: String;
FS: TFormatSettings;
I: Integer;
begin
strDate := Copy(xmlDate, 6, 20);
FS := TFormatSettings.Create('en-US');
for I := 1 to 12 do
begin
Result := StringReplace(strDate, ' '+FS.ShortMonthNames[I]+' ', '/'+IntToStr(I)+'/', []);
if Result <> strDate then
Break;
end;
end;
procedure TForm1.ClearListItems;
var
aItem: TListItem;
begin
for aItem in lwXML.Items do
Dispose(PWebData(aItem.Data));
end;
end.
Kaynak kodlar ve projenin tamamı burada.
There's no place like 127.0.0.1

