RichEdit und SpeicherPfad



  • Hallo Leute,

    Ich habe mal wiede 3 Fragen:

    Kann man bei einem RichEdit Feld die Cursor Position festlegen und verändern?
    Ich kann zwar mit

    TPoint c=RichEdit1->CaretPos;
    

    bestimmen, wo sich der Cursor befindet, aber verändern? Praktisch in etwa: *SetCursorPos* = (8,1)?

    Wie kann ich denn den Pfad festellen, wo sich meine Anwendung auf dem Rechner befindet und dort einen Order erstellen?

    Ich habe in meiner Anwendung einen TOpenDialog und ein TreeView. Projekte die über den OpenDialog geöffnet werden bekommen einen Eintrag in die TreeView. Wenn ich jetzt die TreeView mit SaveToFile(""); speichern möchte, speichert er mir die Datei dorthin, wo ich zuletzt über den OpenDialog eine Datei eingelesen habe.

    Wie kann ich denn den erstellten Ordner unter 2. ansprechen, damit immer dort die Datei durch TreeView->SaveToFile("") entsteht?

    Vielen Dank und liebe Grüße
    Todd



  • zu 1.: siehe SetCaretPos in der BCB-Hilfe

    zu 2.: siehe ExtractFilePath, Application->ExeName und CreateDir in der BCB-Hilfe

    zu 3.: siehe OpenDialog -> InitalDir in der BCB-Hilfe



  • Hallo

    Nicht zu vergessen : Ein Thread ein Thema, ein Thema ein Thread.

    bis bald
    akari



  • Erstmal vielen Dank für deine Hilfe.
    Habe aber immernoch Probleme bzw. Fragen bei der Umsetzung.

    Zu 1.

    Mit dem Befehl SetCaretPos(int x,int y) innerhalb eines Eventereignisses tut sich bei mir leider gar nix. Der Cursor springt wie üblich eine Zeile tiefer.

    Zu 2.
    Habe das jetzt folgendermaßen gemacht, aber er nimmt die Zeichenkette cp nicht an:

    void __fastcall TForm1::FormCreate(TObject *Sender)
    {exepath=ExtractFilePath(Application->ExeName) + "history";
     char* cp = new char[exepath.Length()+1];
     strcpy(cp,exepath.c_str());
     if (!DirectoryExists(cp))
        {
         if (!CreateDir(cp))
         throw Exception("Erstellen des Ordners felgeschlagen");
      }
    

    Dabei steht in cp folgendes drin: cp = "S:\\temp\\history"

    Zu 3.

    Wäre erledigt wenn ich nur wüsste warum er cp nicht annimmt.

    Wäre super wenn ich das Problem lösen könnte.

    Vielen Dank und liebe Grüße



  • Hi,

    zu 1. Wann soll das denn ausgeführt werden?

    zu 2.

    Berichtigt mich wenn ich falsch liege, aber ich glaub "history" ist in deinem Fall - durch fehlendes "\" - kein verzeichnis.

    AnsiString exepath=ExtractFilePath(Application->ExeName) + "history\\"; 
    if (!DirectoryExists(exepath))
    {
       if (!CreateDir(exepath))
       {
          ShowMessage("Fehler");
       }
    }
    

    mfg, Micha!



  • Hallo,

    zu 1.

    Beim KeyDown Event werden verschiedene Abfragen gemacht.
    z.b.:

    else if (Key=='\r') //User hat Enter gedrückt
              {if (c.x<str.Length() || c.x==4) //falls Cursor mitten im String oder an Pos (4,y) ist Enter nicht möglich
                   RichEdit1->ReadOnly=true;
               else {RichEdit1->Lines->Add(">> ");indexm=indexm+1; // Andernfalls füge in die nächste Zeile den konstanten String ">> " ein
                     TreeView1->Items->AddChild(Node1,str);}} //string (str) wird in ein TreeView als Child Item geschrieben
    
    // Weitere Abfrage erfolgen sind hier aber nicht wichtig. Wenn ich jetzt mittels
    // RichEdit1->Lines->Add(">> ") operiere fügt er in die Folgezeile ein ">> " ein
    // springt aber mit dem Cursor noch eine Zeile tiefer.
    
       >> Enter wurde gedrückt
       >>
       | [e]larr[/e] Cursor hier an der falschen Stelle, richtig wäre eine Zeile
                     drüber nach >> !
    

    Zu 2.

    In cp steht: "S:\\temp\\history"
    CreateDir(cp) erstellt kein Verzeichnis!
    CreateDir("S:\\temp\\history") erstellt das Verzeichnis!

    Das ist mein großes Problem.

    Danke und liebe Grüße
    Todd

    PS: Ein Thema ein Thread→gemerkt für die Zukunft. 😉



  • zu 2.
    Hast du es mal so wie RandomAccess85 gemacht? Wozu erzeugst du überhaupt dieses cp?



  • Heidanei Braunstein,

    du hast Recht.

    Das mit dem CreateDir funktioniert wie RA85 es vorgeschlagen hat. Aus irgendwelchen Gründen war ich fest davon überzeugt, dass CreateDir keinen AnsiString annimmt und hab deswegen cp erzeugt.

    Bleibt nur noch die Frage mit der CursorPosition offen.

    Vielen Dank
    Todd



  • int lastline = RichEdit1->Lines->Count - 1;
    RichEdit1->SelStart = RichEdit1->Perform(EM_LINEINDEX, lastline, 0) + RichEdit1->Lines->Strings[lastline].Length();
    

    Siehe auch die FAQ im Abschnitt RichEdit.


Anmelden zum Antworten