用到什么组件, 请去下载Microsoft Tablet PC Platform SDK了解一下...
使用例子, 例子写得很简单, 不懂的自已摸索... uses HandWriter;
Procedure TForm1.FormCreate(Sender: TObject); Var I: Integer; Begin HandWrite := THandWriteX.Create(self); HandWrite.InitHandWrite(WritePanel.Handle); HandWrite.OnRecognizerContext := HandWriteRecognizer; SetLength(ResultBtn, HandWrite.MaxResult); For I := 0 To HandWrite.MaxResult - 1 Do ResultBtn[I] := TSpeedButton(FindComponent(format('SpeedButton%d', [I + 1]))); ResultList := TStringList.Create; End;
Procedure TForm1.HandWriteRecognizer(ASender: TObject; Const ContextList: WideString); Var I: Integer; Begin Timer.Enabled := false; Timer.Enabled := True;
ResultList.Text := ContextList; For I := 0 To ResultList.Count - 1 Do ResultBtn[I].Caption := ResultList[I]; End;
Procedure TForm1.ClearBtnClick(Sender: TObject); Var I: Integer; Begin For I := Low(ResultBtn) To High(ResultBtn) Do ResultBtn[I].Caption := ''; ResultEdit.Clear; HandWrite.ClearStroke; End;
Procedure TForm1.SendText(Text: String); Const CtNum: Array['0'..'9'] Of Byte = (VK_NUMPAD0, VK_NUMPAD1, VK_NUMPAD2, VK_NUMPAD3, VK_NUMPAD4, VK_NUMPAD5, VK_NUMPAD6, VK_NUMPAD7, VK_NUMPAD8, VK_NUMPAD9); Var I, J: Integer; ch: Byte; SCanCode: Byte; S: String; Begin I := 1; While I <= Length(Text) Do Begin ch := Byte(Text[I]); If IsDBCSLeadByte(ch) Then Begin S := IntToStr(Word(Text[I]) Shl 8 + Word(Text[I + 1])); keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), 0, 0); For J := 1 To Length(S) Do Begin ch := CtNum[S[J]]; SCanCode := MapVirtualKey(Word(ch), 0); keybd_event(Word(ch), SCanCode, 0, 0); keybd_event(Word(ch), SCanCode, KEYEVENTF_KEYUP, 0); End; keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), KEYEVENTF_KEYUP, 0); Inc(I, 2); End Else Begin SCanCode := MapVirtualKey(Word(ch), 0); keybd_event(ch, SCanCode, KEYEVENTF_EXTENDEDKEY Or 0, 0); keybd_event(ch, SCanCode, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0); Inc(I); End; End; End; Procedure TForm1.SpeedButtonClick(Sender: TObject); Var wsStr: WideString; Begin { wsStr := ResultEdit.Text; wsStr := wsStr + (Sender As TSpeedButton).Caption; ResultEdit.Text := wsStr; } SendText((Sender As TSpeedButton).Caption); HandWrite.ClearStroke; Timer.Enabled := false; //无点击时,自动选择第一个 End;
Procedure TForm1.TimerTimer(Sender: TObject); Begin SpeedButton1.Click; End;
Procedure TForm1.ColorBox1Change(Sender: TObject); Begin HandWrite.PenColor := ColorBox1.Selected; End;
Procedure TForm1.SpinEdit1Change(Sender: TObject); Begin HandWrite.penWidth := SpinEdit1.Value; End;
Procedure TForm1.FormClose(Sender: TObject; Var Action: TCloseAction); Begin ResultList.free; HandWrite.free; End;