본문 바로가기
델파이 프로그래밍 정보

메모장 만들기

by 알 수 없는 사용자 2017. 5. 25.
728x90
반응형

델파이 입문 2개월차에 메모장을 만들어보려고 합니다.



소스를 부분 부분 필요한 부분을 공유하고 싶어서 부분 부분 주제별로 소스를 올려요

모두다 테스트해보고 올리는 것입니다

그리고 소스는 델마당에서 모두 찾아내었습니다.



그림이 없어서 잘 모르겠다 싶으신 분들은 '메모장'을 실행하시고 보세요.



메모장 실행방법 : '윈도우키 + R' -> 'notepad' 치고 + 엔터







먼저 메모장은 MainMenu 라는 것을 사용합니다 (메뉴바)





1. 메뉴바 - 파일 탭



MainMenu에서 구분선을 넣으려면 MenuItem 의 Caption에 ' - '  << 작대기 하나 넣으면 됩니다.





1) 새로만들기를 저는 제가 컴파일(build)한 exe파일을 실행 하는 것으로 하였습니다.

먼저 uses 절에 shellapi 를 추가합니다





procedure TForm1.N5Click(Sender: TObject);

begin

  ShellExecute(Handle,'open','c:\jyc\notepad.exe',Nil,Nil,SW_ShowNormal);

end;





2) 열기



먼저 Dialogs 탭의 열기모양 아이콘을 폼에 추가합니다(Opendialog)



procedure TForm1.O1Click(Sender: TObject);

begin

  if opendialog1.execute=true then

    begin

    memo1.lines.loadfromfile(opendialog1.filename);

    end;

end;







3) 저장



원래 메모장에서 저장을 하면 기존에 저장되어있는 파일이랑 동일하면

저장 폴더 지정 안해도 바로 저장이 되는데요



저는 몰라서 그냥 다른이름으로 저장되게 했습니다^^



아시는분 알려주세여





procedure TForm1.A1Click(Sender: TObject);

var

lslFilters : TStringList;

lstrFileName: String;

begin

If SaveDialog1.Execute Then

begin

// 확장자가 입력되었으면 Filter의 확장자 값을 무시

if not (Pos('.', SaveDialog1.FileName)=0) then

begin

lstrFileName := saveDialog1.FileName;

end

else

begin

lslFilters := TSTringList.Create;

Try

lslFilters.Clear;

lslFilters.Delimiter := '|';

// 공백으로 나누어지지 않게 하기 위해 공백을 '$'로 치환

lslFilters.DelimitedText :=

StringReplace(saveDialog1.Filter, ' ' , '$', [rfReplaceAll]);

lstrFileName := lslFilters[ ( SaveDialog1.FilterIndex -1 ) * 2+1 ];

// 선택된 Filter 값이 *.*라면 입력받은 파일명만으로

if lstrFileName='*.*' then

lstrFileName := saveDialog1.FileName

// *.xxx 형식의 Filter값의 앞에 '*' 부분을 입력받은 파일명으로 치환

else

lstrFileName := StringReplace(lstrFileName, '*', saveDialog1.FileName, []);

finally

lslFilters.Free;

end;

end;

memo1.Lines.SaveToFile(lstrFileName);

end;

  form1.caption:=lstrFileName + ' - 메모장';

end;





4) 다른이름으로저장



다른이름으로 저장을 클릭하면 '저장' 클릭 하면 실행하는 소스로 하였습니다

procedure TForm1.S1Click(Sender: TObject);

begin

  A1Click(nil);

end;





페이지설정과 인쇄는 아직 준비하고있어요





7) 끝내기



원래 메모장에서 끝내기를 누르면 저장되어있는지 확인한 후 저장하시겠는지 묻는 메세지창이 나옵니다.

하지만 어려워서 아직 못했구요.

그냥 종료하는 것으로 해놓았습니다. 아시는분 도와주세요



procedure TForm1.X1Click(Sender: TObject);

begin

  close;

end;







2. 메뉴 - 편집 탭



편집탭 기본적인것 조차 몰라서 초보로서 너무 어려웠습니다.



먼저 편집 메뉴의 잘라내기, 복사, 삭제, 찾기, 다음 찾기를 비활성화 해줍니다.



프로시져에서 enable=False로 바꿉니다





0) 비활성화 메뉴 활성화시키기

편집탭은 기본적으로 텍스트창에 아무것도 입력안되어있으면 메뉴에 비활성화가 되어있는 것들이 있습니다

복사, 붙여넣기, 잘라내기, 삭제 등등..





1) 찾기, 다음 찾기 활성화 하기

찾기와 다음찾기는 텍스트창에 글이 입력되면 활성화가 됩니다.





procedure TForm1.memo1KeyPress(Sender: TObject; var Key: Char);

begin

  Form1.n12.Enabled:=True;

  Form1.n13.Enabled:=True;

end;





2) 복사, 잘라내기, 삭제 활성화하기

복사, 잘라내기, 삭제 활성화하기는 텍스트창에 입력된 텍스트를 블록으로(드래그) 하면 활성화됩니다.





procedure TForm1.N2Click(Sender: TObject);

begin

  if memo1.SelLength <> 0 then // 블록된게 0이 아니면 True로 바꿈

  begin

    Form1.z1.Enabled:=True;

    Form1.t1.Enabled:=True;

    Form1.c1.Enabled:=True;

    Form1.n10.Enabled:=True;

   end;

  if memo1.SelLength = 0 then // 블록된게 0이면 False로 바꿈

  begin

    Form1.z1.Enabled:=false;

    Form1.t1.Enabled:=false;

    Form1.c1.Enabled:=false;

    Form1.n10.Enabled:=false;

   end;

end;







3) 편집탭의 메뉴 실행



3-1. 복사하기

procedure TForm1.C1Click(Sender: TObject);

begin

  memo1.CopyToClipboard;

end;


3-2. 붙여넣기

procedure TForm1.P2Click(Sender: TObject);

begin

  memo1.PasteFromClipboard;

end;


3-3. 실행취소

procedure TForm1.Z1Click(Sender: TObject);

begin

  memo1.Undo;

end;





3-4. 삭제

procedure TForm1.N10Click(Sender: TObject);

begin

  memo1.SelText:= '';

end;



3-5. 잘라내기

procedure TForm1.T1Click(Sender: TObject);

begin

  memo1.CopyToClipboard;

  memo1.SelText:= '';

end;



3-6. 모두선택

procedure TForm1.A2Click(Sender: TObject);

begin

  memo1.SelectAll;

end;




3-7. 시간/날짜

procedure TForm1.F51Click(Sender: TObject);

begin

  memo1.lines.add(ForMatDateTime('YYYY-MM-DD HH:MM:SS',now));

end;




3-8. 자동 줄바꿈

procedure TForm1.W1Click(Sender: TObject);

begin

  if Form1.W1.Checked then

  begin

  Form1.W1.Checked:=false;

  memo1.wordwrap:=false;

  memo1.ScrollBars:=ssboth;

  end

  else

  begin

  Form1.W1.Checked:=true;

  memo1.wordwrap:=true;

  memo1.ScrollBars:=ssVertical;

  end;

end;



3-9. 상태표시줄

procedure TForm1.S2Click(Sender: TObject);

begin

  if Form1.s2.Checked then

  begin

    Form1.StatusBar1.Visible:=false;

    S2.Checked:=false;

  end

  else

  begin

    Form1.StatusBar1.Visible:=true;

    StatusBar1.SimplePanel:=True;

    S2.Checked:=true;

  end;

end;


procedure TForm1.memo1KeyPress(Sender: TObject; var Key: Char);

begin

  begin

  Form1.n12.Enabled:=True;

  Form1.n13.Enabled:=True;

  end;

&n

728x90
반응형

'델파이 프로그래밍 정보' 카테고리의 다른 글

Edit Enter키 입력시 다른Edit로 이동  (0) 2017.05.30
LABEL 로 창 움직이기  (0) 2017.05.30
Delphi 유용한 사이트  (0) 2017.05.24
Tower Lamp Blink  (0) 2017.05.24
CCLINK 세팅 방법  (0) 2017.05.18

댓글