转贴一个别人写的函数,很好用的,比如说GetPYChar('王')就返回W,有这个函数做基础,应该可以解决... Function GetPYChar(hzchar: string): char; begin case Word(hzchar[1]) shl 8 + Word(hzchar[2]) of $B0A1..$B0C4: result := 'A'; $B0C5..$B2C0: result := 'B'; $B2C1..$B4ED: result := 'C'; $B4EE..$B6E9: result := 'D'; $B6EA..$B7A1: result := 'E'; $B7A2..$B8C0: result := 'F'; $B8C1..$B9FD: result := 'G'; $B9FE..$BBF6: result := 'H'; $BBF7..$BFA5: result := 'J'; $BFA6..$C0AB: result := 'K'; $C0AC..$C2E7: result := 'L'; $C2E8..$C4C2: result := 'M'; $C4C3..$C5B5: result := 'N'; $C5B6..$C5BD: result := 'O'; $C5BE..$C6D9: result := 'P'; $C6DA..$C8BA: result := 'Q'; $C8BB..$C8F5: result := 'R'; $C8F6..$CBF9: result := 'S'; $CBFA..$CDD9: result := 'T'; $CDDA..$CEF3: result := 'W'; $CEF4..$D188: result := 'X'; $D1B9..$D4D0: result := 'Y'; $D4D1..$D7F9: result := 'Z'; else result := char(0); end; end;
谢谢,下面是一位朋友的方案,共同分享一下Combo的自动查询技术 Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Public Const CB_FINDSTRING = &H14C Private Sub Combo1_Change() Dim iStart As Integer Dim sString As String Static iLeftOff As Integer iStart = 1 iStart = Combo1.SelStart If iLeftOff <> 0 Then Combo1.SelStart = iLeftOff iStart = iLeftOff End If sString = CStr(Left(Combo1.Text, iStart)) Combo1.ListIndex = SendMessage(Combo1.hwnd,B_FINDSTRING, -1, ByVal CStr( Left( ombo1.Text, iStart)))
If Combo1.ListIndex = -1 Then iLeftOff = Len(sString) combo1.Text = sString End If Combo1.SelStart = iStart iLeftOff = 0 End Sub 静态变量 iLeftOff 指定了字符长度。
Function GetPYChar(hzchar: string): char;
begin
case Word(hzchar[1]) shl 8 + Word(hzchar[2]) of
$B0A1..$B0C4: result := 'A';
$B0C5..$B2C0: result := 'B';
$B2C1..$B4ED: result := 'C';
$B4EE..$B6E9: result := 'D';
$B6EA..$B7A1: result := 'E';
$B7A2..$B8C0: result := 'F';
$B8C1..$B9FD: result := 'G';
$B9FE..$BBF6: result := 'H';
$BBF7..$BFA5: result := 'J';
$BFA6..$C0AB: result := 'K';
$C0AC..$C2E7: result := 'L';
$C2E8..$C4C2: result := 'M';
$C4C3..$C5B5: result := 'N';
$C5B6..$C5BD: result := 'O';
$C5BE..$C6D9: result := 'P';
$C6DA..$C8BA: result := 'Q';
$C8BB..$C8F5: result := 'R';
$C8F6..$CBF9: result := 'S';
$CBFA..$CDD9: result := 'T';
$CDDA..$CEF3: result := 'W';
$CEF4..$D188: result := 'X';
$D1B9..$D4D0: result := 'Y';
$D4D1..$D7F9: result := 'Z';
else
result := char(0);
end;
end;
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal
hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any)
As Long
Public Const CB_FINDSTRING = &H14C
Private Sub Combo1_Change()
Dim iStart As Integer
Dim sString As String
Static iLeftOff As Integer
iStart = 1
iStart = Combo1.SelStart
If iLeftOff <> 0 Then
Combo1.SelStart = iLeftOff
iStart = iLeftOff
End If
sString = CStr(Left(Combo1.Text, iStart))
Combo1.ListIndex = SendMessage(Combo1.hwnd,B_FINDSTRING, -1, ByVal CStr(
Left( ombo1.Text, iStart)))
If Combo1.ListIndex = -1 Then
iLeftOff = Len(sString)
combo1.Text = sString
End If
Combo1.SelStart = iStart
iLeftOff = 0
End Sub
静态变量 iLeftOff 指定了字符长度。