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

Web Application 開 發 利 器 - WebSnap(七)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:2338 更新时间:2009/4/23 18:40:09
begin

   Inc(FIndex);

   EOF:=not (FIndex < FStrings.Count);

end;

procedure TMyPageAdapter.PagedAdapter1GetRecordCount(Sender: TObject;

         var Count: Integer);

begin

   Count:=FStrings.Count;

end;

procedure TMyPageAdapter.PagedAdapter1GetRecordIndex(Sender: TObject;

         var Index: Integer);

begin

   Index:=FIndex;

end;

procedure TMyPageAdapter.AdaptFileNameGetValue(Sender: TObject;

         var Value: Variant);

begin

   Value:=FStrings.Names[FIndex];

end;

procedure TMyPageAdapter.AdaptSizeGetValue(Sender: TObject;

         var Value: Variant);

begin

   Value:=FStrings.Values[FStrings.Names[FIndex]];

end;

      

接 著 我 們 還 要 設 定 每 一 頁 中 所 顯 示 的 資 料 筆 數 :

 

 

最 後 開 啟 Visual Page Designer 加 入 AdapterForm 、 AdapterGrid 、 AdapterCommandGroup 並 設 定 Adapter 特 性 值 及 AdapterAction 後 , 你 就 可 以 看 到 如 下 的 畫 面 :

 

 

在 我 的 電 腦 上 這 個 程 式 執 行 結 果 如 下 :

 

 

你 可 以 使 用 畫 面 下 方 的 Page Link 來 切 換 頁 次 , 或 是 利 用 Prev 、 Next 來 做 上 下 頁 的 切 換 , 接 著 讓 我 們 加 強 這 個 網 頁 成 為 一 個 具 有 完 整 功 能 的 檔 案 總 管 , 要 讓 網 頁 具 有 UploadFile 的 能 力 的 話 , 我 們 必 須 新 增 一 個 新 的 TAdapter , 並 在 裡 面 新 增 一 個 TAdapterFileField:

 

 

接 著 還 要 新 增 一 個 AdapterAction , 用 來 執 行 Upload File 的 動 作 :

 

 

然 後 我 們 得 撰 寫 AdapterFileField 的 OnFileUpload 事 件 , 儲 存 使 用 者 所 上 傳 的 檔 案 :

 

procedure TMyPageAdapter.AdaptUploadUploadFiles(Sender: TObject;

  Files: TUpdateFileList);

var

  I:Integer;

  fs:TFileStream;

begin

  for I:=0 to Files.Count-1 do

   begin

     fs:=TFileStream.Create(AppPath+''''\''''+ExtractFileName(Files.Files[I].FileName),fmCreate);

     fs.CopyFrom(Files.Files[I].Stream,Files.Files[I].Stream.Size);

     fs.Free;

   end;

end;

 

要 觸 發 這 個 事 件 , 我 們 必 須 在 AdapterAction.OnExecute 事 件 中 加 入 下 面 的 程 式 碼 :

 

 

procedure TMyPageAdapter.AdaptUploadFileExecute(Sender: TObject;

  Params: TStrings);

begin

  Adapter1.UpdateRecords(WebContext.AdapterRequest as IActionRequest);

end;

 

 

這 一 段 程 式 碼 的 意 思 是 更 新 TAdapter 中 的 所 有 AdapterField 資 料 , 在 這 個 程 式 中 就 是 觸 發 OnUploadFile 這 個 事 件 。 最 後 我 們 只 需 要 在 Visual Page Designer 加 入 相 關 的 元 件 就 可 以 了 : 

 

執 行 程 式 後 你 就 可 以 上 傳 檔 案 到 這 個 網 站 上 了 , 範 例 程 式 預 設 是 C:\Temp , 你 可 以 整 合 使 用 者 管 理 功 能 來 設 定 上 傳 的 位 置 。 不 過 這 個 程 式 有 個 缺 點 , 你 會 發 現 上 傳 檔 案 後 在 網 頁 的 檔 案 列 表 中 找 不 到 你 上 傳 的 檔 案 名 稱 , 這 發 生 在 你 上 傳 的 檔 案 名 稱 經 過 排 序 後 顯 示 的 位 置 是 在 你 目 前 的 頁 次 中 , 會 這 樣 的 原 因 是 我 們 將 取 得 檔 案 列 表 的 程 式 寫 在 Module.OnActivate 之 中 , 這 跟 AdapterAction 執 行 的 順 序 有 關 , 請 看 下 面 的 流 程 :  

( 圖 :8)

 

 

從 流 程 中 我 們 可 以 發 現 , OnActivate 是 在 OnExecute 之 前 觸 發 , 這 會 發 生 在 我 們 執 行 Action 之 後 所 導 向 的 網 頁 與 Action 所 在 網 頁 相 同 的 情 況 下 , 因 此 我 們 必 須 改 變 取 得 File List 程 式 碼 的 位 置 , 理 想 的 位 置 是 在 Module 的 BeforeDispatchPage 事 件 中 : 

procedure TMyPageAdapter.WebPageModuleBeforeDispatchPage(Sender: TObject;

  const PageName: String; var Handled: Boolean);

begin

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

end;

 

編 譯 後 執 行 你 就 可 以 看 到 正 常 的 結 果 了 , 接 下 來 我 們 要 加 入 刪 除 檔 案 的 能 力 , 我 們 有 兩 種 選 擇 , 一 是 像 PCHome 的 檔 案 總 管 一 樣 , 顯 示 一 個 checkbox 讓 使 用 者 選 擇 要 刪 除 的 檔 案 後 再 按 下 Delete File 按 紐 刪 除 被 選 擇 的 所 有 檔 案 。 另 一 種 是 在 Grid 最 後 一 列 顯 示 一 個 按 紐 讓 使 用 者 按 下 後 刪 除 該 列 的 那 一 個 檔 案 , 第 一 種 方 法 必 須 利 用 Session 來 儲 存 使 用 者 所 選 擇 的 檔 案 , 接 著 必 須 撰 寫 相 關 的 元 件 , 由 於 這 牽 扯 到 元 件 設 計 的 部 份 , 因 此 我 選 擇 等 到 Inside WebSnap 一 文 中 再 討 論 這 方 面 的 技 術 , 這 裡 我 們 就 先 選 擇 第 二 種 方 式 , 請 在 TPagedAdapter 中 新 增 一 個 TAdapterAction:  AdaptDeleteFile 。 

 

我 們 要 為 她 撰 寫 兩 個 事 件 :OnGetParams 與 OnExecute: 

procedure TMyPageAdapter.AdaptDeleteFileExecute(Sender: TObject;

  Params: TStrings);

var

  FileName:string;

begin

  FileName:=Params.Values[''''FileName''''];

  DeleteFile(AppPath+''''\''''+FileName);

end;

 

procedure TMyPageAdapter.AdaptDeleteFileGetParams(Sender: TObject;

             Params: TStrings);

begin

  Params.Add(''''FileName=''''+AdaptFileName.Value);

end;

 

OnGetParams 會 在 網 頁 顯 示 前 被 觸 發 , 因 此 我 們 利 用 她 的 Params 參 數 來 加 入 檔 案 名 稱 , 這 樣 當 Action 被 觸 發 時 這 個 參 數 就 會 傳 到 我 們 的 OnExecute 事 件 中 , 我 們 就 可 以 利 用 這 個 參 數 值 來 刪 除 該 檔 案 , 要 完 全 了 解 這 部 份 的 動 作 我 們 要 觀 察 網 頁 中 的 程 式 碼 : 

<input type="submit" value="DeleteFile" onclick="AdapterForm1.

  __act.value=''''FileName.13.inventory.rtf__p.13.MyPageAdapter__id.38.MyPageAdapter.PagedAdapter1.DeleteFile''''">

 

 

你 可 以 看 到 紅 色 字 的 部 份 , 這 就 是 我 們 在 OnGetParams 所 填 入 的 參 數 值 , 當 使 用 者 按 下 按 紐 後 TAdapterDispatcher 會 取 出 這 個 參 數 值 並 送 到 我 們 的 OnExecute 事 件 中 。 完 成 設 計 網 頁 的 動 作 後 這 個 程 式 就 算 完 成 了 , 你 已 經 擁 有 一 個 簡 單 的 檔 案 總 管 了 , 接 下 來 你 可 以 結 合 使 用 者 管 理 與 其 它 一 些 控 制 之 後 , 就 可 以 達 到 類 似 PCHome 個 人 網 頁 的 能 力 了 , 這 些 就 當 成 是 你 的 練 習 題 了 。

  

7-3 TOrpEditablePagedAdapter

 

原 本 我 一 直 避 免 在 這 篇 文 章 中 論 及 元 件 設 計 , 可 是 我 後 來 想 想 , 這 個 範 例 對 你 來 說 可 能 是 蠻 有 用 的 , 但 是 我 不 打 算 在 這 篇 文 章 中 解 釋 元 件 設 計 , 因 為 那 得 用 一 篇 文 章 才 能 交 代 各 個 Interface 間 的 互 動 及 協 調 , 但 我 又 很 想 將 這 個 範 例 與 你 分 享 , 所 以 我 下 了 個 決 定 , 我 將 元 件 給 你 , 但 原 始 碼 等 到 Inside WebSnap 時 再 詳 細 的 解 釋 ! 還 記 得 我 們 上 一 節 的 範 例 嗎 ? 基 本 上 看 起 來 是 很 不 錯 , 但 是 我 們 必 須 承 認 , 她 還 不 是 很 實 用 , 也 不 足以 啟 發 你 其 它 的 聯 想 , 所 以 我 完 成 了 這 個 範 例 , 要 編 譯 這 個 範 例 , 你 必 須 要 先 安 裝 Orpdemo.bpl 這 個 Package , 裡 面 有 一 個 TOrpEditablePagedAdapter 元 件 , 她 是 基 於 TPagedAdapter 再 加 入 可 編 修 資 料 的 能 力 , 我 們 利 用 她 來 完 成 我 們 上 一 節 中 未 完 成 的 範 例 , 這 個 檔 案 總 管 可 以 讓 使 用 者 先 挑 選 要 刪 除 的 資 料 , 之 後 按 下 刪 除 的 按 紐 後 刪 除 資 料 , 這 不 只 可 以 用 在 刪 除 檔 案 , 你 也 可 以 利 用 她 來 將 使 用 者 選 擇 的 檔 案 壓 縮 後 讓 使 用 者 下 載 , 亦 或 是 購 物 車 , 或 者 更 多 地 方 ! 這 也 是 我 為 何 會 破 例 在 這 篇 文 章 中 展 示 她 的 原 因 , 含 意 太 深 了 , 讓 我 不 能 忽 視 ! 完 整 的 範 例 程 示 在 uMySessionPagedAdapter Unit 中 , 我 只 挑 出 幾 個 部 份 來 解 釋 , 請 你 對 照 著 看 , 首 先 我 們 使 用 TOrpEditablePagedAdapter 來 取 代 TPagedAdapter 列 示 檔 案 的 程 式 碼 與 上 節 的 範 例 相 同 , 我 們 先 解 釋 處 理 Session 的 部 份 : 

上一页  [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……
    咸宁网络警察报警平台