DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: liangjiping168
今日帖子: 17
在线用户: 23
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 diystar (diystar) ★☆☆☆☆ -
普通会员
2015/12/28 18:32:44
标题:
“GDI+中获得字符串准确长度的方法”一波三折 浏览:2038
加入我的收藏
楼主: 开发mcool播放器过程中,头痛于GDI+如何准确测量字符串长度很久了,近来看到盒子一个帖子“GDI+中获得字符串准确长度的方法”http://2ccc.com/article.asp?articleid=6562,大喜过望,可惜死活下载不了,大概是从ftp服务器删除了。于是搜索“GDI+中获得字符串准确长度的方法”,来到这里http://bbs.csdn.net/topics/390712117,获知MeasureCharacterRanges这个方法,可是不会用啊,于是决定到万一老师那里看看,果然有http://www.cnblogs.com/del/archive/2009/12/22/1629717.html,很详细,归纳了一下,如下:

function TMainForm.MeasureStr(s: WideString): TGpRectF;
var
  StringFormat: TGPStringFormat;
  g:TGPGraphics;
  CharRange1: TCharacterRange;
  CharRanges: array of TCharacterRange;
  Regions: array of TGpRegion;
  f:TGPFont;
begin
  StringFormat := TGPStringFormat.Create;
  StringFormat.FormatFlags:=[sfMeasureTrailingSpaces];
  SetLength(CharRanges,1); SetLength(Regions,1);
  Regions[0]:=TGpRegion.Create;
  CharRange1.First:=0; CharRange1.Length:=Length(s);
  CharRanges[0] := CharRange1;
  StringFormat.SetMeasurableCharacterRanges(Charranges);

  g:=TGPGraphics.Create(Self.Canvas.Handle);
  f:=TGPFont.Create(Self.Canvas.Handle);

  g.MeasureCharacterRanges(s, f, GpRect(0.0,0,ClientWidth,ClientHeight), StringFormat, Regions);
  Regions[0].GetBounds(Result, g);
  f.Free; g.Free;
  Regions[0].Free;
  StringFormat.Free;
end;

微软也是,搞得这么复杂,不会直接封装一个么?

注:我用的是阿发伯大侠提供的GDIPlus
----------------------------------------------
http://mcool.appinn.me/
作者:
男 nevergrief (孤独骑士) ★☆☆☆☆ -
盒子活跃会员
2015/12/28 18:39:45
1楼: 微软真的是神,只能这么理解。这是我在网上看到一篇博客上这么说的,他是在研究使用WebBrowser的接口时发出的感慨。另外就是,VCL这么强大的基础类库,也只用到了微软API的很小一部分,有了这些API就可以做出无限多的扩展(比如自己实现TForm的ShowModal,完全废弃了微软提供的Dialog模板)。

它为什么不提供封装?我的理解是,它这辈子也做不完这样的封装,而且也不一定做的比第三方更好,干脆就不做了。对于这一点有许多例子可以作证。
----------------------------------------------
只有偏执狂才能生存!
作者:
男 sqlnew (sqlnew) ★☆☆☆☆ -
盒子活跃会员
2015/12/28 19:20:39
2楼: 或许是微软出于商业性考虑吧.比如安全方面的cryptoapi,研究过的都知道里面的东西实在太强大了,还有CSP服务接口,作为中间件的usb key 等编程.还有office的编程接口,先不计非公开的,就算是公开的那些每个组件的接口那是太多了,就算拿这些扩展功能接口都可以做出非常强大的功能,但总感觉微软对这些东西藏着,捂着,有些就是没有公开的详细文档,对开发人员非常不友好...
----------------------------------------------
-
作者:
男 hardnut (麦轲数据管家) ★☆☆☆☆ -
普通会员
2015/12/28 20:23:30
3楼: 微软的文档已经是最好的了,只能怪技术发展太快。另外,微软也有开发工具,可以看看在它自己的开发工具中有没有封装。
----------------------------------------------
UniKeeper V10.40 -- 您最贴心的个人数据管理助手
作者:
男 mondaywoo (mondaywoo) ★☆☆☆☆ -
普通会员
2015/12/28 20:23:42
3楼: 学习
----------------------------------------------
-
作者:
男 iamdream (银河恒久远,梦想无止境!) ★☆☆☆☆ -
大贡献会员
2015/12/29 8:44:48
4楼: 不奇怪,一方面可能是历史遗留问题,另一方面微软需要保持垄断地位,搞得复杂一些,别人就不容易弄明白,而它自己可能用另外一套直接的API ^o^
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
作者:
男 msfm (清洁工) ★☆☆☆☆ -
盒子活跃会员
2015/12/29 9:25:28
5楼: 顶4楼 以后我也搞的复杂一点 别他妈一看就明白 没点技术含量
----------------------------------------------
-
作者:
男 wk_knife (wk_knife) ★☆☆☆☆ -
盒子活跃会员
2015/12/29 9:27:35
5楼: 垄断地位不是靠复杂建立的,是靠用户数量确定的。
微软巴不得二次开发简单的都不用写代码,支持的厂商越多,越容易垄断。想想IOS就明白了。
----------------------------------------------
-
作者:
男 sqlnew (sqlnew) ★☆☆☆☆ -
盒子活跃会员
2015/12/29 10:36:57
6楼: 微软以前就是以为搞封闭,把开发搞的复杂和高大上,什么都藏着捂着,就可以保持垄断地位。但之后被移动端、安卓、IOS等冲击,正如上楼说的,用户接受才是最终目地,那些高深强大的隐藏功能就慢慢的随着时间烂掉了。最近微软好像明白了,又开始搞开源、搞跨平台、回归讨好开发者等。
----------------------------------------------
-
作者:
男 kinneng (kinneng) ★☆☆☆☆ -
盒子活跃会员
2015/12/29 19:50:09
7楼: 微软没有必要为垄断干些什么,其他公司的系统,根本就是烂泥扶不上壁,Windows不仅强大,也非常庞大,移动系统冲击不了什么。
----------------------------------------------
声明:本人不在论坛询问任何编程问题,请不要将我的帖子当成问题来回答。炒股一天,编程三年,不浪费时间了。 经常在外面,没空,不要找我..
作者:
男 qiuyan81 (苦恋树) ★☆☆☆☆ -
普通会员
2015/12/30 9:07:30
8楼: 微软当初是靠庞大的程序员撑起来,所以搞了net这套东西,就是想把程序员都从linux阵营都拉过来,delphi也是受到了这样的冲击.

然而在移动开发这块,没人买微软的账了,看看WP的app就知道了,不是微软你的移动os做得太烂,而是没app的os没人用.
----------------------------------------------
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行332.0313毫秒 RSS