Projekt: Text Editor



  • hallo

    ich hab folgendes Problem:

    in der Schule muss ich einen Text Editor Programmiern der so ähnlich ist wie der in Windows.

    Er soll die eigenschaft besitzen das man z.B. eine Text Datei vom Desktop nimmt und diese dann in die Textbox des Programms zieht und somit die Datei in meinem Editor geöffnet wird.

    hat einer eine Idee wie man das im C++ Builder realisiern koennte?

    Der Text eingabe bereich ist vom Typ RichEdit!

    Hier is der Code des Programms was ich bis jetzt hab:

    //---------------------------------------------------------------------------
    #include <vcl\vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    #include "Unit2.h"
    //---------------------------------------------------------------------------
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    txtfield->Clear();
    
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormResize(TObject *Sender)
    {
    txtfield->Width = Form1->ClientWidth;
    txtfield->Height = Form1->ClientHeight;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Neu1Click(TObject *Sender)
    {
    txtfield->Clear();
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Speichernunter1Click(TObject *Sender)
    {
       if (SaveDialog1->Execute() == true)
       {
           txtfield->Lines->SaveToFile(SaveDialog1->FileName);
       }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::oeffnenClick(TObject *Sender)
    {
     if (OpenDialog1->Execute() == true)
        {
           txtfield->Lines->LoadFromFile(OpenDialog1->FileName);
        }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::druckenClick(TObject *Sender)
    {
      if (PrintDialog1->Execute() == true)
        {
    //       txtfield->Lines->PrintToFile(PrintDialog1->txtfield);
        }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
    {
    
    switch (Form2->ShowModal() )
        {
        case mrYes: CanClose = true;
          if (SaveDialog1->Execute() == true)
           {
              txtfield->Lines->SaveToFile(SaveDialog1->FileName);
           };
        break;
        case mrNo: CanClose = true; break;
        case mrCancel: CanClose = false; break;
        }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ausschneidenClick(TObject *Sender)
    {
    txtfield->CutToClipboard();
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Kopieren1Click(TObject *Sender)
    {
    txtfield->CopyToClipboard();
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Ein1Click(TObject *Sender)
    {
    txtfield->PasteFromClipboard();
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::loeshcenClick(TObject *Sender)
    {
    txtfield->ClearSelection();
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FindDialog1Find(TObject *Sender)
    {
     	for (int I = 0; I < txtfield->Lines->Count; I++)
        {
         int PosReturn = txtfield->Lines->Strings[I].Pos(FindDialog1->FindText);
         	if (PosReturn) {
            	int Skipchars = 0;
                for (int J = 0; J < I; J++)
                	Skipchars += txtfield->Lines->Strings[J].Length();
                Skipchars += I*2;
                Skipchars += PosReturn - 1;
                txtfield->SetFocus();
                txtfield->SelStart = Skipchars;
                txtfield->SelLength = FindDialog1->FindText.Length();
                break;
            }
         }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::N1Click(TObject *Sender)
    {
     if (FindDialog1->Execute() == true)
        {
    
        }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ErsetzenClick(TObject *Sender)
    {
      if (ReplaceDialog1->Execute() == true)
        {
    
        }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ReplaceDialog1Replace(TObject *Sender)
    {
    for (int I = 0; I < txtfield->Lines->Count; I++)
        {
         int PosReturn = txtfield->Lines->Strings[I].Pos(ReplaceDialog1->ReplaceText);
         	if (PosReturn) {
            	int Skip = 0;
                for (int K = 0; K < I; K++)
                	Skipchars += txtfield->Lines->Strings[K].Length();
                Skip += I*2;
                Skip += PosReturn - 1;
                txtfield->SetFocus();
                txtfield->SelStart = Skip;
                txtfield->SelLength = ReplaceDialog1->ReplaceText.Length();
                break;
            }
         }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ReplaceDialog1Find(TObject *Sender)
    {
    for (int E = 0; E < txtfield->Lines->Count; E++)
        {
         int wiedergabe = txtfield->Lines->Strings[E].Pos(ReplaceDialog1->FindText);
         	if (wiedergabe) {
            	int Skip = 0;
                for (int T = 0; T < E; T++)
                	Skip += txtfield->Lines->Strings[T].Length();
                Skip += E*2;
                Skip += wiedergabe - 1;
                txtfield->SetFocus();
                txtfield->SelStart = Skip;
                txtfield->SelLength = ReplaceDialog1->FindText.Length();
                break;
            }
         }
    }
    

    Ich hab da noch ein Problem beim Drucken ich kann zwar den PrintDialog aufrufen aber ich weiss nicht wie ich ihm sagen soll was er ausdrucken soll.

    Beim Suchen und Ersetzen sind auch noch en Paar fehler:

    Suchen: Wenn ich weiter suchen drücke bleibt er beim ersten gesuchten wort

    Ersetzen: Er findet zwar das wort aber ersetzt es nicht.

    kann mir da jemand helfen?

    danke im voraus!



  • Dieser Thread wurde von Moderator/in Korbinian aus dem Forum Projekte in das Forum VCL/CLX (Borland C++ Builder) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • schau dir doch mal die hilfe des builders an

    besonders TReplaceDialog und OnReplace-Ereigniss!



  • Kaneda schrieb:

    Er soll die eigenschaft besitzen das man z.B. eine Text Datei vom Desktop nimmt und diese dann in die Textbox des Programms zieht und somit die Datei in meinem Editor geöffnet wird.

    Hierzu empfehle ich extensive Studien der BCB-FAQ (siehe gepinnter Thread in diesem forum)
    Desweiteren empfehle ich die Verwendung des Document/view-Prinzips für den Editor...



  • ser1al schrieb:

    schau dir doch mal die hilfe des builders an

    besonders TReplaceDialog und OnReplace-Ereigniss!

    hab mir das schon inner hilfe angeguckt hilft mir aber auch net so ganz weiter.

    mit Replacedialog rufe ich ja dieses:
    http://img371.imageshack.us/img371/9144/ersetzen3rv.jpg Fenster auf.

    aber ich weiss nicht wie ich das Feld "Ersetzen mit" anspreche, damit er das gesuchte Markierte Wort ersetzt.



  • Hallo

    siehe die Eigenschaft TReplaceDialog::ReplaceText in der BCB-Hilfe.

    bis bald
    akari



  • Wenn PrintDialog ausgeführt wird, dann soll der Inhalt des Richedit gedruckt werden.

    if (PrintDialog1->Execute())
      {
      Form1->RichEdit1->Print(Form1->Caption);
      }
    


  • jo danke fuer die hilfe bin schon einiges weitergekommen....

    nur das mit dem drucken und mit dem replace klappt net so ganz kann mir da einer helfen?

    thx




Anmelden zum Antworten