Label1->Caption über Pointer beschreiben



  • Hallo,

    wenn es sprintf sein muss, hätte ich es so gemacht

    char p[100];
    strcpy(p,"Test");
    Label1->Caption = Label1->Caption.sprintf("Out: %s",p);
    

    Gruß
    Markus



  • [quote="Braunstein"]Hallo,

    Label1->Caption = p;[/cpp]

    Leider Fehler:
    [C++ Fehler] Unit1.cpp(78): E2034 Konvertierung von 'unsigned char *' nach 'AnsiString' nicht möglich



  • Du verwendest ja auch anscheinend einen "unsigned char" statt "char"-Puffer.



  • AnsiString hat keinen Konstruktor für unsigned char*. Du mußt deinen Pointer noch konvertieren. Entweder per Cast oder indem du deine unsigned char* Variable vorher in eine char* Variable kopierst.
    In deinem Beispiel war es signed char*.



  • Braunstein schrieb:

    AnsiString hat keinen Konstruktor für unsigned char*. Du mußt deinen Pointer noch konvertieren. Entweder per Cast oder indem du deine unsigned char* Variable vorher in eine char* Variable kopierst.
    In deinem Beispiel war es signed char*.

    skorpionx



  • Was hilft nicht? Bitte gewöhne dir bessere Fehlerbeschreibungen an.
    Ich hatte doch gesagt, was du machen mußt. Warum nimmst du überhaupt ein unsigned char* als Puffer?
    Ansonsten

    unsigned char p[100];
    strcpy(p,"Test");
    Label1->Caption = reinterpret_cast<char*>(p);
    

    [edit]und bitte mach keine Doppelposts [edit]



  • char p[100];
    strcpy(p,"Test");
    Label1->Caption = p;[/cpp]

    Danke!.

    Nur warum das mit der Formatierung(sprintf...) (kein Fehler bei der Übersetzung)nicht funktioniert ?

    skorpionx



  • Hallo

    Weil die Eigenschaft Caption eine (nicht konstante) Kopie des Original-Wertes im Control zurückgibt. Jede Operation darauf ist nur temporär, wenn sie nicht danach manuell wieder der Eigenschaft zugewiesen wird.
    Wie es trotzdem geht zeigt HMarkus82 in seinem Post

    /Edit : Drei Post mit fast dem gleichen Inhalt... 😉

    bis bald
    akari



  • Weil Du nur einen temporären String erzeugt hast, den Du nirgendwo zugewiesen hast. Aber auch dafür wurde schon eine Antwort gegeben:

    HMarkus82 schrieb:

    char p[100];
    strcpy(p,"Test");
    Label1->Caption = Label1->Caption.sprintf("Out: %s",p);
    


  • Du meinst das hier?

    Label1->Caption.sprintf("Test %s ",p); //So etwas bringt keinen Erfolg:
    

    Das funktioniert deswegen nicht, weil Caption keine Membervariable von TLabel ist, sondern eine Property. Das bedeutet, das hier evtl. eine Zugriffsfunktion (read/write) aufgerufen wird. Die würde dir in deinem Fall einen temporären AnsiString erzeugen, in welchen dann geschrieben wird. Die eigentliche Caption bleibt unverändert.
    Folgendes dagegen würde funktionieren.

    AnsiString tstr;
    tstr.sprintf("Test %s ",p);
    Label1->Caption = tstr;
    

Anmelden zum Antworten