具有挑战性的题目~~~你不想试试吗~~~谁第一个成功额外加分~~~~当然参与者均有分可得 1.好象在EDIT中没有什么属性可以使EDIT当中的文本内容显示在EDIT的中间.2.在窗口中放置三个'EDIT'要求在EDIT1中输入汉字,在EDIT2中显示其汉字对应的首字母,在DEIT3中显示其汉字首对应的五笔首个字母.例如:在DEIT1中输入'我爱你'则在EDIT2中显示'WAN',在EDIT3中显示'QEW'. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 { TEsiEdit } TEsiEdit = class(TEdit) private FAlignment: TAlignment; procedure SetAlignment(const Value: TAlignment); protected procedure CreateParams(var Params: TCreateParams); override; public constructor Create(AOwner: TComponent); override; published property Alignment: TAlignment read FAlignment write SetAlignment default taCenter; end;constructor TEsiEdit.Create(AOwner: TComponent);begin inherited; FAlignment := taCenter;end;procedure TEsiEdit.CreateParams(var Params: TCreateParams);begin inherited; case FAlignment of taCenter: Params.Style := Params.Style or ES_CENTER; taLeftJustify : Params.Style := Params.Style or ES_LEFT; taRightJustify: Params.Style := Params.Style or ES_RIGHT; end;end;procedure TEsiEdit.SetAlignment(const Value: TAlignment);begin FAlignment := Value; if Handle <> 0 then Perform(CM_RECREATEWND, 0, 0);end;可以使EDIT当中的文本内容显示在EDIT的中间. 1、参考vcl其他控件的实现方式2、拼音可以搜到,五笔没听说。。 1,显示中间的很不是很难吧, 取得你的EDIT的WIDTH值,然后取得你的每个汉字的WIDTH值(你可以估计,我以前见过这样的东西),剩下的就简单了。2,显示拼音首字母,很简单,一段函数,你调用就行了,网上到处有,你搜一下,一堆,至于五笔第一个字母,我不知道了。呵呵:) 希望你知道了,告诉我: [email protected] 呵呵,你可以调用setwindowslong的函数,这个函数可以设置textout的位置 给你一个返回拼音首字母的函数,这是我抄别人的function TCommF.GetPY(AHzStr: string): string;const ChinaCode: array[0..25, 0..1] of Integer = ((1601, 1636), (1637, 1832), (1833, 2077), (2078, 2273), (2274, 2301), (2302, 2432), (2433, 2593), (2594, 2786), (9999, 0000), (2787, 3105), (3106, 3211), (3212, 3471), (3472, 3634), (3635, 3722), (3723, 3729), (3730, 3857), (3858, 4026), (4027, 4085), (4086, 4389), (4390, 4557), (9999, 0000), (9999, 0000), (4558, 4683), (4684, 4924), (4925, 5248), (5249, 5589));var i, j, HzOrd: integer; Hz: string[2];begin result:= ''; i := 1; while i <= Length(AHzStr) do begin if (AHzStr[i] >= #160) and (AHzStr[i + 1] >= #160) then begin HzOrd := (Ord(AHzStr[i]) - 160) * 100 + Ord(AHzStr[i + 1]) - 160; for j := 0 to 25 do begin if (HzOrd >= ChinaCode[j][0]) and (HzOrd <= ChinaCode[j][1]) then begin Result := Result + char(byte('A') + j); break; end; end; Inc(i); end else Result := Result + AHzStr[i]; Inc(i); end;end;使用str:=GetPY('中华人民共和国') SetWindowLong(Edit1.Handle, GWL_STYLE, GetWindowLong(Edit1.Handle, GWL_STYLE) or ES_CENTER);Edit1.Refresh; fastreport中如何实现如下打印功能 短定长字符串(比如ID)加密用什么算法比较好? 用Delphi如何实现流程图的自动绘制? 超级诡异的问题,打印预览与打印结果不一致! 关于界面的,希望各位大侠能帮下忙! 我用流写入ACCESS数据库的图片怎样将他读出来? delphi读取mysql数据库如何只显示内容,不显示表头 高难度:点击一个网页链接时,如何使web服务器读不到真实的IP地址? 调查。 我的MIDAS程序,本机可以,客户程序拷到另外机器上就不行了! 我爱你们! 请教大侠们一个关于COM+与用户登陆的安全问题 请大家帮我解决一个问题,小弟不胜感激。在此先向大家表示感谢!
TEsiEdit = class(TEdit)
private
FAlignment: TAlignment;
procedure SetAlignment(const Value: TAlignment);
protected
procedure CreateParams(var Params: TCreateParams); override;
public
constructor Create(AOwner: TComponent); override;
published
property Alignment: TAlignment read FAlignment write SetAlignment
default taCenter;
end;constructor TEsiEdit.Create(AOwner: TComponent);
begin
inherited;
FAlignment := taCenter;
end;procedure TEsiEdit.CreateParams(var Params: TCreateParams);
begin
inherited;
case FAlignment of
taCenter:
Params.Style := Params.Style or ES_CENTER;
taLeftJustify :
Params.Style := Params.Style or ES_LEFT;
taRightJustify:
Params.Style := Params.Style or ES_RIGHT;
end;
end;procedure TEsiEdit.SetAlignment(const Value: TAlignment);
begin
FAlignment := Value;
if Handle <> 0 then Perform(CM_RECREATEWND, 0, 0);
end;可以使EDIT当中的文本内容显示在EDIT的中间.
2,显示拼音首字母,很简单,一段函数,你调用就行了,网上到处有,你搜一下,一堆,至于五笔第一个字母,我不知道了。呵呵:) 希望你知道了,告诉我: [email protected]
function TCommF.GetPY(AHzStr: string): string;
const
ChinaCode: array[0..25, 0..1] of Integer = ((1601, 1636), (1637, 1832), (1833, 2077),
(2078, 2273), (2274, 2301), (2302, 2432), (2433, 2593), (2594, 2786), (9999, 0000),
(2787, 3105), (3106, 3211), (3212, 3471), (3472, 3634), (3635, 3722), (3723, 3729),
(3730, 3857), (3858, 4026), (4027, 4085), (4086, 4389), (4390, 4557), (9999, 0000),
(9999, 0000), (4558, 4683), (4684, 4924), (4925, 5248), (5249, 5589));
var
i, j, HzOrd: integer;
Hz: string[2];
begin
result:= '';
i := 1;
while i <= Length(AHzStr) do
begin
if (AHzStr[i] >= #160) and (AHzStr[i + 1] >= #160) then
begin
HzOrd := (Ord(AHzStr[i]) - 160) * 100 + Ord(AHzStr[i + 1]) - 160;
for j := 0 to 25 do
begin
if (HzOrd >= ChinaCode[j][0]) and (HzOrd <= ChinaCode[j][1]) then
begin
Result := Result + char(byte('A') + j);
break;
end;
end;
Inc(i);
end
else Result := Result + AHzStr[i];
Inc(i);
end;
end;
使用
str:=GetPY('中华人民共和国')
Edit1.Refresh;