WPF窗口继承实现统一风格的自定义窗口
12月01号
WPF窗口继承实现统一风格的自定义窗口

那些年做windows程序,界面是很令人头疼的一个问题。一般自带的那些窗口和控件都是很丑的,第三方的界面库又不稳定,万般无奈的时候,就只有响应WM_PAINT消息自己慢慢画,但是觉对是一个非常艰苦的过程。

WPF出现后,很多问题都引刃而解,一些控件改改背景,改改字体变得非常的容易,最重要的是,后续版本都已经支持动画了,想当年要实现动画是个多么不容易的事情,现在几句代码就解决了。

会HTML的人大概就很熟悉XAML的写法了!

我们今天要探讨的问题是,如何实现一个窗口的风格(style),让所有的窗口都继承这样同样的风格,包括标题栏,放大、缩小和关闭按钮。

查看全文
c# 轻量ORM框架开发之反射与动态编译
09月13号
c# 轻量ORM框架开发之反射与动态编译

对象关系映射,靠纯手打,是个超级繁琐又类的苦力活,即便它能给你再高的运行效率,但是也会损失开发效率。

c#在netframework中其实已经提供了ORM框架了,叫做entity framework,这个框架其实已经做的蛮好的了,但是框架实在是太重,重到写出来的代码在配置不那么好的电脑上跑起来都卡顿。

因此我们决定自己写这么一个框架,一来重在轻量;二来,就是想探探路,看看ORM框架到底是怎么做出来的。

当然,让我自己凭空造楼是做不到的,但是我们可以借鉴,尤其是在互联网这么发达的时代,去github看看别的的开源代码就OK了。

查看全文
delphi的反射RTTI
08月05号
delphi的反射RTTI

写SQL语句是一个非常枯燥的事情,事实上凡是大量重复的东西,都是非常枯燥的。

因此我们就想到要改变,于是有人就搞出对象关系映射的框架来,Java中的Hibernate就是个活生生的例子。

c#也是不甘落后的,它搞了个EF框架,即Entity framework。

唯独还在Delphi世界里面苦苦挣扎的人,简直就是苦不堪言啊。每增加一张表,就得写每一次insert,update,select的语句,这是个多么苦逼的事情!

查看全文
SQL SERVER的序列生成
08月02号
SQL SERVER的序列生成

讨论这个问题的原因,最初来自于惠侨的工程师。我们医院用的HIS是军卫的系统,该系统的数据库是oracle的,在医生开具检验申请的时候,orcle有个序列发生器,用来生成唯一的test_no。但是当这个问题放到sql server里面来的时候,我们发现好像没法做?

此外,真正要解决这个问题,还源于我做的试剂耗材的管理系统。以往生成条码为了保证唯一性,使用日期时间+序列的方式,为了保证它不重复,时间就取的很细,到了毫秒级别。虽然理论上来讲这仍然有重复的可能性。

其实重复毕竟是小概率,但是条码却太长了,比如一个试剂的条码是20140801162430234001,这么一大串,一来不容易被条码枪识别,二来即便识别也容易造成识别前半部分。如果实在没有识别要手输的话,就是要费很大的工夫了。

查看全文
南方医科大学校园网网关认证客户端程序v2.0
07月02号
南方医科大学校园网网关认证客户端程序v2.0

在使用网关认证的客户端程序后,终于再也不用一会儿就去输入那烦人的认证页面了,程序每隔30秒就去获取一下百度的页面,如果发现百度页面也获取不到,就重新发起一次认证,保证网络一直畅通无阻。

当然,你说,如果恰好百度瘫痪了,你这判断不就失灵了?吵吵说,建议中国政府的伟大的长城防火墙屏蔽百度这种邪恶的搜索引擎,好吧,你懂的。

吵吵今天又拿这个客户端程序说事,不是来黑百度的,而是在应用的过程中又发现了一些问题。

查看全文
c#自定义事件
06月21号
c#自定义事件

c#的serialPort控件有个DataReceived事件,用来响应串口接收到发送来的数据。在做LIS接口的时候,本着”高内聚、低耦合“的原则,我继承了这个控件,并且重新定义了两个事件ResultReceived和QueryReceived,用来响应LIS接口收到结果和收到条码请求两个事件。为了实现上述的功能,就需要了解自定义事件怎么做?

为了了解这个问题,我们追踪一下源代码,发现DataReceived事件代码如下:

查看全文
c#的串口通讯
06月14号
c#的串口通讯

老实讲,自从用上了c#之后,就再也没有心思去折腾delphi了,从开发速度来讲,c#要用的顺手的多,最起码两点:不用在开头写函数声明,局部变量也不用在函数头声明。抛弃这些东西,强大的LIST链表用的是相当的爽。

前些年觉得,技术进步太快,你只需要专注你自己的东西就ok了,现在看来倒是未必了。开发语言是一种工具,人家用的是大炮了,你还在用手枪,迟早就是躲不开被淘汰的命运。

抛弃存量,寻找增量,是在互联网时代存活下去的定律。编程语言在进化,人也在进化。

查看全文
坑爹的OracleClient
06月07号
坑爹的OracleClient

今天研究了一天的Oracle数据库,尝试着如何去用c#读写Oracle数据库,没想到的是,原本以为很简单的东西,研究了整整一天。

前几天一直在和金域和LIS的开发商谈金域接口的事情,难点在于LIS开发商做这个接口要支付额外的费用,将这个事情提交医院,因为医院明年考虑整体换成东软的系统,不愿意再投入。这个时候金域跑出来了,他们愿意出这个钱,前提就是LIS开发商和他们的客户有足够多的交集。

查看全文
南方医科大学校园网网页认证客户端
06月02号
南方医科大学校园网网页认证客户端

上次金域的工程师来我们医院,发现我们的校园网一段时间不登陆就会断线,于是他告诉我开一个窗口,一直PING百度就好了。他是想如果一直有数据交换,我们的校园网就不会断。后来经实验证实,他的想法还是太美好,ping绝对是不行的,网关应该是虑过了ICMP协议的。

老版的网页认证已经被我集中到了“吵吵登陆器”中,当然,这也是N年前的事情了。但是老是断一下的网络确实也很讨人厌,因此,我还是决定再写一个客户端来做网页登陆验证。

老实讲,新版的认证已经比老版的强大到哪里去了,你看他那一堆隐藏的字段,就让你没有写代码的欲望了,好在很多时候都是看着吓人罢了,实际上实验起来,很多东西还是都没有用的。

查看全文
c# Socket通信数据包构造的问题
05月31号
c# Socket通信数据包构造的问题

前文讲到我用tcp通信来做金域的接口代理,做好了之后,却发现了一个问题,对于TCP通信来说,默认的数据包长度是1492,因此,当我发送的数据大于1492的时候,问题就出现了,数据被拆分了,要不就是没法判断数据都接收完了,要不就是粘包了。

1、如何判断数据是否接收完?

通常,我们通过socket来接收数据是使用一个循环去读取的,读到了数据就加入到缓存的数据中去。但是,如果仅仅是循环的话,你怎么知道什么时候数据就接收完了呢?

查看全文