(转)关于UI开发总结一些技术和一些论坛牛人讨论

1,MFC

基于VC6.0的微软基础库

2,WPF

做绚丽界面一律用WPF,做一般绚丽界面用WinForm,做windows标准界面用MFC

WPF也有个致命缺点,就是要.net framework支持

3,DirectUI

Windowsless或者Handleless,也就是无句柄窗口

4,迅雷界面引擎

http://xldoc.xl7.xunlei.com/

继续阅读(转)关于UI开发总结一些技术和一些论坛牛人讨论

解决delphi XE5中使用RESTClient提交Body类型的乱码问题

解决delphi XE5中使用RESTClient提交Body类型的乱码问题

例子:

tRestRequest.AddBody(TStringStream.Create('{"test":"123abc试试"}',TEncoding.UTF8),TRESTContentType.ctAPPLICATION_JSON);  
tRestRequest.Execute; 

  最后还是有问题,对于中午会有不确定的乱码或者丢失,所以还是改用了原始的idhttp。 RESTClient还需要对中文有兼容改进。

delphi 循环动态释放控件

项目修改进行到最后时刻,卡在控件的动态释放上。真是无语,好在同事的帮助,搞定。

   //循环释放之前生成的标疑题卡

    for k := pnl1.Controlcount -1 downto 0 do
    begin
      if pos(‘by’, pnl1.Controls[k].Name) >0 then
      begin
        (pnl1.Controls[k] as TPanel).Visible :=False;
         pnl1.Controls[k].Free;
      end;
    end;

 

不能使用 for i:=0 to pnlTestNOPageBY.Controlcount

原因:当一个控件被释放之后,Controlcount 会重新统计 (Controlcount 是递减的)

当i 的值大于 Controlcount 后,就会造成数组越界的悲剧。

注意:delphi 控件有两种 Control 和Component

不同的控件需要使用不同的函数控制。

FindChildControl与FindComponent的区别见

http://blog.csdn.net/tht2009/article/details/6954880

本地数据库更新到远程数据库,并还原部分保存在本地数据库设置

思路:
1,下载远程的数据库到临时文件夹。
2,备份本地数据设置信息,和还原到新的数据库。
  
有两种思路:
  
A:
    
A1,读取本地(原)数据库的需要还原的内容
    
A2,还原到临时文件夹新的数据库
  
B:
    
B1,将本地(原)数据库的需要还原的内容进行备份(创建一个数据库到临时文件夹)
    
B2,读取备份数据库的内容,还原到新的数据库。
3,启动另外一个程序,关闭当前程序,用临时文件夹的数据库替换但前数据库,并删除临时文件夹 和文件。

Delphi C#改变TListView控件Items的高度

TListView控件Items的高度 设置比较麻烦,但是可以通过添加一个ImageList来改变实现

C#中
//   设置行高   20  
ImageList   imgList   =   new   ImageList(); 
imgList.ImageSize   =   new   Size(1,   20);//分别是宽和高

listView1.SmallImageList   =   imgList;   //这里设置listView的SmallImageList ,用imgList将其撑大

Delphi中

var
  imgList : TImageList;
begin
//使items的高变高
imgList := TImageList.Create(nil);
imgList.Height := 24; //高
listView1.SmallImages := imgList;

end

一个计算多选题最终得分的函数

需求:多选或错选不得分、不倒扣分;少选但选择正确的每个选项得0.5分,未对全部答案时最高得分数小于该题得分0.5分。

 function TForm1.GetDuoXuanUsersScore(reply,answer:string;Score:Double):Double;
var
  userScore:Double;
  i:Integer;
begin
  if reply<>answer then
  begin
     for I := 0 to Length(reply) – 1 do
     begin
       if Pos(Copy(reply,i+1,1),answer)>0 then    //如果 回答存在于答案中
       begin
         userScore:=userScore+0.5;
       end else                                   //只要有答案错的,等0分
       begin
         Result:=0;
         Exit;
       end;
     end;
     if userScore>=Score then                     //如果大于或者原来的分数(总分值比较低,选项比较多的时候),那就等于原来的分数
     begin
       if Length(reply)<> Length(answer) then     //选不全的情况最高分是总分-0.5分
         userScore:=Score-0.5
       else                                       //这种是答案顺序排乱的情况,但是选择全部正确,所以是满分
         userScore:=Score;
     end;
  end else
  begin
    userScore:=Score;
  end;
  Result:=userScore;
end;

 

Delphi 提示“unknown picture file extension(.jpg) ”的解決方法

今天试用Delphi 的TImage 控件时,显示jpg图片遇到一个问题,一运行就提示“unknown picture file extension(.jpg) ”错误。

Delphi 不知道是没落了,还是什么原因,遇到问题很难搜索到解决问题的方法,就算是找到,也是03,04年的版本。。

最后,发现需要 uses Jpeg;。

这个情况一般出现在,使用绑定TImage显示图片时。对于在属性设置时,IDE将自动引入。所以不注意,就不容易发现。

不过也太不智能了,IDE居然不提示。和VS的差距真是大大滴。

delphi 的for循环 和其他程序的区别

在C#.NET中

            int i = 0;
            int a = 0;
            for (int ii=0;ii <= 1; ii++)
            {
                a = a + ii;
                i=ii;
            }
            label2.Text = i.ToString() + "nn" + a.ToString();

得出的结果是 i=1,a=1。

在Delphi中

  a:=0;
  for i := 0 to 1 do
   begin
    a:=a+i;
   end;
    label6.Caption:=inttostr(i);
    label7.caption:=inttostr(a);

得出结果 i=2,a=1;运行 for内部的次数没有变,但是用于判断运行次数的变量却+1了。

感觉是delphi中要先给i+1在和限制值比较。

而在c#中,如果i+1之后的值比超过了限制值的话,就不+1。不知道我理解的对不对。暂时没发现网上有相关的内容。