C++ Items->add

schlumpi

Grünschnabel
Guten Morgen,

kurz mein Problem Code :

int CALLBACK EnumFontFamExProc(
ENUMLOGFONTEX *lpelfe, // logical-font data
NEWTEXTMETRICEX *lpntme, // physical-font data
DWORD FontType, // type of font
LPARAM lParam // application-defined data
)
{
TComboBox *Font_auswahl = (TComboBox *)(lParam);
AnsiString sFontName( (char*)lpelfe->elfFullName );
Font_auswahl->Items->Add( sFontName );
}

bei jedem durchlauf bekommt der "sFontName" string einen neuen Font zugewiesen.

mein Problem dabei ist, das er einige mal den gleichen Font hintereinander zugewiesen bekommt.

d.h. in meinem Programm habe ich in der Auswahlliste vllt. sogar 10x Arial stehen.

ich bräuchte eig. nur einen vergleich, dass das Programm nicht 2x den gleichen Font in die Items reinschreibt.

kann mir da einer von euch weiterhelfen?

gruß

schlumpi
 
Hi,

hat deine Combobox keine Funktion, die einem für einen bestimmten String den Index auf die Position in der Liste zurückgibt?

In der MFC Combobox gibt es so was.

Da schreibt man das dann so:

Code:
if( m_combo.FindString(newString) == -1 ) {
    m_combo.AddString(newString);
else {
    // String existiert schon
}

Wenn deine Combobox so was nicht liefert, schreib dir einfach eine eigene Funktion, die das vorhandensein des neuen Strings überprüft. In etwa so

Code:
    bool doesStringExist(String s) {
         for( int i = 0; i < combo.GetItemCount(); i++ ) {
             if( combo.GetString(i) == s ) {
                 return true;
             }
         }
         return false;         
    }

Oder zu schreibst deine eingefügten Strings in ein Array oder eine Hashmap(schnellerer Zugriff auf Elemente), welche du vor dem Einfügen überprüfst.

Schönen Gruß,

Peter
 
Zuletzt bearbeitet:
Ich danke dir für die schnelle antwort..

habe das nun so gelöst

Code:
{
	// Liste mit Fontnamen
	TComboBox *Font_auswahl = (TComboBox *)(lParam);

	// char* in AnsiString konvertieren
	AnsiString sFontName( (char*)lpelfe->elfFullName );

	// Font noch nicht in der Liste?
	if (Font_auswahl->Items->IndexOf(sFontName) == -1)
		// dann rein damit
		Font_auswahl->Items->Add( sFontName );
}

danke!

gruß
Flo
 
Zurück