根据ACCESS窗体控件文字多少动态调整控件字体大小
如何实现控件随对话框大小变化而自动调整大小和位置

如何实现控件随对话框大小变化而自动调整大小和位置VC++ 2009-12-28 20:27:42 阅读461 评论0字号:大中小订阅1. 处理对话框的WM_SIZE,然后用MoveWindow或者SetWindowPos来把对话框上面的控件重新调整新位置和大小。
2. 基本的做法就是响应WM_SIZE消息,并按照窗口大小比例来调整控件的位置和大小,控件的大小最好设置成窗口的百分之几,这样的话,就可以根据窗口的大小随时调整了。
3. 每次OnSize 即可获得一个CRect,然后根据这个CRect来确定这些控件的位置和大小,使用函数MoveWindow 或SetWindowpos实现。
4.1)通过下面两个函数获取的是显示屏幕的大小【屏幕的分辨率】(不包括任务栏等区域):int nFullWidth=GetSystemMetrics( SM_CXFULLSCREEN ); //屏幕宽度int nFullHeight=GetSystemMetrics( SM_CYFULLSCREEN ); //屏幕高度2)这两个函数获取的是真正屏幕的大小【屏幕的分辨率】(包括任务栏等区域):int cx = GetSystemMetrics( SM_CXSCREEN );int cy = GetSystemMetrics( SM_CYSCREEN );如:用前两个函数获取的大小可能是1024*687 ,而用下边两个获取的就是1024*768。
5. 在OnSize() 中调用:GetClientRect() 和GetWindowRect() 函数可获取窗口大小,但需注意得到的是设备坐标,如果需要画图什么的还需要转换成逻辑坐标。
6. 字体大小随窗口变化而自动变化,比如说始终使字的高度始终占窗口的1/3。
使用:1). 在Creat中将nHeight设成窗口长度或者宽度的一定比值就行了(最好在onsize函数中设置);2). 使用WM_FONTCHANGE 消息。
Access数据库程序设计(第二版)课件ch4-使用窗体编辑与显示信息

1. 纵栏式窗体
又称为全屏幕窗体。一次只显示一条记录,记 录中的字段按列的形式排列在屏幕上,每列的左边 显示字段名,右边显示对应的内容。纵栏式窗体常 用于浏览和输入数据,窗体中的文本框是用来显示 或输入数据。图5.1所示的就是一个纵栏式窗体。
在Access中,不管是窗体还是报表,创建和使用控件的过程基 本相同。
2. 常用控件
如图4-8所示的工具箱中包含了一个选择对象按钮、 一个控件向导按钮以及常用的18种控件。其中主要控件的 作用如下:
图4-8 空白窗体与工具箱
⑴ 标签
标签在窗体或报表上显示描述性的文本信息, 其显示的内容可以是一行或者多行。例如,窗体或 报表的标题文字,字段的标题等。标签是不接受输 入的非结合性控件。还可以将标签与其他控件结合 使用,用于说明其他控件的标题或者显示信息。经 常与标签控件结合使用的控件有文本框、选项组及 组合框等等。
第4章 使用窗体输入或显示信息
本章内容
Windows良好的用户界面是其受到广泛欢迎的重要原因, 直观可视的窗口是Windows用户界面的重要部分。在Access中,窗 体为用户提供了观察与操纵数据的界面,它提供了直观且灵活的 浏览、输入与修改数据的方法。用户可以根据实际需要,设计出 任何能够想象到的Windows风格的窗体。在本章中,我们将学习: Access窗体的组成及类型 向导及设计视图创建窗体、子窗体以及以窗体中创建图表 在窗体中添加控件、设置控件的属性并对其进行编辑, 利用窗体操作数据 编辑与美化窗体
列表框和组合框基本类似,只是数据列表一直显示 出来,用户只能从下拉列表中选择数据,但是选择 的数据项数可以不限于一个。
《Access数据库应用技术》课件第4章

弹出如图4-7所示的“窗体向导”对话框(一)。在“表/查询”
项中选择“学生”表,然后将所有字段选定,单击“下一步”
按钮。
(3) 在“窗体向导”对话框(二)中设置窗体的布局,这
里选择“纵栏表”,如图4-8所示,单击“下一步”按钮。
图4-7 “窗体向导”对话框(一)
图4-8 “窗体向导”对话框(二)
所创建的窗体如图4-16所示。
图4-15 “图表向导”对话框(四)
图4-16 “班级人数图表”窗体
4.2.4 在设计视图中创建窗体 实例4.4 创建“课程信息”窗体。 操作步骤如下: (1) 打开教学管理数据库。 (2) 在“数据库”窗口中,单击“对象”下的“窗体”。
用鼠标左键双击右侧列表中的“在设计视图中创建窗体”项, 打开窗体设计视图,如图4-17所示。
4.1.4 窗体的组成 窗体对象的组成包括窗体页眉节、页面页眉节、主体节、
页面页脚节及窗体页脚节等五部分,如图4-1所示。一般情 况下,只使用部分窗体节,以使得用户能更有效地使用窗体。 大部分窗体只使用主体节、页面页眉节和页面页脚节即可满 足一般性应用需求。
图4-1 窗体的组成
4.2 创建窗体操作实例
(11) 关闭属性窗口,依次为各个文本框设置控件来源, 结果如图4-25所示。
说明:控件的添加也可从字段列表框中拖拽所需字段到 窗体中,系统将自动选择相应的控件与所拖拽的字段对应。
图4-25 设置其他各控件的来源
(12) 按图4-26所示,调整各控件的大小与位置。 说明:用鼠标拖拽出一矩形区域,可选中该区域中的所 有控件。单击鼠标右键,在弹出的快捷菜单中可选择“对齐” 或“大小”菜单中的各子菜单项对控件进行快速调整。
3. 数据透视表视图和数据透视图视图 数据透视表视图或数据透视图视图中的数据与相应的窗 体绑定。在这些视图中,可以动态地更改窗体的版面,从而 以各种不同方法分析数据;可以重新排列行标题、列标题和 筛选字段,直到形成所需的版面布置为止。每次改变版面布 置时,窗体会立即按照新的布置重新计算数据。 在数据透视表视图中,通过排列筛选行、列和明细等区 域中的字段,可以查看明细数据或汇总数据。 在数据透视图视图中,通过选择一种图表类型并排列筛 选序列、类别和数据区域中的字段,可以直观地显示数据。
Visual C++中动态改变控件和对话框字体(大小)

Visual C++中动态改变控件和对话框字体(大小)1 VC的对话框字体设置对所有控件都有效,你不能单独地改变某个静态文本的字体。
对于你的问题,需要首先用CreateFont来建立一个字体对象,然后调用控件的SetFont,就可以了。
例子:1、改静态文体的ID,如:IDC_STATIC12、添加一个Edit控件,建立一个关联的控件m_editControl。
3、在OnInitDialog中添加如下代码:CFont * f;f = new CFont;f->CreateFont(16, // nHeight0, // nWidth0, // nEscapement0, // nOrientationFW_BOLD, // nWeightTRUE, // bItalicFALSE, // bUnderline0, // cStrikeOutANSI_CHARSET, // nCharSetOUT_DEFAULT_PRECIS, // nOutPrecisionCLIP_DEFAULT_PRECIS, // nClipPrecisionDEFAULT_QUALITY, // nQualityDEFAULT_PITCH | FF_SWISS, // nPitchAndFamily_T("Arial")); // lpszFacGetDlgItem(IDC_STA TIC1)->SetFont(f); 需要注意的是,这里我们使用的是CFont指针,而不是普通的CFont局部变量, 在非MFC程序,首先用CreateFont来建立一个字体句柄,然后再用SendMessage发给控件WM_SETFONT消息,将建立的字体句柄赋值过去,就可以了。
实例下载:/download/CtrlFont.zip2 但是整个对话框或窗口的字体的大小,使用对话框或窗口的SetFont()函数却没有任何的作用.可以在初始化时遍历每个控件分别设置来处理,但这里说另一种使用回调函数的简单方法::调用系统的API:::EnumChildWindows(). ,传入回调函数和重新定义的字体.(第一个参数不用管啊,本来就有啊))1)在文档视图结构中CMainFrame::OnCreate().中调用::EnumChildWindows(). 实现所有窗口和子窗口字体改变2) 在对话框的OnInitDialog(). 中调用::EnumChildWindows(). 改变对话窗上的所有控件. 回调函数如下:// lParam is a pointer to CFont objectBOOL __stdcall SetChildFont(HWND hwnd, LPARAM lparam){CFont *pFont = (CFont*)lparam;CWnd *pWnd = CWnd::FromHandle(hwnd);pWnd->SetFont(pFont);return TRUE;}使用1:BOOL CAboutDlg::OnInitDialog(){CDialog::OnInitDialog();// TODO: Add extra initialization here::EnumChildWindows(m_hWnd, ::SetChildFont, (LPARAM)g_Font.GetFont());return TRUE; // return TRUE unless you set the focus to a control// EXCEPTION: OCX Property Pages should return FALSE}使用2:int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){if (CFrameWnd::OnCreate(lpCreateStruct) == -1)return -1;if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FL YBY | CBRS_SIZE_DYNAMIC) ||!m_wndToolBar.LoadToolBar(IDR_MAINFRAME)){TRACE0("Failed to create toolbar\n");return -1; // fail to create}if (!m_wndStatusBar.Create(this) ||!m_wndStatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT))){TRACE0("Failed to create status bar\n");return -1; // fail to create}m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockControlBar(&m_wndToolBar);::EnumChildWindows(m_hWnd, ::SetChildFont, (LPARAM)g_Font.GetFont());return 0;}(很好用,不像mfc中的那个垃圾setfont(),设置了对话框的没有一点反应!)实例下载:/gdi/SetFont/SetFont_demo.zip3 如何在mfc中实现,当系统的字体变大的时候,对话框上面的字体也相应的变大?(非常感谢) //IconFontLOGFONT logFont;int size = sizeof(LOGFONT);bool isGood = SystemParametersInfo(SPI_GETICONTITLELOGFONT,size,&logFont,0);if(isGood == true){CFont * f;f = new CFont;const LOGFONT* pFont = new LOGFONT(logFont);f->CreateFontIndirectW(pFont);//::EnumChildWindows(m_hWnd, ::SetChildFont, (LPARAM)f);}//other FontNONCLIENTMETRICS ncm = new NONCLIENTMETRICS();bool isGood = SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), ref ncm, 0);if (isGood == true){LOGFONT logFont2;//logFont2=ncm.lfntCaptionFont);//CaptionFont//logFont2 =ncm.lfntSMCaptionFont;//CaptionFont_Small//logFont2 = ncm.lfntMenuFont;//MenuFont//logFont2 = ncm.lfntStatusFont;//StatusFontlogFont2 = ncm.lfntMessageFont;//MessageFontCFont * f;f = new CFont;const LOGFONT* pFont = new LOGFONT(logFont2);f->CreateFontIndirectW(pFont);//::EnumChildWindows(m_hWnd, ::SetChildFont, (LPARAM)f);}以上是取得系统字体的大小,然后再调用上面的第二种方法,哈哈哈哈哈!窗体上的所有字体都会跟着系统字体的大小改变,哈哈哈哈!主要使用API:SystemParametersinfo该函数查询或设置系统级参数。
Access 控件简介

Access 控件简介重要:要求:了解来源:微软整理:Access 软件网本文介绍 Access 中提供的不同类型的控件,并演示如何向窗体和报表添加控件。
控件是窗体或报表的组成部分,可用于输入、编辑或显示数据。
例如,对于报表而言,文本框是一个用于显示数据的常见控件;对于窗体而言,文本框是一个用于输入和显示数据的常见控件。
其他常见控件包括命令按钮、复选框和组合框(下拉列表)。
本文内容了解控件了解布局(需要2007或更高版本的Access)了解控件利用控件,您可以查看和处理数据库应用程序中的数据。
最常用的控件是文本框,其他控件包括命令按钮、标签、复选框和子窗体/子报表控件。
控件可以是绑定控件、未绑定控件或计算控件:绑定控件其数据源是表或查询中的字段的控件称为绑定控件。
使用绑定控件可以显示数据库中字段的值。
值可以是文本、日期、数字、是/否值、图片或图形。
例如,显示雇员姓氏的文本框可能会从“雇员”(Employees) 表中的“姓氏”(Last Name) 字段获取此信息。
未绑定控件不具有数据源(如字段或表达式)的控件称为未绑定控件。
可以使用未绑定控件显示信息、图片、线条或矩形。
例如,显示窗体标题的标签就是未绑定控件。
计算控件其数据源是表达式(而非字段)的控件称为计算控件。
通过定义表达式来指定要用作控件的数据源的值。
表达式可以是运算符(如=和+)、控件名称、字段名称、返回单个值的函数以及常数值的组合。
例如,以下表达式将“单价”(Unit Price) 字段的值乘以常数值 (0.75) 来计算折扣为 25% 的商品价格。
=[Unit Price] * 0.75表达式可以使用来自窗体或报表的基础表或查询中的字段的数据,也可以使用来自窗体或报表中的另一个控件的数据。
注释通过添加计算字段可在表中执行计算,或通过在查询网格的“字段”行中输入表达式可在查询中执行计算。
之后,只需将窗体和报表绑定到这些表或查询,即可在窗体或报表上显示计算,而无需创建计算控件。
ACCESS?设置字段的属性

ACCESS 设置字段的属性1. 字段大小字段大小即字段的长度,该属性用来设置存储在字段中文本的最大长度或数字的取值范围。
因此,只有文本型、数字型和自动编号型字段才具有该属性。
文本型字段的大小,在1~255之间,如果文本数据长度超过255个字符,则可以将该字段设置为备注型。
数字类型字段的长度则可以在字段大小列表中进行选择,其中常用的类型所表示的数据范围、小数位数及所占的空间,如表1-1.表1-1 数字型数据的不同保存类型在减小字段的大小时要小心,如果子啊修改之前字段中已经有了数据,在减小长度时可能会丢失数据,对于文本型字段,将截取超出的部分;对于数字型字段,如果原来是单精度或双精度数据,在改为整数时,会自动将小数取整。
2. 字段格式字段的“格式”属性用来确定数据在屏幕上的显示方式以及打印方式,从而使表中的数据输出有一定的规范,浏览、使用更为方便。
Access系统提供了一些字段的常用格式供选择。
如表2-1,表2-2,表2-3.表2-1 数字/货币型字段的格式表2-2 日期/时间型字段的格式表2-3 是/否型字段的格式格式设置只是改变数据输出的样式,对输入数据本身没有影响,也不影响数据的存储格式。
若要让数据按输入时的格式显示,则不要设置“格式”属性。
文本、备注、超链接等字段没有系统预定义格式,可以自定义格式。
自定义文本与备注字段的格式符号,见表2-4.表2-4 文本/备注型常用格式符号3. 输入掩码输入掩码属性用来设置字段中的数据输入格式,并限制不符规格的文字或符号输入。
这种特定的输入格式,对在日常生活中相对固定的数据形式尤其适用,如电话号码、日期、邮政编码等。
人工设置输入掩码的方法是,在“输入掩码”编辑框中直接输入格式符,可以使用的格式符及其代表的含义,如表3-1.表3-1 输入掩码属性中使用的格式符如果同时使用“格式”和“输入掩码”属性时,要注意它们的结果不能互相冲突。
4. 默认值当表中有多条记录的某个字段值相同时,可以将相同的值设置为该字段的默认值,这样每产生一条新记录时,这个默认值就自动加到该字段中,避免重复输入同一数据。
Access窗体的操作

2.添加记录和修改记录 (1)添加记录。在窗体中向窗体基表或查询中添加新记录 数据是窗体的重要功能之一。如果要添加一个新的记录,可 以先打开要添加记录的窗体,单击窗体左下角的“空白(新) 记录”按钮,此时窗体定位到第一个空白页,在此空白页, 通过各控件输入相应的数据,当新记录的各项数据输入完毕 后,单击记录定位工具中的“空白(新)记录”、“前一条 记录”、“后一条记录”都将引起Access 2002自动将新记 录保存到基表中。也可以在输入完数据后,单击工具栏上的 “保存”按钮,将刚输入的数据保存到表中。 (2)修改记录。除了可以在窗体中添加新记录外,也可以 利用窗体修改基表或查询中的数据。要修改数据,可以直接 在各个控件中输入新的数据,这样将自动修改基表的相应字 段值,单击工具栏上的“保存”按钮即可保存所做的修改, 改变当前记录也可以保存做的修改。
图6-11 表格式窗体
3.数据表窗体 一种常用的格式,是在窗体中以紧凑的方式显示多条记 录,如图6-12所示。
图6-12 数据表窗体
2.3 用图表向导创建图表窗体 使用图表可以形象化地表达数据的变化,将包 含大量数据的表格变成一张生动图表,使读者能够 直观地了解数据的变化状况及发展趋势。Access 2002提供了“图表向导”,在多数情况下,都可以 使用该向导来创建图表窗体。
BACK
2 创建窗体
2.1 用向导创建窗体 Access 2003提供了几种向导帮助创建窗体,选择不 同的向导,可以建立不同风格的窗体。向导会通过询问一 步步收集数据,并根据输入建立窗体,对于初学者来说是 个好方法。利用向导创建好窗体后,可以在窗体视图中加 以修改。 使用窗体向导能够基于一个或多个表或查询来创建窗 体。向导会要求输入所需记录源、字段、版式和格式信息, 根据用户的大案创建窗体。
Access第41-50套上机考试题库

1第41套 上机考试试题一、基本操作题在考生文件夹下,存在一个Excel 文件“Test.xls ”和一个数据库文件“samp1.accdb ”。
“samp1.accdb ”数据库文件中已建立三个表对象(名为“线路”、“游客”和“团队”)和一个窗体对象(名为“brow ”)。
试按以下要求,完成表和窗体的各种操作:(1)将“线路”表中的“线路ID ”字段设置为主键;设置“天数”字段的有效性规则属性,有效性规则为大于0。
(2)将“团队”表中的“团队ID ”字段设置为主键;添加“线路ID ”字段,数据类型为“文本”,字段大小为8。
(3)将“游客”表中的“年龄”字段删除;添加两个字段,字段名分别为“证件编号”和“证件类别”;“证件编号”的数据类型为“文本”,字段大小为20;使用查阅向导建立“证件类别”字段的数据类型,向该字段键入的值为“身份证”、“军官证”或“护照”等固定常数。
(4)将考生文件夹下Test.xls 文件中的数据链接到当前数据库中。
要求:数据中的第一行作为字段名,链接表对象命名为“tTest ”。
(5)建立“线路”、“团队”和“游客”三表之间的关系,并实施参照完整性。
(6)修改窗体“brow ”,取消“记录选择器”和“分隔线”显示,在窗体页眉处添加一个标签控件(名为Line ),标签标题为“线路介绍”,字体名称为隶书、字号大小为18。
二、简单应用题考生文件夹下存在一个数据库文件“samp2.accdb ”,里面已经设计好“tA ”和“tB ”两个表对象。
试按以下要求完成设计:(1)创建一个查询,查找并显示所有客人的“姓名”、“房间号”、“电话”和“入住日期”四个字段内容,所建查询命名为“qT1”。
(2)创建一个查询,能够在客人结账时根据客人的姓名统计这个客人已住天数和应交金额,并显示“姓名”、“房间号”、“已住天数”和“应交金额”,所建查询命名为“qT2”。
注:输入姓名时应提示“请输入姓名:”。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
根据ACCESS窗体控件文字多少动态调整控件字体大小
我们在使用EXCELL时,能够使用“设置单元格格式”|“对齐”|“文本控制”,对文本框在预定义字体大小下不能显示所有文字时,有“缩小字体填充”选项,缩小字体后,文字就会全部显示。
ACCESS 窗体能否实现动态“缩小字体以显示所有文字”功能呢?
网上有介绍ACCESS报表实现“缩小字体以显示所有文字”的功能:是通过主体格式化事件实现的。
代码如下:
Option Compare Database
Option Explicit
F As Integer '字体大小
Private Sub Report_Load()
F = Me.Address.FontSize '在启动时先将需要改变的控件的正常字体保存起来
’这里假定Address是我们要动态调整字体大小的控件
End Sub
’然后在在报表主体格式化事件中对控件进行格式化
Private Sub 主体_Format(Cancel As Integer, FormatCount As Integer)
Dim cW As Double
Me.Address.FontSize = F '每次主体格式化时,先将字体设为正常大小
If Me.Address.Width < Me.TextWidth(Me.Address) Then
cW = (Me.Address.Width - 100) / Me.TextWidth(Me.Address)
Me.Address.FontSize = Int(Me.Address.FontSize * cW)
End If
End Sub
然而,上述代码并不能在窗体中实现。
主要因为:一是窗体没有Format事件,二是窗体没有TextWidth方法。
因此不能计算控件所有文字的总长度。
其实在窗体中有一个各节有“绘制(PAINT)”事件可以起到同样的作用。
在窗体中,窗体节的控件是在“绘制”事件中格式化的。
可以按照以下思路,根据显示控件文字多少,动态调整控件(如文本框)
字体大小。
1、文字总长度磅值计算:在窗体中,可以直接使用字号(实际是磅值)作为一个文字的大小。
控件大小与磅值的换算倍数为20。
这时控件文字总长度可用len(控件名)*控件字体概算。
2、新字体计算:使用控件长度/20得到长度的磅值,再用磅值除以字数,即得到新字体大小。
因此,其实也可以将字体调大。
只是字体调大后,控件的高度又可能装不下了。
3、与报表不同情况的处理。
报表中某控件绑定的字段,有多少记录,就有多少个最终显示的控件被格式化。
窗体中则一个新记录也要使用控件,以便输入新记录。
由于新记录,没有数据,只是显示一个样子,因此对这个新记录计算文字总长度会出现“找不到控件或字段”的错误。
这里直接忽略即可。
下面以主体节中的文本框“textExt”(实际中用你需要调整的文本框代替),代码如下:
Option Compare Database
Public textExtFontSize as integer
Private Sub Form_Open(Cancel As Integer)
textExtFontSize=textExt.FontSize ‘保存该文本框的预定义字体。
实际中,你也可以在以下过程中使用你预定义的字体大小的具体值,而不需要保存这个值。
End Sub
Private Sub 主体_Paint()
textExt.FontSize= textExtFontSize ‘初始化控件字体为预定义字体
On Error GoTo ExitSub ‘遇到新记录,找不到控件和字段错误时,直接忽略并退出
If textExt.Width/20< textExt.FontSize *len(textExt.FontSize) then
textExt.FontSize= textExt.Width/20/ len(textExt.FontSize)
endif
ExitSub:
End Sub
由于英文字母的宽度比汉字窄,上述代码计算出来的字体偏小,也即,控件有空白存在。
这个可能通过设备的字体结构计算出准确的文
字长度和高度,甚至能调整文字方向。
但上述代码在处理一般自动缩小字体以适应控件宽度的应用中已经足够了。