博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
做教育管理系统时 遇到的一些问题 总结 培训机构管理系统 中小学管理系统 托管系统 语数英物化...
阅读量:5007 次
发布时间:2019-06-12

本文共 3417 字,大约阅读时间需要 11 分钟。

案例赏析:

以上是我做的皮肤和程序

首先说说第一个问题

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.

 

转载于:https://www.cnblogs.com/plug/p/4556419.html

你可能感兴趣的文章
shell输出输入流常用符号解释
查看>>
1.线程生命周期
查看>>
border_mode
查看>>
printf中的short int, int, long int和long long int
查看>>
Java构造方法、重载及垃圾回收
查看>>
.Net Core AES加密解密
查看>>
Spring Quartz实现任务调度
查看>>
python | 桶排序、冒泡排序、选择排序、去重
查看>>
两个Html页面之间值得传递
查看>>
EasyUI datagrid 的多条件查询
查看>>
Mac升级bash到最新版本
查看>>
利用vagrant打包系统--制作自己的box
查看>>
美女与硬币问题
查看>>
计算几何算法概览 (转)
查看>>
Notepad++的ftp远程编辑功能
查看>>
hdu 1257 最少拦截系统(简单贪心)
查看>>
Spring Boot 系列教程5-热部署-devtools模块
查看>>
[原] 别人家老婆
查看>>
CentOS7忘记root密码
查看>>
C语言基础课第一次作业
查看>>