请问那位高手有最方便,代码最少,最好是在正个系统中都能使用的方法!用回车代替TAB的方法!   还有一个问题就是!怎么才能得到一个中文字符串的每一个汉字的拼音的第一个字每!请高手指教!

解决方案 »

  1.   

    发送一个消息: 
     If key = 13 then
          postMessage(TWinControl(awctrl).Handle,WM_KEYDOWN,VK_TAB,0);
      

  2.   

    上次你的问题解决没? 
     if key=13 then
     keybd_event(9,0,0,0);
      

  3.   

    if key = #13 then 
      begin 
        key := #0;
        perform(WM_NEXTDLGCTL, 0, 0); //{移动到下一个控件}
      end;
      

  4.   

    function GetPY(const sScrStr: string): string;
    var
      iCount: integer;
      sHz, sPYM: string;
    begin
      iCount := 1;
      while iCount <= length(sScrStr) do
        begin
          sHz := COPY(sScrStr, iCount, 2);
          case WORD(sHz[1]) shl 8 + WORD(sHz[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..$D1B8: result := 'X';
            $D1B9..$D4D0: result := 'Y';
            $D4D1..$D7F9: result := 'Z';
            else
              result := '';
          end;
          if Result = '' then
            begin
              sPYM := sPYM + COPY(sScrStr, iCount, 1);
              iCount := iCount + 1;
            end
          else
            begin
              sPYM := sPYM + Result;
              iCount := iCount + 2;
            end;
          Result := sPYM;
        end; //end While
    end;
      

  5.   

    function GetSpellIndexChar(const ChinaChar: string): char;
    begin
      case WORD(chinachar[1]) shl 8 + WORD(chinachar[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;function GetSpellStr(const ChinaStr: string): string;
    var
      i: integer;
      ChinaChar: string;
      StrTo_Char: string;begin
      i := 1;
      while i <= Length(ChinaStr) do
      begin
        if Ord(ChinaStr[i]) > 126 then
        begin
          ChinaChar := copy(ChinaStr, i, 2);
          StrTo_Char := StrTo_Char + CommDM.GetSpellIndexChar(ChinaChar);
          i := i + 2;
        end else
          i := i + 1;
      end;
      result := StrTo_Char;
    end;
      

  6.   

    Fist Declare procedure DoEnterAsTab in private:
        procedure DoEnterAsTab(var Msg:TMsg; var Handled:boolean);
    Second:
       procedure Tform1.DoEnterAsTab(var Msg:TMsg; var Handled:boolean);
        begin
          if msg.message=WM_KEYDOWN  then
           begin
             msg.wparam=VK_RETURN then
             keybd_event(VK_TAB,0,0,0);
           end;
        end;
    third: In the form1.oncreate 
       Application.OnMessage:=DoEnterAsTab;这样就可以在整个工程中TAB->Enter ..
                         
      

  7.   

    同意,不过发觉在有DBMEMO时不大好用
    if key = #13 then 
      begin 
        key := #0;
        perform(WM_NEXTDLGCTL, 0, 0); //{移动到下一个控件}
      end;
      

  8.   

    if Key = #13 then PerForm(WM_NEXTDLGCTL,0,0);
      

  9.   

    一个思路
    汉字内码=汉字区位码+A0A0H
    在private中定义:
      function getpy(hzchar:string):char;
    FUNCTION TFORM1.GETPY(HZCHAR:STRING):CHAR;
    CASE WORD(HZCHAR[1])SH1(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';
    $B9C1..$B9FD:RESULT:='G';
    $B9FE..$BBF6:RESULT:='H';
    $BBF7..$BFA5:RESULT:='I';
    $BFA6..$C0AB:RESULT:='J';
    $C0AC..$C2E7:RESULT:='K';
    $C2E8..$C4C2:RESULT:='L';
    $C4C3..$C5B5:RESULT:='M';
    $C5B6..$C5BD:RESULT:='N';
    $C5BE..$C6D9:RESULT:='O';
    $C6DA..$C8BA:RESULT:='P';
    $C8BB..$C8F5:RESULT:='Q';
    $C8F6..$CBF9:RESULT:='R';
    $CBFA..$CDD9:RESULT:='S';
    $CDDA..$CEF3:RESULT:='T';
    $CEF4..$D188:RESULT:='X';
    $D189..$D4D0:RESULT:='Y';
    $D4D1..$D7F9:RESULT:='Z';
      

  10.   

    回车代替TAB的方法if key = #13 then 
      begin 
        key := #0;
        perform(WM_NEXTDLGCTL, 0, 0); //{移动到下一个控件}
      end;中文字符串的每一个汉字的拼音
    全部拼音:
    unit HzSpell;interfaceuses
      Windows, Messages, SysUtils, Classes;type
      THzSpell = class(TComponent)
      protected
        FHzText: String;
        FSpell: String;
        FSpellH: String;
        procedure SetHzText(const Value: String);
        function GetHzSpell: String;
        function GetPyHead: String;
      public
        class function PyOfHz(Hz: String): String;
        class function PyHeadOfHz(Hz: String): String;
      published
        property HzText: String read FHzText write SetHzText;
        property HzSpell: String read GetHzSpell;
        property PyHead: String read GetPyHead;
      end;{$I HzSpDat2.inc}procedure Register;function GetHzPy(HzChar: PChar; Len: Integer): String;
    function GetHzPyFull(HzChar: String): String;
    function GetHzPyHead(HzChar: PChar; Len: Integer): String;
    function GetPyChars(HzChar: String): String;implementationprocedure Register;
    begin
      RegisterComponents('System', [THzSpell]);
    end;function GetHzPy(HzChar: PChar; Len: Integer): String;
    var
      C: Char;
      Index: Integer;
    begin
      Result := '';
      if (Len > 1) and (HzChar[0] >= #129) and (HzChar[1] >= #64) then
      begin
        //是否为 GBK 字符
        case HzChar[0] of
          #163:  // 全角 ASCII
          begin
            C := Chr(Ord(HzChar[1]) - 128);
            if C in ['a'..'z', 'A'..'Z', '0'..'9', '(', ')', '[', ']'] then
              Result := C
            else
              Result := '';
          end;
          #162: // 罗马数字
          begin
            if HzChar[1] > #160 then
              Result := CharIndex[Ord(HzChar[1]) - 160]
            else
              Result := '';
          end;
          #166: // 希腊字母
          begin
            if HzChar[1] in [#$A1..#$B8] then
              Result := CharIndex2[Ord(HzChar[1]) - $A0]
            else if HzChar[1] in [#$C1..#$D8] then
              Result := CharIndex2[Ord(HzChar[1]) - $C0]
            else
              Result := '';
          end;
          else
          begin  // 获得拼音索引
            Index := PyCodeIndex[Ord(HzChar[0]) - 128, Ord(HzChar[1]) - 63];
            if Index = 0 then
              Result := ''
            else
              Result := PyMusicCode[Index];
          end;
        end;
      end
      else if Len > 0 then
      begin
        //在 GBK 字符集外, 即半角字符
        if HzChar[0] in ['a'..'z', 'A'..'Z', '0'..'9', '(', ')', '[', ']'] then
          Result := HzChar[0]
        else
          Result := '';
      end;
    end;function GetHzPyFull(HzChar: String): String;
    var
      i, len: Integer;
      Py: String;
      function IsDouByte(C: Char): Boolean;
      begin
        Result := C >= #129;
      end;
    begin
      Result := '';
      i := 1;
      while i <= Length(HzChar) do
      begin
        if IsDouByte(HzChar[i]) and (Length(HzChar) - i > 0) then
          len := 2
        else
          len := 1;
        Py := GetHzPy(@HzChar[i], len);
        Inc(i, len);
        if (Result <> '') and (Py <> '') then
          Result := Result + ' ' + Py           // + ' '
        else
          Result := Result + Py;
      end;
    end;function GetHzPyHead(HzChar: PChar; Len: Integer): String;
    begin
      Result := Copy(GetHzPy(HzChar, Len), 1, 1);
    end;function GetPyChars(HzChar: String): String;
    var
      i, len: Integer;
      Py: String;
      function IsDouByte(C: Char): Boolean;
      begin
        Result := C >= #129;
      end;
    begin
      Result := '';
      i := 1;
      while i <= Length(HzChar) do
      begin
        if IsDouByte(HzChar[i]) and (Length(HzChar) - i > 0) then
          len := 2
        else
          len := 1;
        Py := GetHzPyHead(@HzChar[i], len);
        Inc(i, len);
        Result := Result + Py;
      end;
    end;{ THzSpell }function THzSpell.GetHzSpell: String;
    begin
      if FSpell = '' then
      begin
        Result := GetHzPyFull(FHzText);
        FSpell := Result;
      end
      else Result := FSpell;
    end;function THzSpell.GetPyHead: String;
    begin
      if FSpellH = '' then
      begin
        Result := GetPyChars(FHzText);
        FSpellH := Result;
      end
      else Result := FSpellH;
    end;class function THzSpell.PyHeadOfHz(Hz: String): String;
    begin
      Result := GetPyChars(Hz);
    end;class function THzSpell.PyOfHz(Hz: String): String;
    begin
      Result := GetHzPyFull(Hz);
    end;procedure THzSpell.SetHzText(const Value: String);
    begin
      FHzText := Value;
      FSpell := '';
      FSpellH := '';
    end;end.
      

  11.   

    if key = #13 then 
      begin 
        key := (Tab键的ASCII码)
      end;
    最方便了
      

  12.   

    在onkeypress事件中
    begin
      if Key=#13 then selectnext(TControl(sender),true,true);
    end;
    当然事先把各个控件的taborder按顺序排好。
    汉字拼音字头用“ comerliang(天地良心) ”的方法比较好。