Überprüfung von Combo Box bei Zeicheneingabe



  • Hallo,
    In meiner ComboBox stehen einige Werte welche ich bei Eingabe suchen und anzeigen lassen möchte.
    Zum Verständnis: Ich möchte etwa so eine Funktion schreiben, wie sie z.B. der Internet Explorer unterstützt. Wenn ich eine Adresse eingebe, wird mir sofort ein entsprechender Eintrag (welcher noch in der ComboBox steht) gesucht und angezeigt. Bsp.: Eingabe von "www.c-" Verfolständigung zu "www.c-plusplus.net"

    Ich habe schon rausgefunden, dass nach der Eingabe die Markierung innerhalb der ComboBox auf den entsprechenden Eintrag gesetz wird. Auf den markierten Eintrag kann ich aber nicht zurgreifen.

    Hat jemand eine Idee???



  • Jepp das richtige Forum 🤡

    Welchen Compiler und welches OS nutzt Du denn ?

    [edit]Vergess als die Smilies auszumachen[/edit]

    [ Dieser Beitrag wurde am 15.04.2003 um 16:10 Uhr von Knuddlbaer editiert. ]



  • Ich benutzt den Borland C++ Builder 5.0 auf Windows 2000 bzw. XP



  • thread verschoben ins bcb forum Borland C++ Builder (VCL/CLX)



  • Der Thread wurde zwar in ein anderes Forum verschoben. Kann mir aber bitte doch jemand helfen?!?



  • Hidiho!

    Such mal mit der Suchfunktion nach "Autovervollständigung". Ich meine da wäre vor kurzem so ein Beitrag gewesen. 🙂



  • da kriegste auch alleine hin... die einträge einer combobox findest du in Items->Strings wieder. die kannste durchsuchen und per Pos() dann feststellen, ob die eingabe im jeweiligen string am anfang steht. dann fügst du den gefundenen string in dein eingabefeld ein und setzt eine markierung auf den reststring der noch nicht eingegeben wurde.



  • Hey danke erst mal!

    Des mit dem Box->Items->Strings hab ich schon gefunden. Aber dieses Pos() ist mir noch net ganz klar geworden.
    Die Strings kann ich ja ganz einfach auslesen. Und dieses Pos() gibt mir dann den Index des markierten Eintrag zurück, oder wie? Ich habe diese Pos() Methode net gefunden. Wo ist die???

    Nochmal danke....



  • Original erstellt von Diehler:
    Wo ist die???

    Ist deine Methode des AnsiStrings

    -junix



  • hmmmmm....naja..... ich hab etz mal ne Lösung gefunden (die auch wunderbar funktioniert), ABER ich kapier sie net so ganz.... kann mir die jemand mal ein wenig erklären ????? *dummstell*

    void __fastcall TfrmMain::ComboBox1KeyPress(TObject *Sender, char &Key)
    {
      if(Key > 31)  // Falls ASCII-Zeichen
      {
        TComboBox* pCmb = dynamic_cast<TComboBox*>(Sender);
    
        pCmb->SelText = EmptyStr;
        pCmb->Text = pCmb->Text.Insert(Key, pCmb->SelStart+1);
        int ilTextLength = pCmb->Text.Length();
        pCmb->SelStart = ilTextLength;
    
        int ilIndex = SendMessage(pCmb->Handle, CB_FINDSTRING, 0,
          (long)pCmb->Text.c_str());
    
        if(ilIndex != CB_ERR && pCmb->Text.Length())
        {
          if(!pCmb->Text.AnsiCompare(pCmb->Items->Strings[ilIndex].
            SubString(1,pCmb->Text.Length())))
          {
            pCmb->DroppedDown = true;
            pCmb->Text = pCmb->Items->Strings[ilIndex];
            pCmb->SelStart = ilTextLength;
            pCmb->SelLength=pCmb->Text.Length()-pCmb->SelStart;
          }
          else pCmb->DroppedDown = false; 
        }
        else pCmb->DroppedDown = false;   
        Key = 0;
      }
    }
    

    Edit:
    Bitte die Code-Tags benutzen. Danke!

    [ Dieser Beitrag wurde am 16.04.2003 um 09:54 Uhr von Jansen editiert. ]


Anmelden zum Antworten