Web Application 開 發 利 器 - WebSnap(十一)

水下探测小白必看:单波束vs多波束声呐,5分钟搞懂核心区别 本文为水下探测新手清晰解析了单波束与多波束声呐的核心区别。单波束声呐如同精准的“手电筒”,进行逐点扫描,适用于定点测深和目标探测;而多波束声呐则像“聚光灯”,能一次性覆盖一个扇区,高效获取海底地形三维信息,是海底测绘和水下三维建模的理想选择。文章通过生动的比喻和对比表格,帮助读者快速理解两者原理、效率差异及适用场景。 阅读详情

Web Application 開 發 利 器 - WebSnap!

第 十 一 章 、 ImageButtonProducer 應 用

 

   在 WebSnap 的 範 例 中 , 有 幾 個 元 件 對 我 們 來 說 相 當 有 用 , 其 中 一 個 就 是 ImageButtonProducer , 她 可 以 讓 我 們 以 圖 形 按 紐 的 方 式 來 取 代 呆 板 的 預 設 按 紐 , 這 可 是 會 使 你 的 網 頁 看 起 來 更 有 價 值 多 了 , 當 然 ! 我 們 得 拿 些 許 的 效 率 去 換 , 要 使 用 她 之 前 , 我 們 得 先 把 她 裝 起 來 才 行 , 請 你 開 啟 以 下 這 個 Package:

 Borland/Delphi6/Demos/WebSnap/ImgBtnProducer/DclImgBtnProducer 

 

接 著 你 會 看 到 以 下 的 視 窗 :

 

 

最 後 按 下 Install 按 紐 就 可 以 安 裝 這 個 元 件 了 , 完 成 後 你 應 該 可 以 在 Component Palette 最 末 頁 裡 看 到 這 個 元 件 :

 

 

使 用 她 的 方 式 很 簡 單 , 請 開 啟 一 個 新 的 專 案 ( 由 這 一 章 開 始 , 我 們 將 使 用 另 一 個 範 例 程 式 ):

 

 

請 你 選 擇 AdapterPageProducer , 這 可 以 讓 我 們 很 方 便 的 製 作 出 圖 形 導 覽 按 紐 列 , 接 著 請 你 將 Template 選 項 改 成 Blank , 因 為 我 們 不 想 使 用 原 來 的 制 式 範 本 ( 她 很 醜 ...):

 

 

這 次 我 們 所 建 立 是 一 個 完 整 的 網 頁 , 當 然 我 們 得 加 入 所 有 網 頁 該 有 的 功 能 , 請 你 將 Components 內 所 有 的 元 件 都 勾 選 起 來 :

 

 

整 個 Application Page Module 看 起 來 就 像 下 圖 一 樣 :

 

 

接 著 我 們 搭 個 便 車 , 使 用 ApplicationAdapter 來 存 放 一 些 元 件 , 首 先 我 們 加 入 一 個 可 以 回 到 首 頁 的 Action:

 

 

接 著 在 Action.OnExecute 事 件 中 加 入 以 下 的 程 式 碼 :

 

 uses WebReq, WebCntxt, WebFact, Variants,SiteComp;

… … … … … … … …

… … … … … … …

procedure THome.atHomeExecute(Sender: TObject; Params: TStrings);

begin

  DispatchPageName('Home',Response,[dpPublished]);

end;

 

認 真 的 你 應 該 會 問 , 我 們 不 是 可 以 在 Visual Page Designer 中 以 設 定 PageName 的 方 式 來 導 向 嗎 ? 這 樣 就 不 用 寫 程 式 了 不 是 嗎 ? 呵 , 請 想 想 ! 如 果 我 們 有 10 個 網 頁 , 這 10 個 網 頁 中 都 需 要 這 個 按 紐 , 那 你 得 設 幾 次 呢 ? 寫 在 這 裡 只 需 設 一 次 就 可 以 了 , 很 方 便 ! 回 到 程 式 中 , 我 們 開 啟 Visual Page Designer 來 設 計 一 下 我 們 的 首 頁 , 目 前 我 們 的 目 的 只 是 要 加 入 一 個 導 覽 列 , 這 可 以 利 用 FieldGroup+CommandGroup 來 達 成 :  

 

哦 ! 我 們 要 一 個 空 的 網 頁 , 不 要 這 個 Title Field , 請 將 AddDefaultFields 特 性 值 設 成 False , 讓 她 還 給 我 們 一 個 乾 淨 的 網 頁 , 接 著 請 在 AdapterForm1 中 再 加 入 一 個 AdapterCommandGroup 元 件 :

 

 

然 後 將 她 的 DisplayComponent 特 性 設 為 AdapterFieldGroup1 。

 

 

很 好 ! 那 個 呆 板 又 難 看 的 按 紐 出 現 了 :

 

 

嘿 ! 我 們 可 不 想 要 這 個 , 請 你 回 到 Page Module 中 , 將 ImageButtonProducer 元 件 放 入 Page Module 中 , 接 著 回 到 Visual Page Designer 在 AdapterCommandGroup1 右 方 按 右 鍵 , 將 我 們 的 Home Action 加 進 去 :  

 

然 後 我 們 將 CmdHomeAction 的 ImageProducer 特 性 設 為 ImageButtonProducer1 就 完 成 了 。

 

 

 

當 然 我 們 不 可 能 這 樣 就 滿 足 了 , 首 先 她 的 顏 色 還 是 有 點 醜 , 我 們 可 以 調 整 ImageButtonProducer 中 的 特 性 值 來 美 化 她 :  

 

嗯 ! 看 起 來 專 業 多 了 , 執 行 這 個 程 式 用 瀏 覽 器 來 看 看 吧 。

 

 

圖 形 並 沒 有 正 常 顯 示 ? 我 們 看 看 圖 形 的 連 接 出 了 什 麼 問 題 , 在 圖 形 上 按 右 鍵 選 擇 內 容 :

 

 

原 來 多 了 個 / , 看 來 是 ImageButtonProducer 元 件 的 問 題 , 我 們 回 到 DELPHI 中 , 重 新 調 整 一 下 ImageButtonProducer 的 特 性 值 , 首 先 我 們 必 須 在 這 個 專 案 的 目 錄 下 建 立 一 個 Images 目 錄 , 這 是 用 來 讓 ImageButtonProducer 元 件 產 生 圖 形 暫 存 檔 用 , 接 著 設 定 ImageButtonProducer.CacheDir 特 性 值 為 Images , 同 時 調 整 她 的 VirtualDir 特 性 值 為 Images 。

 

 

由 於 我 們 是 使 用 WebAppDebuger 模 式 , 因 此 我 們 還 必 須 調 整 她 的 Search Path 設 定 , 加 入 我 們 新 建 的 Images 目 錄 , 這 樣 她 才 能 正 確 的 找 到 圖 形 : 

 

重 新 執 行 程 式 後 , 你 應 該 可 以 正 常 的 看 到 圖 形 按 紐 了 。  

嘿 ! 不 只 是 漂 漂 亮 亮 的 圖 形 按 紐 , 還 有 ToolTip 顯 示 哦 , 雖 然 如 此 ! 整 體 看 起 來 還 是 單 調 了 些 , 我 們 加 上 個 Title Image 好 了 , 這 樣 看 起 來 較 美 觀 些 , 我 們 開 啟 ApplicationAdapter 的 Fields Designer 視 窗 , 加 入 一 個 AdapterImageField:  

 

接 著 設 定 她 的 HREF 特 性 值 為 要 顯 示 的 圖 形 URL 。

 

 

最 後 開 啟 Visual Page Designer , 新 增 這 個 Field 到 AdapterFieldGroup1 中 。

 

 

預 設 會 出 現 編 輯 的 畫 面 , 我 們 將 她 的 ViewModule 設 定 為 vmDisplay 。  

 

是 不 是 覺 得 TitleImage 這 段 字 很 礙 眼 ? 請 你 在 她 的 Caption 特 性 值 中 填 入 一 個 空 白 來 取 代 原 先 的 TitleImage 字 串 ( 目 前 一 定 要 有 一 個 字 元 才 行 ) 。  

 

在 Designer 模 式 下 , 我 們 看 不 到 實 際 的 圖 形 顯 示 , 這 是 因 為 Designer 時 所 使 用 的 路 徑 是 絕 對 路 徑 , 而 我 們 所 設 的 是 URL 的 關 係 , 請 你 執 行 程 式 後 以 IE 來 瀏 覽 。  

 

看 起 來 還 算 不 錯 , 至 少 以 一 個 只 寫 幾 行 程 式 的 Web Application 來 說 算 很 好 了 , 接 下 來 我 們 要 加 上 一 些 資 料 庫 的 功 能 , 首 先 請 你 新 增 一 個 WebDataModule 到 這 個 專 案 中 , 我 們 需 要 一 個 Table: BCDEMOS 中 的 Orders 資 料 表 。

 

 

使 用 BDE 開 發 Web Application 時 需 注 意 一 件 事 , 那 就 是 一 定 得 使 用 Session , 而 且 要 把 AutoSessionName 設 為 True , 否 則 無 法 適 用 於 Web 多 使 用 者 的 情 況 , 接 著 我 們 要 加 入 一 個 TQuery , 這 個 Query 的 作 用 是 取 出 Orders 中 的 所 有 Paymethod 欄 位 , 並 以 她 作 Group 後 取 出 Paymethod 列 表 , 我 們 會 在 下 面 用 到 她 。

 

 

然 後 我 們 加 入 DataSetAdapter 元 件 , 連 結 到 我 們 的 Orders Table 。

 

 

接 下 來 我 們 還 得 新 增 一 個 Page Module , 這 是 用 來 顯 示 一 個 Orders 列 表 的 網 頁 , 我 們 希 望 可 以 讓 使 用 者 選 擇 一 個 PayMethod 後 , 導 向 另 一 個 網 頁 , 在 那 個 網 頁 中 列 出 所 有 符 合 該 PayMethod 的 資 料 , 因 此 我 們 必 須 加 入 一 個 TAdapter 到 這 個 新 增 的 Page Module 中 , 同 時 我 們 也 得 加 入 一 個 DataSetValueList 元 件 , 這 是 用 來 顯 示 經 過 Group 命 令 後 的 Query 。 

 

然 後 我 們 分 別 設 定 dsvlPayMethodList 的 DataSet 為 qyPayMethodList 。 ( 你 必 須 先 uses dmData 這 個 單 元 ) 

 

請 開 啟 Adapter1 的 Fields Designer , 加 入 一 個 AdapterField 。 

 

再 開 啟 Adapter1 的 Action Designer , 加 入 一 個 AdapterAction 。

 

 

當 使 用 者 執 行 這 個 Action 時 , 我 們 要 將 他 導 向 於 一 個 以 PayMethod 過 濾 資 料 的 網 頁 , 因 此 我 們 必 須 撰 寫 她 的 OnExecute 事 件 :

 

procedure TGrid.AdaptGoFilterExecute(Sender: TObject; Params: TStrings);

var

  AParams:TStringList;

begin

  AParams:=TStringList.Create;

  AParams.Add('FilterValue='+AdaptSelectFilter.ActionValue.Values[0]);

  RedirectToPageName('FilterGrid',AParams,Response,[dpPublished]);

end;

 

FilterGrid 是 我 們 用 來 顯 示 過 濾 結 果 的 網 頁 名 稱 , 稍 後 我 們 再 製 作 這 個 網 頁 , 現 在 讓 我 們 先 設 計 一 下 這 個 Grid 顯 示 方 式 , 首 先 我 們 加 入 CSS 程 式 碼 , 這 可 以 讓 我 們 訂 制 我 們 的 Grid 樣 式 :

 

 .GridTable

{

    WIDTH: 100%;

    BACKGROUND-COLOR: #8BAADC;

    BORDER: 1px SOLID #003388;

}

 

.GridHeader

{

    FONT-WEIGHT: normal;

    FONT-SIZE: 9pt;

    COLOR: #FFFFFF;

    BACKGROUND-COLOR: #60A7DB;

    FONT-FAMILY: Arial, Helvetica, SansSerif;

    TEXT-DECORATION: none;

}

 

.GridRow140

{

    FONT-FAMILY: Arial, Helvetica, SansSerif;

    FONT-WEIGHT: normal;

    FONT-SIZE: 9pt;

    COLOR: #003388;

    BACKGROUND-COLOR: #D6DBB9;

    WIDTH=150;

}

 

.GridRow

{

    FONT-FAMILY: Arial, Helvetica, SansSerif;

    FONT-WEIGHT: normal;

    FONT-SIZE: 9pt;

    WIDTH: 100%;

    COLOR: #003388;

    BACKGROUND-COLOR: #D6DBB9;

}

 

.GridRowFixed

{

    FONT-FAMILY: Arial, Helvetica, SansSerif;

    FONT-WEIGHT: normal;

    FONT-SIZE: 9pt;

    WIDTH: 100%;

    COLOR: #FFFFFF;

    BACKGROUND-COLOR: #003366;

}

 

 

完 成 後 請 開 啟 Visual Page Designer , 並 在 裡 面 加 入 三 個 AdapterForm 。

 

 

首 先 我 們 先 設 定 網 頁 標 題 的 圖 形 與 導 覽 列 , 我 們 必 須 使 用 到 Home Module 中 的 ApplicationAdapter 元 件 , 所 以 記 得 要 uses 她 , 完 成 後 在 AdapterForm1 上 按 右 鍵 加 入 一 個 AdapterFieldGroup 及 一 個 AdapterCommandGroup , 設 定 AdapterCommandGroup.DisplayComponent 為 AdapterFieldGroup , 接 著 設 定 AdapterFieldGroup 的 Adapter 為 Home.ApplicationAdapter , 其 它 的 設 定 就 按 照 我 們 設 定 首 頁 的 方 法 設 定 即 可 :

 

 

完 成 後 我 們 繼 續 設 定 AdapterForm3 , 請 加 入 一 個 AdapterLayout , 並 設 定 她 的 DisplayColumns 為 2 , 這 可 以 讓 我 們 以 一 列 的 方 式 顯 示 選 擇 PayMethod ComboBox 及 確 定 的 按 紐 , 接 著 在 她 上 面 按 右 鍵 選 擇 新 增 一 個 AdapterFieldGroup 與 一 個 AdapterCommandGroup , 並 將 AdapterCommandGroup2.DisplayComponent 設 為 AdapterFieldGroup2:  

 

然 後 將 AdapterFieldGroup2 的 Adapter 特 性 設 為 Adapter1 。

 

 

接 著 在 AdapterForm2 中 加 入 一 個 AdapterGrid , 並 將 她 的 Adapter 設 為 dmData.dsaOrders , 我 們 只 需 要 一 些 簡 要 的 欄 位 , 因 此 請 在 AdapterGrid 上 按 右 鍵 , 選 擇 Add Columns , 並 照 下 圖 選 取 需 要 的 欄 位 : 

 

完 成 後 我 們 要 設 定 AdapterGrid 的 HeaderAttributes,RowAttributes,TableAttributes 中 的 StyleRule 特 性 , 來 改 變 Grid 的 顯 示 樣 式 。

 

 

沒 問 題 的 話 , 你 應 該 可 以 看 到 以 下 的 畫 面 :

 

 

這 個 Grid 目 前 是 顯 示 全 部 的 資 料 , 我 們 可 以 藉 由 設 定 dsaOrders 中 的 PageSize 來 限 制 一 頁 中 最 多 可 顯 示 的 資 料 筆 數 , 我 將 它 定 為 25 筆 :

 

 

我 們 還 得 提 供 讓 使 用 者 可 以 切 換 頁 次 的 Action , 請 回 到 Grid Module 中 , 開 啟 Visual Page Designer 後 在 AdapterForm2 中 加 入 一 個 AdapterCommandGroup , 將 AdapterCommandGroup.DisplayComponent 設 為 AdapterGrid1 。

 

 

設 定 好 後 在 AdapterCommandGroup3 上 按 右 鍵 選 擇 Add Commands , 加 入 PrevPage,GotoPage,NextPage 這 三 個 Action 。

 

 

設 定 PrevPage 的 Caption 為 上 一 頁 , NextPage 的 Caption 為 下 一 頁 , 這 樣 就 完 成 了 這 個 網 頁 的 設 計 了 , 接 著 再 完 成 FilterGrid 網 頁 就 可 以 完 成 整 個 程 式 了 , 請 新 增 一 個 Page Module , 在 裡 面 放 入 一 個 TAdapter , 並 在 裡 面 加 入 一 個 Action:

 

 

接 著 請 開 啟 Visual Page Designer 加 入 兩 個 AdapterForm , 第 一 個 就 照 我 們 之 前 所 做 的 , 設 定 標 題 圖 形 及 導 覽 列 , 第 二 個 就 是 顯 示 一 個 與 Grid Module 中 一 樣 的 Grid , 記 得 將 Grid Module 中 的 Styles 特 性 值 複 製 到 這 個 Module 中 的 AdapterPageProducer.Styles 中 , 同 樣 的 我 們 也 加 入 NextPage,GotoPage,PrevPage 到 這 個 網 頁 中 , 整 個 網 頁 看 起 來 就 像 下 圖 :

 

 

接 著 將 Module.DefaultAction.Adapter 及 Module.DefaultAction.Action 分 別 設 為 Adapter1 及 DefaultFilterAction 。

 

 

並 撰 寫 以 下 的 事 件 :

 

procedure TFilterGrid.AdaptDefaultExecute(Sender: TObject;

  Params: TStrings);

var

  FFilter:string;

begin

  FFilter:=Params.Values['FilterValue'];

  dmData.dsaOrders.DataSet.Filter:='PaymentMethod='''+FFilter+'''';

  dmData.dsaOrders.DataSet.Filtered:=True;

  dmData.dsaOrders.DataSet.Open;

end;

 

procedure TFilterGrid.WebPageModuleDeactivate(Sender: TObject);

begin

  dmData.dsaOrders.DataSet.Filtered:=False;

  dmData.dsaOrders.DataSet.Filter:='';

end;

 

 

首 先 我 們 先 解 釋 AdaptDefaultExecute , 這 是 DefaultAction 的 OnExecute 事 件 , 我 們 在 這 裡 取 出 Grid 網 頁 所 傳 遞 過 來 的 參 數 , 利 用 這 個 參 數 來 過 濾 資 料 , 當 這 個 Module 被 Deactivate 時 , 我 們 再 把 Filter 取 消 , 這 樣 Grid 網 頁 才 能 夠 顯 示 所 有 的 資 料 , 這 就 是 DefaultAction 的 用 法 之 一 , 當 然 你 也 可 以 選 擇 使 用 OnBeforeDispatchPage 或 是 OnActivate , 但 這 兩 個 事 件 都 有 缺 點 , OnBeforeDispatchPage 會 在 每 次 網 頁 輸 出 前 觸 發 , 也 就 是 說 當 你 使 用 切 換 頁 功 能 時 , Filter 會 再 觸 發 一 次 , OnActivate 更 多 , 因 此 在 這 個 case 中 , DefaultAction 是 最 佳 的 處 理 位 置 , 因 為 她 只 觸 發 一 次 。 

 

本 章 後 記

 

  這 一 章 中 我 們 大 幅 度 的 使 用 ImageButtonProducer , 並 利 用 DefaultAction 來 達 到 Filter 功 能 , 下 面 的 章 節 我 們 將 持 續 加 強 這 個 程 式 , 這 一 章 是 複 習 章 , 我 儘 量 詳 細 的 解 釋 每 一 個 動 作 , 希 望 你 已 經 熟 悉 了 AdapterPageProducer 及 Adapter , 和 Visual Page Designer 的 設 計 方 式 。 另 外 有 件 事 要 提 醒 你 , WebAppDebuger 是 一 個 僅 供 我 們 Debuger 用 的 HTTP Server , 意 思 是 說 這 個 程 式 功 能 相 當 簡 單 , 在 某 些 運 作 上 常 會 造 成 不 正 常 的 結 果 , 像 本 章 的 範 例 就 常 因 為 她 的 運 作 不 正 常 , 而 產 生 當 機 等 情 形 , 這 些 問 題 在 你 轉 換 為 ISAPI/CGI 之 後 就 不 會 出 現 了 。 事 實 上 , 你 可 以 選 擇 其 它 功 能 完 整 的 HTTP Server , OmniHTTP 是 一 個 不 錯 的 選 擇 。

 

<第 十 二 章 、 DateTime 欄 位 的 拆 解 與 LookupField 、 Postback 技 術>

Codex,Copilot 是什么 GitHub Copilot是什么 **GitHub Copilot** 是一款由 **GitHub** 和 **OpenAI** 合作开发的 **AI 代码辅助工具**,它基于 **OpenAI Codex 技术**,能够根据上下文自动生成代码建议,大幅提升编程效率 阅读详情

相关推荐

解决MATLAB2020B关于找不到vs2019C++编译器问题

解决MATLAB2020B关于找不到vs2019C++编译器问题

wcm2577的博客 7605

Web Application 開 發 利 器 - WebSnap(十一) (转)

Web Application 開 發 利 器 - WebSnap(十一) (转)[@more@]web Application 開 發 利 器 - WebSnap! 第 十 一 章 、 ImageButtonProducer...

csd3176的博客 158

Linux系统搭建OpenClaw(原Clawdbot)全流程指南 最新版

工具定位:开源个人 AI 助手,支持文件读取、命令执行、多渠道交互(Telegram / 本地终端等);系统要求:主流 Linux 发行版(Ubuntu/Debian/CentOS 等),Node.js ≥22(核心依赖);安全提示:OpenClaw 为测试版,具备高权限操作能力,建议使用非主力机,配置权限白名单,避免接触敏感数据。

AI时代老码农的第二春 6559

Web Application 開 發 利 器 - WebSnap(一)

 Web Application 開 發 利 器 - WebSnap!Written by Code64212001/9/28  更 新 記 事 ( 本 篇 文 章 使 用 DELPHI 6.01 為 藍 本, 請 更 新 你 的 DELPHI 至 6.01 版!) 第 零 章 、 前 言 WebSnap 是 DELPHI 6 最 新 的 Web Applicati

幽人空山,过雨采蘋 2812

树莓派通过TTL3.3转485 Modbus采集水表

所需道具 树莓派0,我用的是树莓派zero wh; 具有光电直读功能的有线水表,我用的是咸鱼淘的埃美柯LXSY-20E1; TTL3.3 转 485模块,带隔离的贵些; 5V转12V升压模块。 原理 树莓派有UART(GPIO14 Tx 和 GPIO15 Rx)串口通讯功能,电器特性是3.3V TTL,直读远传水表支持M-Bus/485通讯接口,我买的光电直读水表485要求12V供电(根据仪表厂家说明书)。TTL和485虽然都是串口通讯,但电器特性不一样,不能直接接!我已经烧掉一个树莓派...

xhydongda的博客 3441

GB28181协议实战:5分钟搞定海康摄像头SIP注册失败问题(附Wireshark抓包分析)

本文详细解析了海康摄像头在GB28181协议下SIP注册失败的7个关键原因及解决方案,包括网络可达性、鉴权参数、NAT穿越等核心问题。通过Wireshark抓包分析,提供快速定位方法,帮助工程师高效解决SIP注册失败问题,提升实时图像联调效率。

weixin_29212867的博客 551

Web Application 開 發 利 器 - WebSnap(十二)

Web Application 開 發 利 器 - WebSnap!第 十 二 章 、 DateTime 欄 位 的 拆 解 與 LookupField 、 Postback 技 術   在 撰 寫 資 料 庫 程 式 中 , 我 們 常 常 需 要 用 到 Lookup Field , 例 如 當 使 用 者 選 取 了 某 一 個 客 戶 後 , 帶 出 該 客 戶 的 公 司 名 稱

幽人空山,过雨采蘋 1333

TIBCO Spotfire 入门指南

数据分析工具 - TIBCO Spotfire 入门指南(一) 文章目录数据分析工具 - TIBCO Spotfire 入门指南(一)前言一、Sportfire 是什么?二、使用Sportfire 创建一个简单的数据分析模型1.设置分析(加载数据)2.编辑数据源3.创建图表3.1 创建交叉表3.2 创建饼图3.3 创建树形图3.4 创建散点图3.5 创建自定义筛选器总结 前言 通过对本指南的学习,你可以了解到如何开始用TIBCO Sportfire分析数据,并能详细了解您可以做什么以及怎么做 一、Spo

kaiakai111的博客 1万+

Web Application 開 發 利 器 - WebSnap(四)

Web Application 開 發 利 器 - WebSnap!第 四 章 、 進 階 資 料 庫 網 頁 設 計    在 上 一 節 我 們 討 論 了 基 本 資 料 庫 網 頁 的 設 計 , 及 一 些 Dispatcher 的 技 巧 , 接 著 就 讓 我 們 進 一 步 設 計 一 個 Master-Detail 的 網 頁 。  4-1 Master-

幽人空山,过雨采蘋 1257

【MATLAB代码】基于水声通信(ACOMMS)下的到达时间差(TDOA)定位的AUV自主导航例程,附完整代码

水下AUV导航系统仿真研究 本研究基于到达时间差(TDOA)技术实现了水下自主航行器(AUV)的三维导航仿真系统。系统采用四个声学信标作为定位基准,通过TDOA测量数据迭代求解AUV位置。仿真结果表明: 导航性能:系统能够有效跟踪AUV从起点(30,30,-20)到目标点(70,70,-20)的航行轨迹,定位误差保持在合理范围内。 误差分析:定位误差变化曲线显示系统具有稳定的定位精度,平均误差为0.5米左右。 技术特点:采用两步最小二乘迭代算法求解非线性TDOA方程,提高了定位精度和计算效率。 该仿真系统为

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 320

逆强化学习:从专家示范中学习策略

逆强化学习(Inverse Reinforcement Learning,简称IRL)是强化学习(Reinforcement Learning,简称RL)的一个子领域,它的目标是从专家的行为中学习策略。在传统的强化学习中,智能体通过与环境交互,根据奖励信号来学习一个策略。而在逆强化学习中,我们没有直接的奖励信号,而是通过观察专家的行为来推断出奖励函数,从而学习到一个与专家类似的策略。逆强化学习作为强化学习的一个重要子领域,在许多实际应用场景中都取得了显著的成功。

AI天才研究院 1449

Web Application 開 發 利 器 - WebSnap(十三)

Web Application 開 發 利 器 - WebSnap!第 十 三 章 、 Adapter 與 Wrapper   我 們 在 前 面 幾 節 都 稍 稍 的 提 到 Adapter 及 Wrapper 之 間 的 關 係 , 我 們 都 知 道 , WebSnap 利 用 Adapters 加 上 Wrapper 來 串 接 Code 與 Script , 但 是 我 們 一

幽人空山,过雨采蘋 1115

ParaView: GUI 轴网格

ParaView: GUI 轴网格

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1923

Web Application 開 發 利 器 - WebSnap(三)

Web Application 開 發 利 器 - WebSnap!第 參 章 、 WebSnap 與 資 料 庫  3-1 基 本 概 念   WebSnap 對 於 資 料 庫 的 支 援 能 力 比 之 前 的 WebBroker+InternetExpress 增 強 了 很 多 , 所 以 使 用 WebSnap 來 開 發 資 料 庫 網 頁 程 式 , 可 以

幽人空山,过雨采蘋 1620

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Web Application 開 發 利 器 - WebSnap(附录A)

Web Application 開 發 利 器 - WebSnap!附錄A、 一些小技巧  這一節是一些小技巧的討論,當我們在開發WebSnap 程式時如果碰上了程式工作不正常,而你又無法由原始碼中看出端倪,這時我們可以使用WebAppDebuger 中的Log 資訊來查看Client 與 Server 之間傳遞的資料,這在許多情況下相當有用:  在你要查看的那一列雙按滑鼠就可以開

幽人空山,过雨采蘋 1093

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Web Application 開 發 利 器 - WebSnap(五)

Web Application 開 發 利 器 - WebSnap!第 五 章 、 使 用 者 管 理 及 Sessions   在 以 往 的 WebBroker+InternetExpress 架 構 下 , 我 們 處 理 使 用 者 控 制 或 是 Session 管 理 都 很 麻 煩 ,WebSnap 加 強 了 這 部 份 的 能 力 , 利 用 WebSnap 來 處 理

幽人空山,过雨采蘋 1243

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Web Application 開 發 利 器 - WebSnap(九)

Web Application 開 發 利 器 - WebSnap!第 玖 章 、 圖 形 及 超 連 結   9-1 簡 單 的 圖 形 顯 示   在 之 前 的 資 料 庫 程 式 中 我 們 並 未 討 論 到 如 何 處 理 Blob 欄 位 資 料 , 這 是 因 為 我 認 為 這 件 事 很 簡 單 , WebSnap 幫 你 做 掉 了 絕 大 部 份 的 工

幽人空山,过雨采蘋 1111

Web Application 開 發 利 器 - WebSnap(六)

Web Application 開 發 利 器 - WebSnap!第 六 章 、 執 行 者 : TAdapterDispatcher 及 AdapterAction  6-1 Action 的 運 作 原 理   在 第 一 章 的 Modules 中 我 們 稍 微 討 論 了 Dispatcher 在 整 個 WebSnap 中 扮 演 著 那 一 種 角 色 , 除

幽人空山,过雨采蘋 1269

Web Application 開 發 利 器 - WebSnap(八)

Web Application 開 發 利 器 - WebSnap!第 捌 章 、 LocateFileService 元 件   LocateFileService 的 用 途 相 當 簡 單 , 當 Page Module 要 取 得 Template 時 , 她 會 先 取 得 LocateFileService 的 介 面 再 送 出 檔 案 要 求 給 她 , 這 個 檔 案

幽人空山,过雨采蘋 930

Web Application 開 發 利 器 - WebSnap(七)

Web Application 開 發 利 器 - WebSnap!第 七 章 、 深 入 Adapter   這 一 章 的 目 的 在 於 完 全 了 解 Adapter 在 WebSnap 中 所 代 表 的 意 義 及 更 深 入 的 使 用 她 們 , 之 前 我 們 利 用 了 Adapter 與 AdapterField 來 處 理 簡 單 的 資 料 顯 示 , 如 計

幽人空山,过雨采蘋 1279

Web Application 開 發 利 器 - WebSnap(十) (转)

Web Application 開 發 利 器 - WebSnap(十) (转) web Application 開 發 利 器 - WebSnap! 第 十 章 、 webservice+WebSnap 還 記 得 ...

cizn2013的博客 230

Web Application 開 發 利 器 - WebSnap(附录A) (转)

Web Application 開 發 利 器 - WebSnap(附录A) (转)web Application 開 發 利 器 - WebSnap! 附錄A、 一些小技巧 這一節是一些小技巧的討論,當我們在開發WebS...

cizn2013的博客 196

Web Application 開 發 利 器 - WebSnap(二)

Web Application 開 發 利 器 - WebSnap!第 二 章 、 第 一 個 WebSnap 程 式 2-1 、 起 步 走  前 面 談 了 許 多 理 論 , 這 一 章 我 們 就 開 始 來 撰 寫 我 們 的 第 一 個 WebSnap Application , 首 先 讓 我 們 開 啟 New Items Dialog , 接 著 切 換

幽人空山,过雨采蘋 1765

Web Application 開 發 利 器 - WebSnap(十)

Web Application 開 發 利 器 - WebSnap!第 十 章 、 WebService+WebSnap  還 記 得 我 曾 經 說 過 要 與 你 討 論 將 WebService 應 用 在 WebSnap 中 嗎 ? 相 信 你 對 如 何 做 已 經 有 概 念 了 , 這 很 簡 單 , 你 只 要 建 立 一 個 新 的 Page Module 在 裡 面

幽人空山,过雨采蘋 1260

Web Application 開 發 利 器 - WebSnap(十三) (转)

Web Application 開 發 利 器 - WebSnap(十三) (转)[@more@]web Application 開 發 利 器 - WebSnap! 第 十 三 章 、 Adapter 與 Wrapper ...

csd3176的博客 239
上一篇: Web Application 開 發 利 器 - WebSnap(十二)
下一篇: Web Application 開 發 利 器 - WebSnap(十三)
rh
rh
博客等级 码龄26年 3粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值