Editor - Beispiel

Angabe

Dieses Visual C + + Programm realisiert einen Texteditor mit verschiedenen Einstellungen und Funktionen (Schriftart, Schriftformatierung, Suchen, Ersetzen, Drucken, Anzahl Zeichen, Anzahl Wörter, Cursorposition).

Screenshot

Screenshot Editor

Lösung - Unit.cpp

//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "EditorUnit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Ende1Click(TObject *Sender)
{
	Form1->Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Neu1Click(TObject *Sender)
{
	RichEdit1->Clear();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Speichern1Click(TObject *Sender)
{
	if (SaveDialog1->Execute()) {
		RichEdit1->Lines->SaveToFile(SaveDialog1->FileName);
		Label1->Caption="Dateiname: "+SaveDialog1->FileName;
	}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ffnen1Click(TObject *Sender)
{
	if (OpenDialog1->Execute()) {
		RichEdit1->Lines->LoadFromFile(OpenDialog1->FileName);
		Label1->Caption="Dateiname: "+OpenDialog1->FileName;
	}
}
 
//---------------------------------------------------------------------------
void Zeichenanzahl()
{
   //	Form1->Label2->Caption="Zeichenanzahl: "+IntToStr(Form1->RichEdit1->Text.Length());
    int ZA=0;
	for(int i=0; i<Form1->RichEdit1->Lines->Count;i++)          //Für jede Zeile
	{
		String str = Form1->RichEdit1->Lines->Strings[i].c_str();
		for(int j=0; j<str.Length();j++)                             //Für jedes Zeichen in einer Zeile
		{
			if(Form1->RichEdit1->Lines->Strings[i].c_str()[j]!=' ')
				ZA=ZA+1;
		}
	}
	Form1->Label2->Caption="Zeichenanzahl: " + IntToStr(ZA);
}
 
void Wortanzahl()
{
	int words=0, lastchar=0;
	int laenge=0;
 
	//Trim() schneidet am Ende und am Anfang die Leerzeichen und Umbrüche weg
	for(int i=0; i<Form1->RichEdit1->Text.Trim().Length();i++)
	{
		if(Form1->RichEdit1->Text.Trim().c_str()[i]==13 || Form1->RichEdit1->Text.Trim().c_str()[i]==32)
		{
			if(lastchar==13 || lastchar==10 || lastchar==32)
			{
				//Kein weiteres Wort, da bevor bereits ein Leerzeichen bzw. Zeilenumbruch
			}
			else
			{
				words++;
			}
		}
		lastchar=Form1->RichEdit1->Text.Trim().c_str()[i];
	}
	words++;
	Form1->Label4->Caption="Wörter: " + IntToStr(words);
}
 
void __fastcall TForm1::RichEdit1Change(TObject *Sender)
{
	Zeichenanzahl();
	Wortanzahl();
}
//---------------------------------------------------------------------------
 
void CursorPosition() {
	Form1->Label3->Caption="Cursorposition: "+VarToStr(1+Form1->RichEdit1->CaretPos.y)+"|"+VarToStr(1+Form1->RichEdit1->CaretPos.x);
}
 
void __fastcall TForm1::RichEdit1KeyUp(TObject *Sender, WORD &Key, TShiftState Shift)
{
	CursorPosition();
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Ersetzen1Click(TObject *Sender)
{
    ReplaceDialog1->Position=Point(RichEdit1->Left + RichEdit1->Width, RichEdit1->Top);
	ReplaceDialog1->Execute();
}
 
void __fastcall TForm1::SearchBox1Change(TObject *Sender)
{
	int FoundAt=0;
	TSearchTypes mySearchTypes = TSearchTypes();
	mySearchTypes << stWholeWord;
	FoundAt=RichEdit1->FindTextW(SearchBox1->Text, 0, RichEdit1->Text.Length(),mySearchTypes);
	if(FoundAt!=-1)
	{
		RichEdit1->SetFocus();
		RichEdit1->SelStart=FoundAt;
		RichEdit1->SelLength=SearchBox1->Text.Length();
	}
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Suchen1Click(TObject *Sender)
{
	FindDialog1->Execute();
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FindDialog1Find(TObject *Sender)
{
	int FoundAt=0;
	TSearchTypes mySearchTypes = TSearchTypes();
	if(FindDialog1->Options.Contains(frMatchCase))
	{
		mySearchTypes << stMatchCase;
	}
	if(FindDialog1->Options.Contains(frWholeWord))
	{
		mySearchTypes << stWholeWord;
	}
	FoundAt=RichEdit1->FindTextW(FindDialog1->FindTextW, 0, RichEdit1->Text.Length(),mySearchTypes);
	if(FoundAt!=-1)
	{
		RichEdit1->SetFocus();
		RichEdit1->SelStart=FoundAt;
		RichEdit1->SelLength=FindDialog1->FindTextW.Length();
	}
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::ReplaceDialog1Find(TObject *Sender)
{
	int FoundAt=0;
	TSearchTypes mySearchTypes = TSearchTypes();
	if(ReplaceDialog1->Options.Contains(frMatchCase))
	{
		mySearchTypes << stMatchCase;
	}
	if(ReplaceDialog1->Options.Contains(frWholeWord))
	{
		mySearchTypes << stWholeWord;
	}
	FoundAt=RichEdit1->FindTextW(ReplaceDialog1->FindTextW, 0, RichEdit1->Text.Length(),mySearchTypes);
	if(FoundAt!=-1)
	{
		RichEdit1->SetFocus();
		RichEdit1->SelStart=FoundAt;
		RichEdit1->SelLength=ReplaceDialog1->FindTextW.Length();
	}
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::ReplaceDialog1Replace(TObject *Sender)
{
	int FoundAt=0;
	TReplaceFlags flags;
	TSearchTypes mySearchTypes = TSearchTypes();
	if(ReplaceDialog1->Options.Contains(frMatchCase))
	{
		mySearchTypes << stMatchCase;
	}
	else
	{
        flags << rfIgnoreCase;
    }
	if(ReplaceDialog1->Options.Contains(frWholeWord))
	{
		mySearchTypes << stWholeWord;
	}
	if(ReplaceDialog1->Options.Contains(frReplaceAll))
	{
		flags << rfReplaceAll;
		RichEdit1->Text=StringReplace(RichEdit1->Text,ReplaceDialog1->FindTextW,ReplaceDialog1->ReplaceTextW,flags);
	}
	else
	{
		FoundAt=RichEdit1->FindTextW(ReplaceDialog1->FindTextW, 0, RichEdit1->Text.Length(),mySearchTypes);
		if(FoundAt!=-1)
		{
			RichEdit1->SetFocus();
			RichEdit1->SelStart=FoundAt;
			RichEdit1->SelLength=ReplaceDialog1->FindTextW.Length();
			RichEdit1->SelText=ReplaceDialog1->ReplaceTextW;
		}
	}
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
	if(	RichEdit1->SelAttributes->Style.Contains(fsBold))
	{
        RichEdit1->SelAttributes->Style=RichEdit1->SelAttributes->Style >> fsBold;
		RichEdit1->SelText=RichEdit1->SelText;
	}
	else {
		RichEdit1->SelAttributes->Style=RichEdit1->SelAttributes->Style << fsBold;
		RichEdit1->SelText=RichEdit1->SelText;
	}
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::SpeedButton2Click(TObject *Sender)
{
	if(	RichEdit1->SelAttributes->Style.Contains(fsItalic))
	{
		RichEdit1->SelAttributes->Style=RichEdit1->SelAttributes->Style >> fsItalic;
		RichEdit1->SelText=RichEdit1->SelText;
	}
	else
	{
        RichEdit1->SelAttributes->Style=RichEdit1->SelAttributes->Style << fsItalic;
		RichEdit1->SelText=RichEdit1->SelText;
    }
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::SpeedButton3Click(TObject *Sender)
{
    if(	RichEdit1->SelAttributes->Style.Contains(fsUnderline))
	{
		RichEdit1->SelAttributes->Style=RichEdit1->SelAttributes->Style >> fsUnderline;
		RichEdit1->SelText=RichEdit1->SelText;
	}
	else
	{
		RichEdit1->SelAttributes->Style=RichEdit1->SelAttributes->Style << fsUnderline;
		RichEdit1->SelText=RichEdit1->SelText;
    }
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::SpeedButton4Click(TObject *Sender)
{
	RichEdit1->SelAttributes->Style = TFontStyles();
	RichEdit1->SelText=RichEdit1->SelText;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::SpeedButton5Click(TObject *Sender)
{
	FontDialog1->Execute();
	RichEdit1->Font=FontDialog1->Font;
	RichEdit1->SelText=RichEdit1->SelText;
}
//---------------------------------------------------------------------------
 
void RichEditToCanvas(TRichEdit* RichEdit, TCanvas *Canvas)
{
	int y=500;
	int ZA=10;
	int x=500;
 
	AnsiString zeile;
 
	for(int i=0; i<Form1->RichEdit1->Lines->Count;i++)
	{
		zeile=Form1->RichEdit1->Lines->Strings[i];
		Canvas->TextOutW(x,y,zeile);
		y=y+ZA+Canvas->TextHeight(zeile);
	}
}
 
void __fastcall TForm1::Drucken1Click(TObject *Sender)
{
	if(PrintDialog1->Execute())
	{
		Printer()->BeginDoc();
		RichEditToCanvas(RichEdit1, Printer()->Canvas);
        Printer()->EndDoc();
    }
}
//---------------------------------------------------------------------------
 
 
void __fastcall TForm1::Bildladen1Click(TObject *Sender)
{
	OpenPictureDialog1->Execute();
	Form1->Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);
}
//---------------------------------------------------------------------------

Download

02Editor.zip