Kleines Memo-Problem



  • if (Compare->Input1->Lines->Strings[Zaehler] == Compare->Input2->Lines->Strings[Zaehler])
    {

    Compare->Result->Lines[Zaehler] = "Line " + IntToStr(Zaehler) + " is synonym!";

    }

    Warum funzt denn das nicht, wie kann ich einezelne Zeilen in einem Memofeld ansprechen. In der Abfrage klappts so, bei der zuweisung nicht mehr, oder wenn ich eine bstimmte Zeile herauskopieren möchte.

    Mache ich es so:
    Compare->Result->Lines->Strings[Zaehler] = "Line " + IntToStr(Zaehler) + " is synonym!";

    spricht der Builder die einzelnen Zeilen auch nicht richtig an. Kann mir jemand helfen?

    PS: folgende Fehlermeldung:
    C++ Fehler] Unit1.cpp(26): E2285 Keine Übereinstimmung für 'TStrings::operator =(AnsiString)' gefunden



  • Aus

    Giovanni_ schrieb:

    Compare->Result->Lines->Strings[Zaehler] = "Line " + IntToStr(Zaehler) + " is synonym!";

    mach

    Compare->Result->Lines->Strings[Zaehler] = AnsiString("Line ") + IntToStr(Zaehler) + AnsiString(" is synonym!");
    

    Aber wahrscheinlich wird gleich wieder junix mit seiner Format-Methode kommen. 😉



  • [EDIT] sorry, beitrag entfernt, hatte ihn falsch verstanden



  • WebFritzi schrieb:

    Aber wahrscheinlich wird gleich wieder junix mit seiner Format-Methode kommen. 😉

    Ne, grad dir zu Leide heute ned (o;

    -junix



  • Hallo,

    erst mal Danke für die Antwort. Hätte aber noch 2 Fragen!

    1. Warum muss man zuerst den String in AnsiString umwandeln? Warum erstellt der CBuilder nicht einfach einen AnsiString in der Zeichenkette "Text"???

    2. Mit folgendem Befehl:
    Compare->Result->Lines->Strings[2] = AnsiString("Line ") + IntToStr(Zaehler) + AnsiString(" is not synonym!");

    Kann ich nur Zeilen ändern, die schon vorhanden sind, oder? Will ich neue Zeilen hinzufügen, muss ich ÄDD verwenden???

    Danke noch mals



  • Giovanni schrieb:

    Will ich neue Zeilen hinzufügen, muss ich ÄDD verwenden???

    wird auch "Add" genannt. 😉 und genau dass mußt du nehmen um neue zeilen hinzuzufügen.



  • Meint ich auch! Danke!



  • Giovanni schrieb:

    1. Warum muss man zuerst den String in AnsiString umwandeln? Warum erstellt der CBuilder nicht einfach einen AnsiString in der Zeichenkette "Text"???

    AnsiString ist eine komplexe klasse welche in der VCL konsequent verwendet wird um Strings zu verarbeiten. Ausserdem macht der C++ Builder gar nix. Entweder macht das die Sprache (und damit der Compiler) oder eine Klasse (wie z.B. AnsiString).

    Dass das nicht einfach automatisch geht liegt daran, dass der Compiler ja nicht wissen kann, dass du eine Zeichenkette haben willst. Er kann nur raten. Und wenn er rumrät, und mehrere Möglichkeiten wahrschienlich wäre, dann streckt er alle viere in die Luft und schreit nach Hilfe. (Compiler Error). Es kann aber auch sein, dass er nur eine Lösung sieht, die aber nicht genau das macht was du willst. Dann hast du dafür merkwürdige effekte.

    Dieses Verhalten ergibt sich aus einer der Stärken von C(++) die in solchen Fällen leider zur Schwäche wird., dass man vieles auf tiefem level machen kann und gleichzeitig aber auch einen sehr abstrakten Level halten kann.

    Giovanni schrieb:

    2. Mit folgendem Befehl:
    Compare->Result->Lines->Strings[2] = AnsiString("Line ") + IntToStr(Zaehler) + AnsiString(" is not synonym!");

    Kann ich nur Zeilen ändern, die schon vorhanden sind, oder? Will ich neue Zeilen hinzufügen, muss ich ÄDD verwenden???

    Beantworte dir die Frage selbst: Was bedeutet (engl.) Add zu deutsch? Lies die obige Zeile mal als deutsche Übersetzung... Aus genau dem grund predigen immer alle, man solle sinnvolle Funktions/Methoden und Variablennamen verwenden.

    -junix


Anmelden zum Antworten