unit redit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls,ExtCtrls, Grids;

type
  TForm1 = class(TForm)
    RichEdit1: TRichEdit;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Label2: TLabel;
    PrintDialog1: TPrintDialog;
    Label3: TLabel;
    Button9: TButton;
    Button10: TButton;
    Button11: TButton;
    Button12: TButton;
    Button13: TButton;
    Bevel1: TBevel;
    Label4: TLabel;
    procedure Button13Click(Sender: TObject);
    procedure Button12Click(Sender: TObject);
    procedure Button11Click(Sender: TObject);
    procedure Edit2Change(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure RichEdit1SelectionChange(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button10Click(Sender: TObject);
begin
   Richedit1.Lines.SaveToFile('nowy.rtf');
end;
(*
procedure SetTabStops(RichEdit:TRichEdit; Tabulatory:array of integer);
var i:integer;
begin
  with RichEdit.Paragraph do
  begin
    TabCount:=High(Tabulatory)+1;
    for i:=0 to TabCount-1 do
     tab[i]:=Tabulatory[i];
  end;
end;
*)
//wyświetlanie tekstu w 3 kolumnach z wykorzystaniem tabulatorów
procedure TForm1.Button11Click(Sender: TObject);
begin
   Richedit1.Clear;

   with Richedit1 do
   begin
    Paragraph.Alignment:=taLeftJustify; //do lewej
    Paragraph.TabCount:=2; //dwa tabulatory, #9 to kod klawisza tab
    Paragraph.Tab[0]:=90;//standardowe są co 50 pikseli
    Paragraph.Tab[1]:=180;

    Lines.Add('Jan Kowalski'+#9+'elektronik'+#9+'Wrocław');
    Lines.Add('Adam Nowak'+#9+'lekarz'+#9+'Warszawa');
    Lines.Add('Rafał Wolski'+#9+'informatyk'+#9+'Katowice');
   end;
end;

procedure TForm1.Button12Click(Sender: TObject);
var poz,i: integer;
    s,pom: string;
begin
  with Richedit1 do
  begin
    s:=Edit1.Text+' '+Edit2.Text;
    pom:=Lines.Strings[3];

    //wykasowanie poprzednio wstawionego tekstu
    Delete(pom,Length('Imię i nazwisko: ')+1,Length(pom));

    //wstawienie tekstu z okienek Edit1 i Edit2
    Insert(s,pom,Length('Imię i nazwisko: ')+1);
    Lines.Strings[3]:=pom;

    //obliczenie liczby znaków w trzech wierszach
    poz:=0;
    for i:=0 to 2 do poz:=poz+Length(Lines.Strings[i])+2;

    //zaznaczenie wstawionego tekstu w celu zmiany atrybutów
    Selstart:=poz+Length('Imię i nazwisko: ');
    SelLength:=Length(s);

    //zmiana koloru, kroju, stylu i rozmiaru czcionki wstawionego tekstu
    SelAttributes.Color:=clRed;
    SelAttributes.Name:='Arial';
    SelAttributes.Style:=SelAttributes.Style+[fsBold];
    SelAttributes.Size:=12;
    //odznaczenie tekstu
    SelLength:=0;
  end;
end;

procedure TForm1.Button13Click(Sender: TObject);
begin
  Richedit1.PlainText:=true;
  Richedit1.Lines.LoadfromFile('AA.rtf');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  RichEdit1.Clear; Richedit1.Font.Size:=12;
  with RichEdit1 do
  begin
    Paragraph.Alignment:=taRightJustify; //do prawej
    Lines.Add(Formatdatetime('dd.mm.yyyy',date));

    Paragraph.Alignment:=taLeftJustify; //do lewej
    Lines.Add('Katowice');

    Paragraph.Alignment:=taCenter; //wysrodkuj
    Lines.Add('Tytuł pisma');

    Paragraph.Alignment:=taLeftJustify;
    Lines.Add('Nazwisko i imię: ');

    Paragraph.FirstIndent:=10;
    Lines.Add('__________________________');

    Lines.Add('         Ramki         ');
    Lines.Add('__________________________');

    // ustaw numerowanie
    Paragraph.Numbering := nsBullet;
    Lines.Add('jeden');
    Lines.Add('dwa');
    Lines.Add('trzy');

    Paragraph.Numbering := nsNone; //odwołaj numerowanie

    Paragraph.Alignment := taCenter;//wysrodkuj
    Lines.Add(''); //pusta linia
    Lines.Add('Tekst bez numerowania');
 end;

end;

procedure TForm1.Button2Click(Sender: TObject);
var poz,i,s:integer;
begin
 //obliczyć położenie napisu: Imię i nazwisko: - nr ost. litery
 { s:=0;
  with RichEdit1 do
  begin
    //obliczenie liczby znaków w trzech wierszach
    for i:=0 to 2 do s:=s+Length(lines.Strings[i])+2;

    Selstart:=s+Length('Imię i nazwisko: ');
    Sellength:=Length(Edit1.Text)+Length(Edit2.Text)+1;
   // selStart:=0; SelLength:=-1; //zaznaczenie całego tekstu

  end; }
  //albo znaleźć tekst nazwisko


//  poz:=Richedit1.FindText('Nazwisko',0,Length(Richedit1.Lines.text),[]);//[stWholeWord]);
  Richedit1.SetFocus;
  Richedit1.CaretPos:=Point(0,0);
  poz:=Richedit1.FindText(Edit1.Text,0,Length(Richedit1.Lines.Text),[]);
  if poz=-1 then ShowMessage('Nie znaleziono słowa nazwisko')//stMatchCase
  else
  begin
    Richedit1.SetFocus;
    Richedit1.SelStart:=poz;//+Length('Nazwisko:');
    Richedit1.Sellength:=Length(Edit1.Text)+Length(Edit2.Text)+1;
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  RichEdit1.SelAttributes.Color:=clGreen;
  RichEdit1.SelAttributes.Style:=RichEdit1.SelAttributes.Style+[fsItalic];
end;

//ustawienie kursora na początku pierwszej linii(nr 0)
procedure TForm1.Button4Click(Sender: TObject);
begin
  Richedit1.CaretPos:=Point(0,0); //(nr_kolumny,nr_wiersza)
  Richedit1.SetFocus;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
//Printdialog1.Copies:=1;
Printdialog1.FromPage:=1;
Printdialog1.ToPage:=1;
//Printdialog1.Options:=[poPageNums];
Printdialog1.PrintRange:=prPageNums;//prAllpages, prSelection

if Printdialog1.Execute then RichEdit1.Print('Drukowanie');//drukuje tekst z richedit
end;

//wyświetlenie wszystkich linii na etykiecie
//wyswietlenie liczby znaków w kolejnych liniach na etykiecie
procedure TForm1.Button6Click(Sender: TObject);
var s,i:integer;
begin
 s:=0;
 Label2.Caption:='';
 with RichEdit1 do
 begin
   for i:=0 to Lines.Count-1 do
   begin
   //  Label2.Caption:=Label2.Caption+#13+Lines.Strings[i];//InttoStr(Length(Lines.Strings[i]));
     Label2.Caption:=Label2.Caption+#13+InttoStr(Length(Lines.Strings[i]));
     s:=s+Length(lines.Strings[i]);
   end;
   Label2.Caption:=Label2.Caption+#13+Inttostr(s);
   Label2.Caption:=label2.Caption+#13+InttoStr(Length(Lines.text));
 end;
 //dlugosc linii pierwszej(nr 0) to Lines.String[0]+2 Cr i Lf
end;

procedure TForm1.Button7Click(Sender: TObject);
 //var plotno: TImage;
 //  tabela: TStringgrid;
begin
   Label3.Caption:=InttoStr(Length(Richedit1.Lines.Text));
(*  plotno:=TImage.Create(Self); //.Create;
  //plotno.Picture.Bitmap.LoadFromFile('imprezacz1.bmp');
  //plotno.AutoSize:=true;
  //plotno.Parent:=Richedit1;
    tabela:=TStringgrid.Create(self);
  with tabela do
  begin
     FixedCols:=0;
     FixedRows:=0;
     Align:=alClient;
     Options:=Options+[goEditing];
     Parent:=Richedit1;
  end;*)

end;

procedure TForm1.Button8Click(Sender: TObject);
begin
   Richedit1.PlainText:=false;
   Richedit1.Lines.LoadFromFile('Nowy.rtf');
end;

//kursor na koniec
procedure TForm1.Button9Click(Sender: TObject);
var ost_wiersz, ost_kol:integer;
begin
  ost_wiersz:=Richedit1.Lines.Count-1;
  ost_kol:=Length(Richedit1.Text);
  Richedit1.CaretPos:=Point(ost_kol,ost_wiersz); //(nr_kolumny,nr_wiersza)
  Richedit1.SetFocus;
end;

procedure TForm1.Edit2Change(Sender: TObject);
begin
//  Button2.Caption:='Zaznacz text '+Edit1.Text+' '+Edit2.Text;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  RichEdit1.HideSelection:=false;
end;

procedure TForm1.RichEdit1SelectionChange(Sender: TObject);
//var
  //CharPos: TPoint;
begin
{  CharPos.Y := SendMessage(RichEdit1.Handle, EM_EXLINEFROMCHAR, 0,
    RichEdit1.SelStart);
  CharPos.X := (RichEdit1.SelStart -
    SendMessage(RichEdit1.Handle, EM_LINEINDEX, CharPos.Y, 0));
  Inc(CharPos.Y);
  Inc(CharPos.X);
  StatusBar1.Panels[0].Text := Format('%d,%d', [CharPos.Y, CharPos.X]);}
end;


end.
