做教育管理系统时 遇到的一些问题 总结

以上是我做的皮肤和程序

首先说说第一个问题

1、加载splash 启动画面的时候  屏幕出现闪动现象

原因:启动的时候 同时加载了很多窗体 包括数据库数据的读取

解决:窗体全部动态创建加载,只有启动画面是自动创建

var
   TempCanvas: TCanvas;
   BufDC: HDC;
   BufBitmap: HBITMAP;
 begin
   // 创建一个与显示设备兼容的内存设备
   BufDC := CreateCompatibleDC(Canvas.Handle);
   // 创建一个与显示设备兼容的位图
   BufBitmap := CreateCompatibleBitmap(Canvas.Handle, ClientWidth, ClientHeight);
   // 将设备与位图关联
   SelectObject(BufDC, BufBitmap);
   // CreateCompatibleBitmap创建位图后数据初始化为0,而RGB(0,0,0)则表示是黑色
   // 这里需要清除其黑色背景,使其变为透明
   PerformEraseBackground(Self, BufDC);
   // 临时的Canvas,用来画图用,但它并不是必须的,可以直接使用GDI函数来画图
   TempCanvas := TCanvas.Create;
   // 关联到内存设备
   TempCanvas.Handle := BufDC;
   // 可以开始画图了,这里演示用随机颜色画边框
   Randomize;
   TempCanvas.Brush.Color := Random($FFFFFF);
   TempCanvas.FrameRect(ClientRect);
   // 一次性将内存图像数据覆盖过去,因为跳过了擦除背景过程,所以避免了闪烁的问题
   BitBlt(Canvas.Handle, 0, 0, ClientWidth, ClientHeight, TempCanvas.Handle, 0, 0, SRCCOPY);
   // 释放资源
   DeleteDC(BufDC);
   DeleteObject(BufBitmap);
   FreeAndNil(TempCanvas);
 end;

ADOQuery1.DisableControls
。。。。。
ADOQuery1.EnableControls

2、TTS语音朗读

必须先安装语音库才能正确识别,win7的语音库已经集成 只需安装语音包

3、报表FASTREPORT

需要反复编译 对于高版本的自定义模板 有时候乱码

4、滚动条一定要选择好父窗口

我在mainform的FormMouseWheel的事件里边写了相应鼠标滚轮的事件。然后刚进系统,鼠标滚动,滚动条也能正常滚动。
procedure TMainForm.FormMouseWheel(Sender: TObject; Shift: TShiftState;
  WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin

if WheelDelta < 0 then
      sbxts200001.perform(WM_VSCROLL, SB_LINEDOWN, 0)
    else
      sbxts200001.perform(WM_VSCROLL, SB_LINEUP, 0)

5、防止程序重复运行

//============================================================================== // 工作流程 // 程序运行先取代原有向所有消息处理过程,然后广播一个消息. // 如果有其它实例运行,收到广播消息会回发消息给发送程序,并传回它自己的句柄 // 发送程序接收到此消息,激活收到消息的程序,然后关闭自己 //============================================================================== unit 互斥防重复;

interface

uses Windows ,Messages, SysUtils, Classes, Forms;

implementation

const STR_UNIQUE = ‘{2BE6D96E-827F-4BF9-B33E-8740412CDE96}‘; MI_ACTIVEAPP = 1; //激活应用程序 MI_GETHANDLE = 2; //取得句柄

var iMessageID : Integer; OldWProc : TFNWndProc; MutHandle : THandle; BSMRecipients : DWORD;

function NewWndProc(Handle: HWND; Msg: Integer; wParam, lParam: Longint): Longint; stdcall; begin Result := 0; if Msg = iMessageID then begin case wParam of MI_ACTIVEAPP: //激活应用程序 if lParam<>0 then begin //收到消息的激活前一个实例 //为什么要在另一个程序中激活? //因为在同一个进程中SetForegroundWindow并不能把窗体提到最前 if IsIconic(lParam) then OpenIcon(lParam) else SetForegroundWindow(lParam); //终止本实例 Application.Terminate; end; MI_GETHANDLE: //取得程序句柄 begin PostMessage(HWND(lParam), iMessageID, MI_ACTIVEAPP, Application.Handle); end; end; end else Result := CallWindowProc(OldWProc, Handle, Msg, wParam, lParam); end;

procedure InitInstance; begin //取代应用程序的消息处理 OldWProc := TFNWndProc(SetWindowLong(Application.Handle, GWL_WNDPROC, Longint(@NewWndProc)));

//打开互斥对象 MutHandle := OpenMutex(MUTEX_ALL_ACCESS, False, STR_UNIQUE); if MutHandle = 0 then begin //建立互斥对象 MutHandle := CreateMutex(nil, False, STR_UNIQUE); end else begin Application.ShowMainForm := False; //已经有程序实例,广播消息取得实例句柄 BSMRecipients := BSM_APPLICATIONS; BroadCastSystemMessage(BSF_IGNORECURRENTTASK or BSF_POSTMESSAGE, @BSMRecipients, iMessageID, MI_GETHANDLE,Application.Handle); end; end;

initialization //注册消息 iMessageID := RegisterWindowMessage(STR_UNIQUE); InitInstance;

finalization //还原消息处理过程 if OldWProc <> Nil then SetWindowLong(Application.Handle, GWL_WNDPROC, LongInt(OldWProc));

//关闭互斥对象 if MutHandle <> 0 then CloseHandle(MutHandle);

end.

时间: 2024-10-02 02:16:10

做教育管理系统时 遇到的一些问题 总结的相关文章

今天在做后台管理系统的无刷新左侧菜单,遇到两个难题:(CTE递归查询、ashx+Session[])

今天在做后台管理系统的无刷新左侧菜单,遇到两个难题: 1.怎么将数据表中的菜单项按树形结构进行层次性的查询?群里有人给我指点说用CTE递归查询,我还没搞明白. 2.要做左侧导航栏的根据用户权限的无刷新加载时,要用到AJAX,那么就要在ashx一般处理程序中取得Session["UserID"]的值,但是ashx中是不能用Session的,之后找到一篇文章,指出:若要在ashx中使用Session和Request需要引入一个接口. 在ashx文件中使用Session和QueryStrin

千锋故事——用良心做教育,只做好的教育

杭州校区JavaEE讲师施泽磊 当坐在讲台上,看着台下一双双求知的眼神紧盯着电脑,有的点头认可,有的皱着眉头疑惑,有的因为犯困站着听讲,我知道,我们的精彩故事正在上演. 做教育并不是一件易事,有句话是这么说,世间最困难的两件事,一是把自己的思想装进别人的脑袋,二是将别人口袋里的钱赚进自己的口袋.看来做教育,就是在做着这第一件难事.教育的好坏取决于教育成果,教育成果即是学生的学习效果.好的教育讲究以学生为中心,采用现代化且高效的教学工具,设计学生的学习过程,并提供准确且丰富的教学评价体系来完善教学

Nginx做负载均衡时session共享问题详解

用nginx做负载均衡时,同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,就会出现很多问题,比如说最常见的登录状态. 再者Nginx连接Memcached集群时,Nignx的请求从memcached服务器中根据key获得了value则直接返回value,如果没有获得到value则去MySQL中查询再返回. location / { set $memcached_key "$request_uri"; #设置请求memcached服务器的key memca

关于有默认值的字段在用EF做插入操作时的思考

今天在用EF做插入操作的时候发现数据库中一个datetime类型的字段(CreateDate)的值居然全部为null.于是赶紧看表结构发现CreateDate字段居然是允许为空的. 虽然为空,但是设置了默认值getdate(),按说不应该为null的.于是开始测试. 字段允许Null值的情况 Users表结构如下: 假如一个字段有了默认值,并且又允许为Null,在做插入操作时会发生什么? 如上图中的表结构,CreateDate是允许为null的,而又有默认值getdate().这样在用传统SQL

【Nginx】使用Nginx做反向代理时,关于被代理服务器相应的超时设置

阅读目录 > 参考的优秀文章 > 设置等待被代理服务器的最大响应时间 > 参考的优秀文章 Module ngx_http_proxy_module > 设置等待被代理服务器的最大响应时间 使用Nginx做反向代理时,因被代理服务器因业务确实复杂,需时较久,往往超过60秒.而Nginx默认设置超时时间为60秒. 针对这一情况,需修改默认配置.因配置项中涉及超时的选项太多,这里记录一下. 等待被代理服务器的最大响应时间为120秒,需加如下配置: proxy_read_timeout 1

在VS2012后的版本中做数据报表时,提示尚未指定报表“Report1”的报表定义

有一群的朋友在用VS2012做数据报表时,老是提示 本地报表处理期间出错. 尚未指定报表“Report1”的报表定义 未将对象引用设置到对象的实例. 我看了一下,步骤没错,我用VS2010做了一下,一切OK,没问题,但用VS2013做时, 就提示这错误 后仔细看了一下设计生成的源码,嘿,还真有区别,在VS2012与VS2013中, ReportViewer生成的代码在引用报表数据时,使用的是ReportEmbeddedResource属性 <LocalReport ReportEmbeddedR

做web项目时对代码改动后浏览器端不生效的应对方法(持续更新)

做web项目时,常常会遇到改动了代码,但浏览器端没有生效,原因是多种多样的,我会依据我遇到的情况逐步更新解决的方法 1.执行的时候採用debug模式,普通情况下使用项目部署button右边那个button下的tomcat7中的run即可,假设使用的是serves中的run serves,这样的情况貌似不会自己主动编译 2.点击project菜单下的clean选项,在打开的窗体中选择你使用的项目,ok,这样会删除tomcat容器中关于该项目的一些信息,然后又一次部署,执行 3.删除电脑中tomca

在做excel导出时如何将excel直接写在输出流中

之前做excel导出时,我都是先将文件写在服务器上,然后再下载下来,后来发现原来可以直接将文件写在输出流里边. 下面是一个小demo: package com.huaqin.fcstrp.util; import java.io.IOException; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import javax.servlet

MIRO做发票校验时实现替代功能的多种方式

http://blog.sina.com.cn/s/blog_3f2c03e30100ngje.html MIRO做发票校验时,如果需要对产生的会计凭证做某些字段的替代,可有多种方法. 1.GGB1替代(抬头和行项目,标准的财务会计替代) 2.BTE 1120 3.badi:ac_document 4.Smod: FMRESERV 上面涉及到SAP开发的多种增强技术,以及财务模块非常好用的substitution功能.但是我发现ggb1行项目替代是无法替代利润中心字段的,修改了gb01table