使用 IntraWeb (5) - 页面布局之 TFrame
IW 对 TFrame(还是之前那个), 这在页面布局中很有用.
如果多个页面都有一个共同的部分(譬如页眉、页脚、菜单、边栏等), 可以将这些共同的部分放在一个 TFrame 中, 从而方便统一与修改.
IW 也对 TMainMenu 提供了支持, 本例就做一个共享的菜单吧.
新建工程后, 添加一个 New Frame:
新建的 TIWFrame1 中, 已自动添加了一个 IWFrameRegion(TIWRegion), 先选一下 IWFrameRegion(控件要放在它上面);
然后分别添加 TIWMenu、TMainMenu(TMainMenu 要附加在 TIWMenu 使用).
之后的工作在设计时完成比较简单, 这里全部是用代码实现的.
双击 Frame 窗体写代码(因为 TFrame 没有 OnCreate 事件, 所以它使用的是 IWFrameRegion.OnCreate):
unit Unit2; interface uses
SysUtils, Classes, Controls, Forms, IWVCLBaseContainer, IWColor, IWContainer, IWRegion, Vcl.Menus,
IWVCLBaseControl, IWBaseControl, IWBaseHTMLControl, IWControl, IWCompMenu, IWHTMLContainer, IWHTML40Container; type
TIWFrame1 = class(TFrame)
IWFrameRegion: TIWRegion;
IWMenu1: TIWMenu;
MainMenu1: TMainMenu;
procedure IWFrameRegionCreate(Sender: TObject);
procedure MyOnClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; implementation {$R *.dfm} uses IWInit; //为使用 WebApplication {给子菜单准备的点击事件}
procedure TIWFrame1.MyOnClick(Sender: TObject);
begin
WebApplication.ShowMessage(TMenuItem(Sender).Caption);
end; procedure TIWFrame1.IWFrameRegionCreate(Sender: TObject);
var
mItemA, mItemB, mItem: TMenuItem;
begin
{提前设定这个 Frame 在其他容器中的位置与大小}
Align := alTop;
Height := IWMenu1.Height; {设置 IWMenu1}
IWMenu1.Align := alTop;
IWMenu1.AttachedMenu := MainMenu1; //关键代码 IWMenu1.SubMenuStyle.BGColor := clWebWHITESMOKE;
IWMenu1.SubMenuStyle.BorderColor := clWebWHITESMOKE;
IWMenu1.SubMenuStyle.ItemBGColor := clWebWHITESMOKE;
IWMenu1.SubMenuStyle.DisabledItemBGColor := clWebWHITESMOKE;
IWMenu1.SubMenuStyle.SelectedItemBGColor := clWebWHEAT; {设置 IWFrameRegion}
IWFrameRegion.ClipRegion := False; //关键代码
IWFrameRegion.Height := IWMenu1.Height; {建立菜单, 这在设计时很容易}
mItemA := MainMenu1.CreateMenuItem;
mItemA.Caption := 'Menu A';
MainMenu1.Items.Add(mItemA); mItemB := MainMenu1.CreateMenuItem;
mItemB.Caption := 'Menu B';
mItemB.OnClick := MyOnClick;
MainMenu1.Items.Add(mItemB); mItem := MainMenu1.CreateMenuItem;
mItem.Caption := 'Menu A1';
mItem.OnClick := MyOnClick;
mItemA.Add(mItem); mItem := MainMenu1.CreateMenuItem;
mItem.Caption := '-';
mItemA.Add(mItem); mItem := MainMenu1.CreateMenuItem;
mItem.Caption := 'Menu A2';
mItemA.Add(mItem); mItemA := mItem;
mItem := MainMenu1.CreateMenuItem;
mItem.Caption := 'Menu A21';
mItem.OnClick := MyOnClick;
mItemA.Add(mItem); mItem := MainMenu1.CreateMenuItem;
mItem.Caption := 'Menu A22';
mItem.OnClick := MyOnClick;
mItemA.Add(mItem);
end; end.
按下面图示操作, 把刚才制作的 Frame 添加到 Tool Palette 以方便其他窗口(页面)调用.
然后就和添加其他控件一样, 从 Tool Palette 把刚刚制作的 TIWFrame1Template 添加到页面就成了.
使用 IntraWeb (5) - 页面布局之 TFrame的更多相关文章
- 使用 IntraWeb (4) - 页面布局之 TIWRegion
TIWRegion 是容器, 首先布局好它(们). 在空白窗体上添加 4 个 TIWRegion, 然后: uses System.UITypes; //为使用 Anchors 属性 {下面代码中的设 ...
- 前端框架 EasyUI (2)页面布局 Layout
在 Web 程序中,页面布局对应用程序的用户体验至关重要. 在一般的信息管理类的 Web 应用程序中,页面结构通常有一个主工作区,然后在工作区上下左右靠近边界的区域设置一些边栏,用于显示信息或放置一些 ...
- Xamarin+Prism开发详解五:页面布局基础知识
说实在的研究Xamarin到现在,自己就没设计出一款好的UI,基本都在研究后台逻辑之类的!作为Xamarin爱好者,一些简单的页面布局知识还是必备的. 布局常见标签: StackLayout Abso ...
- CSS3与页面布局学习总结(八)——浏览器兼容与前端性能优化
一.浏览器兼容 1.1.概要 世界上没有任何一个浏览器是一样的,同样的代码在不一样的浏览器上运行就存在兼容性问题.不同浏览器其内核亦不尽相同,相同内核的版本不同,相同版本的内核浏览器品牌不一样,各种运 ...
- CSS3与页面布局学习总结(七)——前端预处理技术(Less、Sass、CoffeeScript、TypeScript)
CSS不像其它高级语言一样支持算术运算.变量.流程控制与面向对象特性,所以CSS样式较多时会引起一些问题,如修改复杂,冗余,某些别的语言很简单的功能实现不了等.而javascript则是一种半面向对象 ...
- CSS3与页面布局学习总结(四)——页面布局大全
一.负边距与浮动布局 1.1.负边距 所谓的负边距就是margin取负值的情况,如margin:-100px,margin:-100%.当一个元素与另一个元素margin取负值时将拉近距离.常见的功能 ...
- 【Android】纯代码创建页面布局(含异步加载图片)
开发环境:macOS 10.12 + Android Studio 2.2,MinSDK Android 5.1 先看看总体效果 本示例是基于Fragment进行的,直接上代码: [界面结构] 在 F ...
- 如何在ASP.NET Web站点中统一页面布局[Creating a Consistent Layout in ASP.NET Web Pages(Razor) Sites]
如何在ASP.NET Web站点中统一页面布局[Creating a Consistent Layout in ASP.NET Web Pages(Razor) Sites] 一.布局页面介绍[Abo ...
- CSS3与页面布局学习笔记(四)——页面布局大全(负边距、双飞翼、多栏、弹性、流式、瀑布流、响应式布局)
一.负边距与浮动布局 1.1.负边距 所谓的负边距就是margin取负值的情况,如margin:-100px,margin:-100%.当一个元素与另一个元素margin取负值时将拉近距离.常见的功能 ...
随机推荐
- 使用storyboard显示UITableView时,如果不修改系统默认生成的tableView:cellForRowAtIndexPath:方法中的代码,则必须为UITableViewCell注册(填写)重用标识符:identifier.必须要代码方法中的标识符一致.
CHENYILONG Blog 使用storyboard显示UITableView时,如果不修改系统默认生成的tableView:cellForRowAtIndexPath:方法中的代码,则必须为UI ...
- HDU 3787 A+B 模拟题
解题报告:就是输入两个用逗号隔开的数字,求出这两个数字的和,并且用正常的方式输出来.直接写一个函数将一个包含逗号的数字转换成十进制的数返回就行了.这里推荐一个函数atoi(),参数是char*型的,然 ...
- Python输出9*9 乘法表
for i in range(1,10): for j in range(1,i+1): print(str(j) + str("*") + str(i)+"=" ...
- 使用 scm-manager 搭建 git/svn 代码管理仓库(一)
1.在官网上下载scm-manager 下载地址 https://www.scm-manager.org/download/ 选择下载文件 2. 配置java 环境 参照文章:https://jin ...
- 20155303 实验四 Android程序设计
20155303 实验四 Android程序设计 目录 第24章:初识Android 任务一: 完成Hello World, 要求修改res目录中的内容,Hello World后要显示自己的学号 学习 ...
- keepalived vrrp_script脚本不执行解决办法
首先打开日志观察: tail -f /var/log/messages 然后新开一个客户端重启keepalived , systemctl restart keepalived.service 看日志 ...
- 【API】文件操作编程基础-CreateFile、WriteFile、SetFilePointer
1.说明 很多黑客工具的实现是通过对文件进行读写操作的,而文件读写操作实质也是对API函数的调用. 2.相关函数 CreateFile : 创建或打开文件或I/O设备.最常用的I/O设备如下:文件,文 ...
- 【windows】在控制面板卸载软件的时候,出现2502,2503的问题
1. 打开“任务管理器”,找到“详细信息”的页签,将“explorer.exe”的进程结束任务 2.菜单栏的“文件”-->"建立新任务"--> 输入Explorer.e ...
- (二)zookeeper安装
再安装zookeeper之前,我们看下zookeeper简介 https://baike.baidu.com/item/zookeeper/4836397?fr=aladdin 再Dubbo中 官方推 ...
- js防止sql注入的参数过滤
js防止sql注入的参数过滤 <script language="javascript"> <!-- var url = location.search; var ...