读书人

lihuasoft(学习低调做人)忙再回答

发布时间: 2012-03-21 13:33:14 作者: rapoo

lihuasoft(学习低调做人)忙再回答我一。thx!
那如果打字的候光在下面用下提示呢?始:_,我打了一E之后就成:E_ 和E,E的下面有一的。
-



[解决办法]
请把上述贴子结掉(因为问题已得到解决),然后此贴问题既使我不会,也自然有高人来解答。此回复不要分。

换位思考一下,你帮人解决问题,遇到这种情况,是一种什么感受。

或许我言辞中有点过,望原谅。请勿误解。
[解决办法]
给你写了个例子, 可以实际运行的哦:

unit U_Main;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
btnQuestion1: TButton;
pnlQuestion: TPanel;
pnlAnswer: TPanel;
picAnswer: TPaintBox; //picAnswer放置在pnlAnswer中
procedure FormCreate(Sender: TObject);
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure btnQuestion1Click(Sender: TObject);
private
{ Private declarations }
sQuestion : String;
sAnswer : String;
bCancel : Boolean;
function ShowAnswer(): Integer;
function RunQuestion(): Integer;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
pnlQuestion.Caption := ' ';
pnlAnswer.Caption := ' ';
pnlQuestion.Font.Name := '宋体 ';
pnlQuestion.Font.Size := 24;
pnlQuestion.Height := 48;
pnlAnswer.Left := pnlQuestion.Left;
pnlAnswer.Top := pnlQuestion.Top + pnlQuestion.Height + 8;
pnlAnswer.Height := 48;
picAnswer.Font.Name := '宋体 ';
picAnswer.Font.Size := 24;
picAnswer.Align := alClient;
Self.KeyPreview := True;
end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
case Key of
#8 : sAnswer := Copy(sAnswer, 1, Length(sAnswer) - 1);
#27: bCancel := True;
else sAnswer := sAnswer + Key;
end;
end;

function TForm1.ShowAnswer(): Integer;
var
iLoop : Integer;
bError: Boolean;
ARect : TRect;
iX, iY: Integer;
begin
Result := 0;
ARect.Left := 0;
ARect.Top := 0;
ARect.Right := picAnswer.Width;
ARect.Bottom := picAnswer.Height;
picAnswer.Canvas.FillRect(ARect);
iY := (picAnswer.Height - picAnswer.Canvas.TextHeight( '8 ')) div 2;
iX := 0;
for iLoop := 1 to Length(sAnswer) do
begin
if iLoop > Length(sQuestion) then
bError := True
else
bError := sAnswer[iLoop] <> sQuestion[iLoop];
if bError then
begin
picAnswer.Canvas.Font.Color := clRed;
inc(Result);
end
else
picAnswer.Canvas.Font.Color := clBlack;
picAnswer.Canvas.TextOut(iX, iY, sAnswer[iLoop]);
iX := iX + picAnswer.Canvas.TextWidth(sAnswer[iLoop]);
end;
picAnswer.Canvas.Font.Color := clWhite;
picAnswer.Canvas.TextOut(iX, iY, '_ ');
end;

function TForm1.RunQuestion(): Integer;
var
sTemp : String;
begin
pnlQuestion.Caption := sQuestion;
bCancel := False;
sAnswer := ' ';
repeat
Result := ShowAnswer();
sTemp := sAnswer;
while not bCancel and (sTemp = sAnswer) do Application.ProcessMessages;
until bCancel;
end;

procedure TForm1.btnQuestion1Click(Sender: TObject);
var
iError : Integer;
begin
sQuestion := 'Hello, world! ';


iError := RunQuestion();
ShowMessage (Format( 'Total = %d, Input= %d, Error = %d ', [Length(sQuestion), Length(sAnswer), iError]));
end;

end.

读书人网 >.NET

热点推荐