Visit our Sponsor   Visit our Sponsor
delphi3000.com - the free delphi knowledge platform
delphi3000.com - the free delphi knowledge platform
500 Users Online NOW
Have a look at your member-status

connecting people's knowledge


  - Recent ArticlesRSS feed for Recent Articles on delphi3000.com
  - List of All Articles
  - Top Viewed Articles
  - Articles (+Attachem.)
  - Articles Of Interest
  - Categories
  - Top Uploader
  - Search
  - Index

  - My Home
  - Submit an Article
  - My Articles
  - My Personal Data
  - My Bookmarks
  - Activities
  - Login/Logout

  - Sign Up
  - Why Sign Up
  - Newsletter

  - Press
  - Advertise

  - Contact
  - Feedback





Community
Borland
ClubeDelphi
Dr. Bob
UK-BUG
Delphi Meetings
Planeta Delphi



Loremo - the 1.5 liter car coming in 2009




Startblatt.de






Share this article with friendsShare this article with friends
Rate this articleRate this article - to keep the quality of delphi3000.com !
Comment this article or read through previous comments (1)


A Simple Notepad with Delphi 6…Component available for this articleFormat this article printer-friendly!Bookmark function is only available for registered users!
Sharing my ideas…
Product:
Delphi all versions
Category:
Others
Skill Level:
Scoring:
Last Update:
03/13/2002
Search Keys:
delphi delphi3000 article borland vcl code-snippet Notepad, Memo, Dialogs
Times Scored:
5
Visits:
4488
Uploader: S S B Magesh Puvananthiran
Company:
Reference: N/A
Component Download: http://www.delphi3000.com/article/3098/DelphiNotepad.zip
 
Question/Problem/Abstract:
A Simple Notepad with Delphi (though reinventing the wheel)
Answer:



It’s been quite a long time since I wrote my last article. Recently I just developed a simple notepad, though with some bugs and limitations, with Delphi 6 Enterprise Trial Edition. I just would like to share the code with our community and help to improve further. It might look like reinventing the wheel; but I just wanted to develop some products like this with Delphi. The first thing that striked my mind is this Notepad…

All the functions available in the normal notepad will be available with this and also I have added two more things in the Options menu (Want Tabs and Want Returns); by default, it’s been checked. And you can change the background color of the notepad, though you cannot save. Some functions like find text, replace have to be revisited though. If you people have any ideas on that, please feel free to share/update the code.

The following is the entire code:

---------------------------------------------
Project Code:  DelphiNotepad.dpr
---------------------------------------------

program DelphiNotepad;

uses
  Forms,
  NotePad1 in 'NotePad1.pas' {Form1},
  GoToForm in 'GoToForm.pas' {frmGoTo};

{$R *.res}

begin
  Application.Initialize;
  Application.Title := 'Delphi Notepad';
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TfrmGoTo, frmGoTo);
  Application.Run;
end.


-----------------------------------------
Unit One Code: Notepad1.pas
-----------------------------------------

unit NotePad1;
{
Unit Name : NotePad1.pas
Developed By : S S B Magesh Puvananthiran
Description : A simple notepad developed with Delphi 6
}
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,ConvUtils, Menus, ComCtrls,StrUtils, ExtDlgs ;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    MainMenu1: TMainMenu;
    FileMenu: TMenuItem;
    FileNew: TMenuItem;
    FileOpen: TMenuItem;
    EditMenu: TMenuItem;
    Undo: TMenuItem;
    N1: TMenuItem;
    Cut: TMenuItem;
    Copy: TMenuItem;
    Paste: TMenuItem;
    SelectAll1: TMenuItem;
    FormatMenu: TMenuItem;
    WordWrap: TMenuItem;
    FileSave: TMenuItem;
    Exit2: TMenuItem;
    FileExit: TMenuItem;
    SelectAll: TMenuItem;
    Font: TMenuItem;
    HelpMenu: TMenuItem;
    AboutNotepad: TMenuItem;
    TimeDate: TMenuItem;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    StatusBar1: TStatusBar;
    FontDialog1: TFontDialog;
    SaveAs1: TMenuItem;
    FilePrint: TMenuItem;
    N2: TMenuItem;
    PrintDialog1: TPrintDialog;
    PrinterSetupDialog1: TPrinterSetupDialog;
    FindDialog1: TFindDialog;
    N3: TMenuItem;
    Find: TMenuItem;
    FindNext: TMenuItem;
    Replace: TMenuItem;
    GoTo1: TMenuItem;
    ReplaceDialog1: TReplaceDialog;
    BackgroundColor: TMenuItem;
    ColorDialog1: TColorDialog;
    Options1: TMenuItem;
    WantTabs1: TMenuItem;
    WantReturns1: TMenuItem;
    procedure FileExitClick(Sender: TObject);
    procedure AboutNotepadClick(Sender: TObject);
    procedure FileOpenClick(Sender: TObject);
    procedure FileSaveClick(Sender: TObject);
    procedure FileNewClick(Sender: TObject);
    procedure WordWrapClick(Sender: TObject);
    procedure FontClick(Sender: TObject);
    procedure UndoClick(Sender: TObject);
    procedure CutClick(Sender: TObject);
    procedure CopyClick(Sender: TObject);
    procedure PasteClick(Sender: TObject);
    procedure SelectAllClick(Sender: TObject);
    procedure TimeDateClick(Sender: TObject);
    procedure Memo1Change(Sender: TObject);
    procedure Memo1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Memo1KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormCreate(Sender: TObject);
    procedure SaveAs1Click(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure FilePrintClick(Sender: TObject);
    procedure PageSetupClick(Sender: TObject);
    procedure FindDialog1Find(Sender: TObject);
    procedure FindClick(Sender: TObject);
    procedure FindNextClick(Sender: TObject);
    procedure ReplaceClick(Sender: TObject);
    procedure ReplaceDialog1Replace(Sender: TObject);
    procedure ReplaceDialog1Find(Sender: TObject);
    procedure GoTo1Click(Sender: TObject);
    procedure BackgroundColorClick(Sender: TObject);
    procedure WantTabs1Click(Sender: TObject);
    procedure WantReturns1Click(Sender: TObject);
  private
    procedure OpenTheFile;
    function SaveChanges : Boolean;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses GoToForm;

{$R *.dfm}

procedure TForm1.AboutNotepadClick(Sender: TObject);
begin
  ShowMessage('   Delphi Notepad ' + #13 + '   Developed with Borland Delphi 6 Enterprise Trial Edition');
end;

procedure TForm1.FileExitClick(Sender: TObject);
begin
  Close;
end;

procedure TForm1.FileOpenClick(Sender: TObject);
begin
  if not(Memo1.Modified)then
    OpenTheFile
  else if (Memo1.Modified) then
  begin
    ModalResult := MessageDlg('Save Changes?',mtConfirmation,[mbYes,mbNo,mbCancel],0);
    if ((ModalResult = mrYes) and (SaveChanges)) or (ModalResult = mrNo) then
    begin
       OpenTheFile;
       Memo1.Modified := False;
    end;
  end;
end;

procedure TForm1.FileSaveClick(Sender: TObject);
begin
  if SaveChanges then
    Memo1.Modified := False;
end;

procedure TForm1.FileNewClick(Sender: TObject);
begin
  if not(Memo1.Modified) then
  begin
    Memo1.Clear;
    Form1.Caption := 'UnNamed - Delphi Notepad';
    OpenDialog1.FileName := '';
    SaveDialog1.FileName := '';
  end
  else if (Memo1.Modified) then
  begin
    ModalResult := MessageDlg('Save Changes?',mtConfirmation,[mbYes,mbNo,mbCancel],0);
    if (ModalResult = mrYes) and (SaveChanges) then
    begin
       Memo1.Clear;
       Form1.Caption := 'UnNamed - Delphi Notepad';
       Memo1.Modified := False;
       OpenDialog1.FileName := '';
       SaveDialog1.FileName := '';
    end
    else if ModalResult = mrNo then
    begin
      Memo1.Clear;
      Form1.Caption := 'UnNamed - Delphi Notepad';
      OpenDialog1.FileName := '';
      SaveDialog1.FileName := '';
      Memo1.Modified := False;
    end;
  end;
end;

procedure TForm1.OpenTheFile;
begin
  if OpenDialog1.Execute then
  begin
    Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
    Form1.Caption := OpenDialog1.FileName + ' - ' + 'Delphi Notepad';
  end;
end;

function TForm1.SaveChanges : Boolean;
begin
  Result := False;
  if (OpenDialog1.FileName = '') and (SaveDialog1.FileName = '') then
  begin
    if SaveDialog1.Execute then
    begin
      Screen.Cursor := crHourGlass;
      StatusBar1.SimpleText := 'Saving...';
      Memo1.Lines.SaveToFile(SaveDialog1.FileName);
      Form1.Caption := SaveDialog1.FileName + ' - ' + 'Delphi Notepad';
      StatusBar1.SimpleText := 'Ready';
      Screen.Cursor := crDefault;
      Result := True;
    end;
  end
  else
  begin
    Screen.Cursor := crHourGlass;
    StatusBar1.SimpleText := 'Saving...';
    if OpenDialog1.FileName <> '' then
    begin
      Memo1.Lines.SaveToFile(OpenDialog1.FileName);
      Form1.Caption := OpenDialog1.FileName + ' - ' + 'Delphi Notepad';
    end
    else if SaveDialog1.FileName <> '' then
    begin
      Memo1.Lines.SaveToFile(SaveDialog1.FileName);
      Form1.Caption := SaveDialog1.FileName + ' - ' + 'Delphi Notepad';
    end;

    StatusBar1.SimpleText := 'Ready';
    Screen.Cursor := crDefault;
    Result := True;
  end;
end;

procedure TForm1.WordWrapClick(Sender: TObject);
begin
  if WordWrap.Checked then
  begin
    Memo1.WordWrap := True;
    Memo1.ScrollBars := ssVertical;
  end
  else
  begin
    Memo1.WordWrap := False;  
    Memo1.ScrollBars := ssBoth;
  end;
end;

procedure TForm1.FontClick(Sender: TObject);
begin
  if FontDialog1.Execute then
  begin
    Memo1.Font := FontDialog1.Font;
    Memo1.Font.Color := FontDialog1.Font.Color;
  end;
end;

procedure TForm1.UndoClick(Sender: TObject);
begin
  if (Memo1.Modified) and (Memo1.CanUndo) then
    Memo1.Undo;
end;

procedure TForm1.CutClick(Sender: TObject);
begin
  Memo1.CutToClipboard;
end;

procedure TForm1.CopyClick(Sender: TObject);
begin
  Memo1.CopyToClipboard;
end;

procedure TForm1.PasteClick(Sender: TObject);
begin
  Memo1.PasteFromClipboard;
end;

procedure TForm1.SelectAllClick(Sender: TObject);
begin
  Memo1.SelectAll;
end;

procedure TForm1.TimeDateClick(Sender: TObject);
begin
  Memo1.SelText := DateToStr(Now) + TimeToStr(Time);
end;

procedure TForm1.Memo1Change(Sender: TObject);
begin
  if (Memo1.Modified) and (Memo1.CanUndo) then
    Undo.Enabled := True
  else
    Undo.Enabled := False;
end;

procedure TForm1.Memo1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Memo1.SelText <> '' then
  begin
    Cut.Enabled := True;
    Copy.Enabled := True;
  end
  else
  begin
    Cut.Enabled := False;
    Copy.Enabled := False;
  end;
end;

procedure TForm1.Memo1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Memo1.SelText <> '' then
  begin
    Cut.Enabled := True;
    Copy.Enabled := True;
  end
  else
  begin
    Cut.Enabled := False;
    Copy.Enabled := False;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Form1.Caption := 'UnNamed - Delphi Notepad';
end;

procedure TForm1.SaveAs1Click(Sender: TObject);
begin
  if SaveDialog1.Execute then
  begin
    Memo1.Lines.SaveToFile(SaveDialog1.FileName);
    Form1.Caption := SaveDialog1.FileName + ' - Delphi Notepad';
    Memo1.Clear;
    Memo1.Lines.LoadFromFile(SaveDialog1.FileName);
  end;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if (Memo1.Modified) then
  begin
    ModalResult := MessageDlg('Save Changes?',mtConfirmation,[mbYes,mbNo,mbCancel],0);
    if ((ModalResult = mrYes) and (SaveChanges)) or (ModalResult = mrNo) then
       CanClose := True
    else
       CanClose := False;
  end
  else if not(Memo1.Modified) then
    CanClose := True;
end;

procedure TForm1.FilePrintClick(Sender: TObject);
begin
  if PrintDialog1.Execute then
    Print
  else
    PrinterSetupDialog1.Execute;
end;

procedure TForm1.PageSetupClick(Sender: TObject);
begin
  PrinterSetupDialog1.Execute;
end;

procedure TForm1.FindDialog1Find(Sender: TObject);
var
  I, J, PosReturn, SkipChars: Integer;
  CursorPos : TPoint;
begin
  CursorPos := Memo1.CaretPos;
  if frDown in FindDialog1.Options then
  begin
    for I := CursorPos.Y + 1 to Memo1.Lines.Count do
    begin
      PosReturn := Pos(FindDialog1.FindText,Memo1.Lines[I]);
      if (PosReturn <> 0) then
      begin
        SkipChars := 0;
        for J := 0 to I - 1 do
          SkipChars := SkipChars + Length(Memo1.Lines[J]);
        SkipChars := SkipChars + (I*2);
        SkipChars := SkipChars + PosReturn - 1;

        Memo1.SelStart := SkipChars;
        Memo1.SelLength := Length(FindDialog1.FindText);
        Break;
      end;
    end;
  end
  else
  begin
    for I := CursorPos.Y - 1 downto 0 do
    begin
      PosReturn := Pos(FindDialog1.FindText,Memo1.Lines[I]);
      if PosReturn <> 0 then
      begin
        SkipChars := 0;
        for J := 0 to I - 1 do
          SkipChars := SkipChars + Length(Memo1.Lines[J]);
        SkipChars := SkipChars + (I*2);
        SkipChars := SkipChars + PosReturn - 1;

        Memo1.SelStart := SkipChars;
        Memo1.SelLength := Length(FindDialog1.FindText);
        Break;
      end;
    end;
  end;
end;

procedure TForm1.FindClick(Sender: TObject);
begin
  FindDialog1.Execute;
end;

procedure TForm1.FindNextClick(Sender: TObject);
begin
  FindDialog1Find(nil);
end;

procedure TForm1.ReplaceClick(Sender: TObject);
begin
  ReplaceDialog1.Execute;
end;

procedure TForm1.ReplaceDialog1Replace(Sender: TObject);
var
  CursorPos : TPoint;
  I, J, SkipChars, PosReturn : integer;
begin
  if frReplace in ReplaceDialog1.Options then
    Memo1.SelText := ReplaceDialog1.ReplaceText
  else if frReplaceAll in ReplaceDialog1.Options then
  begin
    CursorPos := Memo1.CaretPos;
    for I := CursorPos.Y + 1 to Memo1.Lines.Count do
    begin
      PosReturn := Pos(ReplaceDialog1.FindText,Memo1.Lines[I]);
      if PosReturn <> 0 then
      begin
        SkipChars := 0;
        for J := 0 to I - 1 do
          SkipChars := SkipChars + Length(Memo1.Lines[J]);
        SkipChars := SkipChars + (I*2);
        SkipChars := SkipChars + PosReturn - 1;

        Memo1.SelStart := SkipChars;
        Memo1.SelLength := Length(ReplaceDialog1.FindText);
        Memo1.SelText := ReplaceDialog1.ReplaceText;
      end;
    end;
  end;
end;

procedure TForm1.ReplaceDialog1Find(Sender: TObject);
var
  I, J, PosReturn, SkipChars: Integer;
  CursorPos : TPoint;
begin
  CursorPos := Memo1.CaretPos;
  for I := CursorPos.Y + 1 to Memo1.Lines.Count do
  begin
    PosReturn := Pos(ReplaceDialog1.FindText,Memo1.Lines[I]);
    if PosReturn <> 0 then
    begin
      SkipChars := 0;
      for J := 0 to I - 1 do
        SkipChars := SkipChars + Length(Memo1.Lines[J]);
      SkipChars := SkipChars + (I*2);
      SkipChars := SkipChars + PosReturn - 1;

      Memo1.SelStart := SkipChars;
      Memo1.SelLength := Length(ReplaceDialog1.FindText);
      Break;
    end;
  end;
end;

procedure TForm1.GoTo1Click(Sender: TObject);
begin
  frmGoTo.ShowModal;
end;

procedure TForm1.BackgroundColorClick(Sender: TObject);
begin
  if ColorDialog1.Execute then
    Memo1.Color := ColorDialog1.Color;
end;

procedure TForm1.WantTabs1Click(Sender: TObject);
begin
  if WantTabs1.Checked then
    Memo1.WantTabs := True
  else
    Memo1.WantTabs := False;
end;

procedure TForm1.WantReturns1Click(Sender: TObject);
begin
  if WantReturns1.Checked then
    Memo1.WantReturns := True
  else
    Memo1.WantReturns := False;
end;

end.

-----------------------------------------------
Unit One Form File : Notepad1.dfm
-----------------------------------------------

object Form1: TForm1
  Left = 160
  Top = 107
  Width = 579
  Height = 414
  ActiveControl = Memo1
  Caption = 'Delphi Notepad'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  Menu = MainMenu1
  OldCreateOrder = False
  Position = poScreenCenter
  OnCloseQuery = FormCloseQuery
  OnCreate = FormCreate
  PixelsPerInch = 96
  TextHeight = 13
  object Memo1: TMemo
    Left = 0
    Top = 0
    Width = 571
    Height = 349
    Align = alClient
    BevelInner = bvNone
    Color = clWhite
    HideSelection = False
    ScrollBars = ssBoth
    TabOrder = 0
    WantTabs = True
    WordWrap = False
    OnChange = Memo1Change
    OnKeyUp = Memo1KeyUp
    OnMouseUp = Memo1MouseUp
  end
  object StatusBar1: TStatusBar
    Left = 0
    Top = 349
    Width = 571
    Height = 19
    Panels = <>
    SimplePanel = True
    SimpleText = 'Ready'
  end
  object MainMenu1: TMainMenu
    Left = 256
    Top = 176
    object FileMenu: TMenuItem
      Caption = '&File'
      object FileNew: TMenuItem
        Caption = '&New'
        ShortCut = 16462
        OnClick = FileNewClick
      end
      object FileOpen: TMenuItem
        Caption = '&Open...'
        ShortCut = 16463
        OnClick = FileOpenClick
      end
      object FileSave: TMenuItem
        Caption = '&Save'
        ShortCut = 16467
        OnClick = FileSaveClick
      end
      object SaveAs1: TMenuItem
        Caption = 'Save &As...'
        OnClick = SaveAs1Click
      end
      object Exit2: TMenuItem
        Caption = '-'
      end
      object FilePrint: TMenuItem
        Caption = '&Print...'
        ShortCut = 16464
        OnClick = FilePrintClick
      end
      object N2: TMenuItem
        Caption = '-'
      end
      object FileExit: TMenuItem
        Caption = 'E&xit'
        OnClick = FileExitClick
      end
    end
    object EditMenu: TMenuItem
      Caption = '&Edit'
      object Undo: TMenuItem
        Caption = '&Undo'
        Enabled = False
        ShortCut = 16474
        OnClick = UndoClick
      end
      object N1: TMenuItem
        Caption = '-'
      end
      object Cut: TMenuItem
        Caption = 'C&ut'
        Enabled = False
        ShortCut = 16472
        OnClick = CutClick
      end
      object Copy: TMenuItem
        Caption = '&Copy'
        Enabled = False
        ShortCut = 16451
        OnClick = CopyClick
      end
      object Paste: TMenuItem
        Caption = '&Paste'
        ShortCut = 16470
        OnClick = PasteClick
      end
      object SelectAll1: TMenuItem
        Caption = '-'
      end
      object Find: TMenuItem
        Caption = '&Find...'
        ShortCut = 16454
        OnClick = FindClick
      end
      object FindNext: TMenuItem
        Caption = 'Find &Next...'
        ShortCut = 114
        OnClick = FindNextClick
      end
      object Replace: TMenuItem
        Caption = '&Replace'
        ShortCut = 16456
        OnClick = ReplaceClick
      end
      object GoTo1: TMenuItem
        Caption = '&Go To...'
        ShortCut = 16455
        OnClick = GoTo1Click
      end
      object N3: TMenuItem
        Caption = '-'
      end
      object SelectAll: TMenuItem
        Caption = 'Select &All'
        ShortCut = 16449
        OnClick = SelectAllClick
      end
      object TimeDate: TMenuItem
        Caption = 'Time/Date'
        ShortCut = 116
        OnClick = TimeDateClick
      end
    end
    object Options1: TMenuItem
      Caption = '&Options'
      object WantTabs1: TMenuItem
        AutoCheck = True
        Caption = '&Want Tabs'
        Checked = True
        OnClick = WantTabs1Click
      end
      object WantReturns1: TMenuItem
        AutoCheck = True
        Caption = 'Want &Returns'
        Checked = True
        OnClick = WantReturns1Click
      end
    end
    object FormatMenu: TMenuItem
      Caption = '&Format'
      object WordWrap: TMenuItem
        AutoCheck = True
        Caption = '&WordWrap'
        OnClick = WordWrapClick
      end
      object Font: TMenuItem
        Caption = '&Font...'
        OnClick = FontClick
      end
      object BackgroundColor: TMenuItem
        Caption = '&Background Color...'
        OnClick = BackgroundColorClick
      end
    end
    object HelpMenu: TMenuItem
      Caption = '&Help'
      object AboutNotepad: TMenuItem
        Caption = '&About Delphi Notepad'
        OnClick = AboutNotepadClick
      end
    end
  end
  object OpenDialog1: TOpenDialog
    DefaultExt = '*.txt'
    Filter = 'Text Files|*.txt|All Files|*.*'
    InitialDir = 'C:\MyDocuments'
    Title = 'Open File...'
    Left = 328
    Top = 192
  end
  object SaveDialog1: TSaveDialog
    DefaultExt = '*.txt'
    Filter = 'Text Files|*.txt|All Files|*.*'
    InitialDir = 'C:\'
    Options = [ofOverwritePrompt, ofHideReadOnly, ofEnableSizing]
    Title = 'Save File...'
    Left = 312
    Top = 136
  end
  object FontDialog1: TFontDialog
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clWindowText
    Font.Height = -11
    Font.Name = 'MS Sans Serif'
    Font.Style = []
    MinFontSize = 0
    MaxFontSize = 0
    Left = 272
    Top = 192
  end
  object PrintDialog1: TPrintDialog
    Options = [poPrintToFile, poPageNums, poSelection, poWarning, poHelp, poDisablePrintToFile]
    Left = 272
    Top = 192
  end
  object PrinterSetupDialog1: TPrinterSetupDialog
    Left = 216
    Top = 72
  end
  object FindDialog1: TFindDialog
    Options = [frDisableMatchCase, frDisableWholeWord]
    OnFind = FindDialog1Find
    Left = 152
    Top = 192
  end
  object ReplaceDialog1: TReplaceDialog
    Options = [frDisableMatchCase, frDisableWholeWord]
    OnFind = ReplaceDialog1Find
    OnReplace = ReplaceDialog1Replace
    Left = 272
    Top = 192
  end
  object ColorDialog1: TColorDialog
    Ctl3D = True
    Left = 240
    Top = 224
  end
end


-------------------------------------------
Unit Two Code:  GoToForm.pas
-------------------------------------------
unit GoToForm;
{
Unit Name : GoToForm.pas
Developed By : S S B Magesh Puvananthiran
Description : A simple form to enter the line number.
}
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons;

type
  TfrmGoTo = class(TForm)
    Edit1: TEdit;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmGoTo: TfrmGoTo;

implementation

uses NotePad1;

{$R *.dfm}

procedure TfrmGoTo.BitBtn1Click(Sender: TObject);
var
  LineNum, PosReturn, i, SkipChars : integer;
begin
  try
    PosReturn := 0;
    LineNum := StrToInt(Edit1.Text) - 1;
    if (LineNum >= 1) and (LineNum + 1 <= Form1.Memo1.Lines.Count - 1) then
    begin
      SkipChars := 0;
      for i := 0 to LineNum - 1 do
      begin
         SkipChars := SkipChars + Length(Form1.Memo1.Lines[i]);
         PosReturn := Pos(Form1.Memo1.Lines.Strings[0],Form1.Memo1.Lines[i]);
      end;
      Close;
      Form1.Memo1.SetFocus;
      SkipChars := SkipChars + PosReturn;      
      Form1.Memo1.SelStart := SkipChars + (LineNum * 2);
      Form1.Memo1.SelLength := 1;
    end
    else
    begin
       MessageDlg('Line Number Out of Range',mtWarning,[mbOk],0);
       Edit1.Text := IntToStr(Form1.Memo1.Lines.Count);
       Edit1.SelectAll;
    end;
  except
    MessageDlg('''' + Edit1.Text + '''' +' is Not a valid integer value',mtError,[mbOk],0);
  end;
end;

procedure TfrmGoTo.FormShow(Sender: TObject);
begin
  Edit1.Text := '1';
  Edit1.SelectAll;
end;

end.


------------------------------------------------
Unit Two Form File: GoToForm.dfm
------------------------------------------------
object frmGoTo: TfrmGoTo
  Left = 100
  Top = 108
  Width = 211
  Height = 88
  ActiveControl = Edit1
  BorderIcons = [biSystemMenu]
  Caption = 'Go To Line'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  Position = poScreenCenter
  OnShow = FormShow
  PixelsPerInch = 96
  TextHeight = 13
  object Edit1: TEdit
    Left = 2
    Top = 3
    Width = 121
    Height = 21
    TabOrder = 0
    Text = '1'
  end
  object BitBtn1: TBitBtn
    Left = 126
    Top = 3
    Width = 75
    Height = 25
    TabOrder = 1
    OnClick = BitBtn1Click
    Kind = bkOK
  end
  object BitBtn2: TBitBtn
    Left = 126
    Top = 35
    Width = 75
    Height = 25
    TabOrder = 2
    Kind = bkCancel
  end
end

I have also attached the entire source code as a zipped file (DelphiNotepad.zip) that you can download. I would appreciate if you people can give it a try and share your comments on this.

Thanks.
Magesh.





Please rate this article!
Skill level:
BeginnerExpert

Useful:
No!Very!

Overall rating:
PoorExcellent



Comments to this article
Write a new comment
improve me
    nan sha (Oct 3 2003 9:06AM)

I would like the code ,because it help me to improve further.
Respond














 
Sign up to consume product discounts for Bronze memberships !

read more


  Visit our Sponsor

 

  Community Ad of
E. DSpirito
 
   














 







     
  Copyright © 2000 - 2007 delphi3000.com - All rights reserved. Terms of use. || Privacy
delphi3000.com is a service by bluestep.com IT-Services GmbH (Vienna)