转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
Web Application 開 發 利 器 - WebSnap(七)         ★★★★

Web Application 開 發 利 器 - WebSnap(七)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:2339 更新时间:2009/4/23 18:40:09
function TMySessionPagedAdapter.AddToList(Value:string):Boolean;

begin

  Result:=True;

  if not FindSession(Value,foNothing) then

    begin

      if not FindSession('''''''',foNothing,Value) then

       begin

        try

         VarArrayUnLock(FSessionVariant);

         VarArrayRedim(FSessionVariant,FDeleteArraySize+1);

         FDeleteArray:=VarArrayLock(FSessionVariant);

         FDeleteArray[FDeleteArraySize+1]:=Value;

         Inc(FDeleteArraySize);

        except

         Result:=False;

        end;

       end;

    end;

end;

 

function TMySessionPagedAdapter.FindSession(Value:string;FindOperation:TFindOperation;AddValue:string=''''''''):Boolean;

var

 I:Integer;

 bFind:Boolean;

begin

 bFind:=False;

 if FDeleteArraySize <> -1 then

    begin

     for I:=0 to FDeleteArraySize do

       begin

        if (not VarIsEmpty(FDeleteArray[I])) and (Value = FDeleteArray[I]) then

         begin

           bFind:=True;

           if FindOperation = foDelete then

              FDeleteArray[I]:=Unassigned;

           break;

         end;

        if (Value = '''''''') and (AddValue <> '''''''') and (VarIsEmpty(FDeleteArray[I])) then

         begin

          bFind:=True;

          FDeleteArray[I]:=AddValue;

          break;

         end;

       end;

    end;

 Result:=bFind;

end;

 

AddToList 及 FindSession 是 用 來 處 理 Session 的 程 式 , 我 們 利 用 了 一 個 Variant Array 來 儲 存 使 用 者 所 挑 選 的 檔 案 名 稱 , FDeleteArray 是 一 個 陣 列 指 標 , 我 們 在 操 作 Variant Array 之 前 會 先 使 用 VarArrayLock 來 加 快 處 理 Variant Array 的 速 度 .

procedure TMySessionPagedAdapter.WebPageModuleBeforeDispatchPage(

  Sender: TObject; const PageName: String; var Handled: Boolean);

begin

  InitializeList(AppPath+''''\*.*'''');

  FSessionVariant:=Session.Values[''''DeleteList''''];

  if VarIsEmpty(FSessionVariant) then

   begin

     FSessionVariant:=VarArrayCreate([0,0],varVariant);

     FSessionVariant[0]:=Unassigned;

     Session.Values[''''DeleteList'''']:=FSessionVariant;

     FDeleteArraySize:=0;

   end

  else

     FDeleteArraySize:=VarArrayHighBound(FSessionVariant,1);

  FDeleteArray:=VarArrayLock(FSessionVariant);

end;

 

我 們 選 擇 了 在 BeforeDispatchPage 事 件 中 將 Session 取 出 並 Lock 後 對 應 至 FDeleteArray 中 。

 

procedure TMySessionPagedAdapter.WebPageModuleAfterDispatchPage(

  Sender: TObject; const PageName: String);

begin

  VarArrayUnLock(FSessionVariant);

  Session.Values[''''DeleteList'''']:=FSessionVariant;

end;

 

 

在 Dispatch 之 後 我 們 將 Variant UnLock 後 存 回 Session 中 。

 

procedure TMySessionPagedAdapter.AdaptDeleteGetValue(Sender: TObject;

  var Value: Boolean);

begin

  Value:=FindSession(AdaptFileName.Value,foNothing);

end;

 

 

我 們 在 這 個 範 例 中 提 供 一 個 checkbox 在 每 一 筆 資 料 後 面 , 這 個 值 必 須 由 Session 中 取 出 。

 

procedure TMySessionPagedAdapter.AdaptDeleteUpdateValue(Sender: TObject;

  Value: Boolean);

begin

  AddToList(FStrings.Names[OrpEditablePagedAdapter1.CurrentUpdateIndex])

end;

 

當 使 用 者 選 定 檔 案 或 是 切 換 至 其 它 的 Page 時 , 我 們 要 執 行 Adapter 的 UpdateRecords 函 式 , 她 會 觸 發 AdapterField 的 UpdateValue 事 件 , 這 裡 我 們 使 用 了 TOrpEditablePagedAdapter 的 特 有 屬 性 :CurrentUpdateIndex , 這 個 屬 性 會 告 知 我 們 目 前 更 新 的 記 錄 位 置 , 我 們 再 由 FStrings 取 出 對 應 的 檔 名 . 

procedure TMySessionPagedAdapter.ActionPrevPageBeforeExecute(

  Sender: TObject; Params: TStrings; var Handled: Boolean);

var

  I,iClearStart,iClearEnd:Integer;

begin

  FSessionVariant:=Session.Values[''''DeleteList''''];

  FDeleteArray:=VarArrayLock(FSessionVariant);

  iClearStart:=OrpEditablePagedAdapter1.RecordIndex;

  iClearEnd:=OrpEditablePagedAdapter1.PageSize +

                  OrpEditablePagedAdapter1.RecordIndex;

  if iClearEnd > (FStrings.Count-1) then

     iClearEnd:=FStrings.Count-1;

  for I:=iClearStart to iClearEnd do

     FindSession(FStrings.Names[I],foDelete);

  OrpEditablePagedAdapter1.UpdateRecords((WebContext.AdapterRequest as IActionRequest));

  VarArrayUnlock(FSessionVariant);

  Session.Values[''''DeleteList'''']:=FSessionVariant;

end;

 

你 可 以 在 範 例 程 式 中 發 現 我 將 Goto , Prev , NextPage 三 個 Action 的 BeforeExecute 事 件 都 指 向 了 這 個 事 件 , 這 是 為 了 讓 使 用 者 操 作 方 便 , 不 需 要 再 按 另 一 個 按 紐 來 更 新 所 選 擇 的 檔 案 。 

procedure TMySessionPagedAdapter.AdaptDeleteFileExecute(Sender: TObject;

 Params: TStrings);

 var

  I:Integer;

begin

  FSessionVariant:=Session.Values[''''DeleteList''''];

  FDeleteArray:=VarArrayLock(FSessionVariant);

  OrpEditablePagedAdapter1.UpdateRecords((WebContext.AdapterRequest as IActionRequest));

  for I:=0 to FDeleteAr

上一页  [1] [2] [3] [4]  下一页


[聊天工具]Gmail推出新功能:Web Clip__天极Yesky  [聊天工具]Web MSN你玩了吗__天极Yesky
[系统软件]Web Browser Express 概述  [系统软件]对Internet Explorer Web 控件做一点修改
[常用软件]小技巧:三步实现Web迅雷录制PPLive节目  [常用软件]天网防火墙:打开WEB和FTP服务
[VB.NET程序]使用VB.Net做一个配置web.config功能的WinForm(原…  [VB.NET程序]vb.net控件、web service简述
[VB.NET程序]使用vbscript脚本调用web服务  [VB.NET程序]*** Web 存储系统窗体:窗体注册表 (new)***
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台