git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.DevExpressVCL@21 05c56307-c608-d34a-929d-697000501d7a
141 lines
4.9 KiB
ObjectPascal
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.
|