TObject zu String



  • Hab ein Problem.

    Wie kann ich einen Zeiger auf TObject in einen Zeiger auf String convertieren?

    String* test = (String *)(ComboBox1->Items->Objects[ComboBox1->ItemIndex]);
    String* test = dynamic_cast<String *>(Sender);ComboBox1->Items->Objects[ComboBox1->ItemIndex]);
    

    klappt alles beides nicht, oder mache ich da was falsch?
    Hab nicht so viel erfahrung mit casten und Tuts hab ich auch nich gefunden.

    Ach nochwas, ich kann den Paramater in alles möglich convertiren, sprich kann mir die Farbe oder den anzeigestyle von ner liste oder sowas neue setzen blos ich kanns einfach nich als String ausgeben lassen auf nem label oder so.

    Währe glucklich über Hilfe.

    bye

    [ Dieser Beitrag wurde am 01.02.2003 um 12:06 Uhr von Voodookiller editiert. ]



  • Und was ist String? Ich kenn nur AnsiString bzw. WideString und std::string. Gibts in der VCL tatsächlich noch eine Klasse String? 😕



  • Original erstellt von <*p>:
    Und was ist String? Ich kenn nur AnsiString bzw. WideString und std::string. Gibts in der VCL tatsächlich noch eine Klasse String? 😕

    typedef AnsiString String;
    

    😉

    ansonsten:

    String test="";
    TComboBox * DieGecasteteComboBox=dynamic_cast<TComboBox*>(Sender);
    if(DieGecasteteComboBox)
     { 
      test=DieGecasteteComboBox->Items->Strings[DieGecasteteComboBox->ItemIndex];
     }
    


  • ahhh dankeschön funzt super, nun hab ich acuh den Fehler kapiert den ich gemacht hab, hoff ich mal 🙂

    gibts auch igrnedwo nen Tut übers Casting und die Tücken und vor allem was man beachten muß?

    bye

    [ Dieser Beitrag wurde am 01.02.2003 um 17:49 Uhr von Voodookiller editiert. ]



  • ups mir is hier auch grad schwer aufgefallen das es garnich das is was ich wollte

    ComboBox1->Items->AddObject(Query1->Fields->FieldByName("Titel")->AsString, (TObject *)Query1->Fields->FieldByName("Nummer"));
    

    man kann hier an ne ComboBox zum "Text" auch noch nen Data-wert anhängen
    und wie man diesen als String zurückgewinnt wenn ich das so caste bringter mir immer nen Fehler und ich find nirgends warum



  • Überleg mal: Du castest zuerst einen AnsiString nach TObject* und dann das TObject* in ein AnsiString*****.



  • naja ich weiß ja nich komisch is das schon, aber ich versteh nich so recht warum es nicht funktionieren soll, klär mich doch bitte mal auf

    oder gibts ne andere möglichkeit einem combobox-element etwas anzuhängen so wie beim treevies



  • Nochmal etwas deutlicher. Du castest:

    1. Objekt      -> Zeiger
       (AnsiString)   (TObject*)
    
    2. Zeiger    -> Zeiger
       (TObject*)   (AnsiString*)
    


  • naja so versuch ich das ja klappt aber nich, normal sollte es ja kein prob sein, da alles Zeiger sind oder seh ich das irgendwie falsch oder was blick ich da nicht richtig

    jeder String ist ja auch blos ein Zeiger und Tobject wird da halt gefordert

    aber es klappt nicht und warum nicht mehr wollt ich eigentlich garnicht wissen

    Oder spielt da die Klassenhirrarchie ne Rolle??

    😕 😕

    "neu in C-C++ Umstieg von PHP"

    [ Dieser Beitrag wurde am 01.02.2003 um 20:40 Uhr von Voodookiller editiert. ]



  • Original erstellt von Voodookiller:
    jeder String ist ja auch blos ein Zeiger und Tobject wird da halt gefordert

    Überleg nochmal ob das stimmt.

    String A; //ist das ein String, ein Zeiger, keins von beiden oder beides?
    

    [ Dieser Beitrag wurde am 01.02.2003 um 23:02 Uhr von Eßer editiert. ]



  • jeder String ist ja auch blos ein Zeiger

    vielleicht verwechselst du C-Strings ( char*, bzw. char[] , als typedef auch LPSTR gennant) mit der String-Klasse des BCB (die intern auch auf char* aufgebaut ist) ?

    [ Dieser Beitrag wurde am 01.02.2003 um 23:52 Uhr von crass editiert. ]



  • pItem = TreeView1->Items->AddChildObject(TreeView1->Items->Item[indexmenu], Query1->Fields->FieldByName("Titel")->AsString, MyRecPtr);
    
    AnsiString suchwert = PMyRec(TreeView1->Selected->Data)->id;
    

    ich versteh nu was du meinst, aber bei nem Treeview kann ich auch ne "ergänzung" anhängen , wie ist das denn dann bei ner Combobox möglich

    [ Dieser Beitrag wurde am 02.02.2003 um 20:03 Uhr von Voodookiller editiert. ]



  • Hmmm TComboBox::Items und von dem typ schaust du mal schnell die Eigenschaften durch ok? (-;

    -junix



  • habs durchgekuckt find aber nix, deswegen frag ich ja hier 😉



  • Meinst du sowas?

    String* test = (String*)(ComboBox1->Items->Objects[ComboBox1->ItemIndex]);
    AnsiString str = *test;
    ShowMessage(str);
    


  • ComboBox1->Items->AddObject("vsIcon1", (TObject *)vsIcon);
    ComboBox1->Items->AddObject("vsList1", (TObject *)vsList);
    

    ja sowas mein ich, das sind mal 2 einträge. aber das löst das problem nicht, ich krieg das ne zugriffsverletzung wenn ich die funktion benutze



  • Ich gehe mal davon aus, dass vsIcon und vsList Strings sind. Für diese musst du natürlich Speicher allokiert haben. Das heißt:

    AnsiString* vsIcon = new AnsiString;
    *vsIcon = "Hallo Welt";
    ComboBox1->Items->AddObject("vsIcon1", (TObject*)vsIcon);
    

    Herausholen kannst du es wieder so:

    AnsiString str = *(AnsiString*)(ComboBox1->Items->Objects[ComboBox1->ItemIndex]);
    ShowMessage(str);
    


  • ich danke dir für die Hilfe

    AnsiString str = *(AnsiString*)(ComboBox1->Items->Objects[ComboBox1->ItemIndex]);
    

    das war das problem nene zeiger auf nen zeiger, aber warum denn wenn ich dich das mal noch fragen darf



  • das war das problem

    AUF WELCHES ICH SCHON VORHER DIE LÖSUNG GEPOSTET HATTE!!! Liest du dir denn die Beiträge nicht durch, die auf deine Fragen kommen??? 😡 Naja, egal. Das ist kein Zeiger auf nen Zeiger sondern eine sogenannte Dereferenzierung. Zum Beispiel so:

    int i = 5;
    int* ptr_i;
    
    ptr_i = &i;  // ptr_i zeigt jetzt auf die Adresse, in der der Wert von i steht
    *ptr_i = 6;  // bedeutet: Der Wert in dieser Adresse soll 6 sein
    ShowMessage(*ptr_i); // Zeigt diesen Wert an (6)
    ShowMessage(i); // Macht genau das gleiche
    

    ptr_i ist ein Zeiger auf nen int. Ein Sternchen davor (*ptr_i) macht ptr_i zu einer ganz normalen int-Variablen, sozusagen.

    [ Dieser Beitrag wurde am 03.02.2003 um 01:06 Uhr von WebFritzi editiert. ]



  • ja ich weiß du hattest beidesmal eigentlich das selbe geschrieben, aber erst zu dem andern posting ist mit die erleuchtung gekommen

    danke nochmal


Anmelden zum Antworten