Componentes.Terceros.DevExp.../official/x.30/ExpressWeb Framework/Demos/Delphi/WebServices/WebServiceHome.pas
2007-12-16 17:06:54 +00:00

141 lines
4.9 KiB
ObjectPascal

unit WebServiceHome;
interface
uses SysUtils, Classes, HTTPApp, cxWebModule, cxWebAppSrv, cxWebTable,
cxWebStdCtrls, cxWebClasses, cxWebControls, GoogleSearch, Rio,
SOAPHTTPClient, InvokeRegistry;
type
TWebServiceHomePage = class(TcxWebPageModule)
weSearch: TcxWebEdit;
wbtnSearch: TcxWebButton;
WebTable: TcxWebTable;
HTTPRIO: THTTPRIO;
StyleController: TcxWebStyleController;
TablePaging: TcxWebStyleItem;
TablePagingHover: TcxWebStyleItem;
TableAlter: TcxWebStyleItem;
TableItems: TcxWebStyleItem;
cxWebImage1: TcxWebImage;
TablePagingSelected: TcxWebStyleItem;
procedure wbtnSearchClick(Sender: TObject);
procedure WebTableGetDisplayText(Sender: TObject;
AColumn: TcxWebTableColumn; ARecIndex: Integer; var AText: String);
procedure WebTableBeforeRender(Sender: TObject);
private
FGoogleSearchResult: GoogleSearchResult;
procedure DoSearch(AStartIndex: Integer);
public
{ Public declarations }
end;
function WebServiceHomePage: TWebServiceHomePage;
implementation
{$R *.DFM} {*.html}
uses
WebReq, WebCntxt, cxWebModFact, Variants, cxWebRender;
const
GoogleResultCount = 10;
function WebServiceHomePage: TWebServiceHomePage;
begin
Result := TWebServiceHomePage(WebContext.FindModuleClass(TWebServiceHomePage));
end;
procedure TWebServiceHomePage.DoSearch(AStartIndex: Integer);
begin
FGoogleSearchResult := (HTTPRIO as GoogleSearchPort).doGoogleSearch('FKCgD7VRUSY2su7sPbAcDMUoOwII3aNf',
weSearch.Text, AStartIndex * GoogleResultCount, GoogleResultCount,
True, '', False, '', '', '');
if FGoogleSearchResult <> nil then
begin
if FGoogleSearchResult.endIndex - FGoogleSearchResult.startIndex < GoogleResultCount - 1 then
WebTable.RecordCount := FGoogleSearchResult.endIndex
else WebTable.RecordCount := FGoogleSearchResult.estimatedTotalResultsCount;
WebTable.PageIndex := (FGoogleSearchResult.startIndex - 1) div GoogleResultCount;
end else WebTable.RecordCount := 0;
end;
procedure TWebServiceHomePage.wbtnSearchClick(Sender: TObject);
begin
DoSearch(0);
end;
procedure TWebServiceHomePage.WebTableGetDisplayText(Sender: TObject;
AColumn: TcxWebTableColumn; ARecIndex: Integer; var AText: String);
var
AHTMLTextBuilder: TcxHTMLTextBuilder;
AGoogleIndex: Integer;
procedure WriteRowStyle;
begin
if (WebTable.AlternatingItemsStyles.Default <> nil) and (ARecIndex mod 2 = 1) then
AHTMLTextBuilder.WriteAttribute(aClass, WebTable.AlternatingItemsStyles.Default.FullName)
else
if WebTable.ItemsStyles.Default <> nil then
AHTMLTextBuilder.WriteAttribute(aClass, WebTable.ItemsStyles.Default.FullName);
end;
begin
AGoogleIndex := ARecIndex mod GoogleResultCount;
if AColumn.Index = 0 then
begin
AHTMLTextBuilder := TcxHTMLTextBuilder.Create(GetBrowser);
try
AHTMLTextBuilder.WriteBeginTag(TcxHTMLTagTable);
AHTMLTextBuilder.WriteAttribute(aRules, 'all');
AHTMLTextBuilder.WriteAttribute(aBorder, 0);
AHTMLTextBuilder.WriteAttribute(aCellspacing, 0);
AHTMLTextBuilder.WriteStyleAttribute(saWidth, '100%');
AHTMLTextBuilder.WriteBeginTag(TcxHTMLTagTr, True, False);
//Write title
WriteRowStyle;
AHTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd, True, False);
AHTMLTextBuilder.WriteAttribute(aAlign, cxWebHorzAlignment[AColumn.Alignment]);
AHTMLTextBuilder.WriteBeginTag(TcxHTMLTagA, False, False);
AHTMLTextBuilder.WriteAttribute(aHref, FGoogleSearchResult.resultElements[AGoogleIndex].URL);
AHTMLTextBuilder.WriteText(FGoogleSearchResult.resultElements[AGoogleIndex].title, False, False);
AHTMLTextBuilder.WriteEndTag(TcxHTMLTagA, False, False);
AHTMLTextBuilder.WriteEndTag(TcxHTMLTagTd, False, False);
AHTMLTextBuilder.WriteEndTag(TcxHTMLTagTr, True, False);
//Write Text
AHTMLTextBuilder.WriteBeginTag(TcxHTMLTagTr, True, False);
WriteRowStyle;
AHTMLTextBuilder.WriteBeginTag(TcxHTMLTagTd, True, False);
AHTMLTextBuilder.WriteText(FGoogleSearchResult.resultElements[AGoogleIndex].snippet, False, False);
AHTMLTextBuilder.WriteEndTag(TcxHTMLTagTd, False, False);
AHTMLTextBuilder.WriteEndTag(TcxHTMLTagTr, True, False);
AHTMLTextBuilder.WriteEndTag(TcxHTMLTagTable);
AText := AHTMLTextBuilder.Text;
finally
AHTMLTextBuilder.Free;
end;
end else
begin
AText := Format('Cache size is %s', [FGoogleSearchResult.resultElements[AGoogleIndex].cachedSize]);
end;
end;
procedure TWebServiceHomePage.WebTableBeforeRender(Sender: TObject);
begin
if (FGoogleSearchResult = nil) and (weSearch.Text <> '') then
DoSearch(WebTable.PageIndex);
end;
initialization
if WebRequestHandler <> nil then
WebRequestHandler.AddWebModuleFactory(TcxWebPageModuleFactory.Create(TWebServiceHomePage, TcxWebPageInfo.Create('*.html'), caDestroy));
end.