스타터 에디션으로 메모장 클론 만들기

begin { 소개



작년 말 Delphi Advent Calendar 2017에서 Delphi Starter Edition에서 메모장 클론을 만드는 기사를 썼습니다.


  • Delphi Starter Edition으로 메모장 클론 만들기 (전편)
  • Delphi Starter Edition에서 메모장 클론 만들기 (후편)
  • Delphi Starter Edition으로 메모장 클론 만들기 - 2nd Edition -

  • 그리고 이런 기사를 찾았습니다.
  • 【Windows 뒷면] 4 문자 입력하는 것만으로 [메모장]이 편리하게된다는 것을 알고 있었습니까? (할 수있는 그물)

  • 헤에! 맞아! ! ...라는 것으로 이 기능을 추가하고 싶습니다.

    구현



    마지막까지 소스 코드 다운로드



    지난번 종료 시점의 소스 코드는 다음에서 DL할 수 있습니다.
  • htps : // ht-에서. 이 m/그 f와 ぁ레/의 테파 d_cぉ네. 지 p

  • 리팩토링



    파일을 읽고 있는 장소가 3 개소 있으므로, 이것을 하나로 정리합니다.

    frmuMain.pas
     ... // キャプションを変更  UpdateCaption; // エンコーディングを指定して読み込み  Memo1.Lines.LoadFromFile(FFileName, GetEditorEncoding); ... 

    우선 클래스의 정의부에 LoadFromFile() 라고 하는 메소드를 만듭니다.

    frmuMain.pas
     ... private { Private 宣言 } FFileName: String; FEncodingIndex: Integer; FHeaderStr: string; FFooterStr: string; FMarginTop: Integer; FMarginBottom: Integer; FMarginLeft: Integer; FMarginRight: Integer; function DetectEncodingFromFile(FileName: string): Integer; procedure DispRowCol; function GetEditorEncoding: TEncoding; function GetTextFileName: string; procedure Init(AFileName: string = ''); procedure LoadFromFile; // <- 追加  procedure PrintText(const HeaderStr, FooterStr: string); procedure SaveFile; procedure UpdateCaption; procedure WmDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES; public { Public 宣言 } end; ... 

    실장부는 다음과 같습니다. implementation 아래에 설명합니다.

    frmuMain.pas
    procedure TForm1.LoadFromFile; begin // キャプションを変更  UpdateCaption; // エンコーディングを指定して読み込み  Memo1.Lines.LoadFromFile(FFileName, GetEditorEncoding); end; 

    그리고 Memo1.Lines.LoadFromFile() 로 되어 있는 개소를, 이 LoadFromFile() 로 옮겨놓습니다. 우선 WmDropFiles() 메시지 핸들러 안.

    frmuMain.pas
    procedure TForm1.WmDropFiles(var Msg: TWMDropFiles); var Buf: array [0..MAX_PATH] of Char; begin // ドロップされた (最初の) ファイル名を取得  DragQueryFile(Msg.Drop, 0, Buf, MAX_PATH); DragFinish(Msg.Drop); // ファイル名を保存  FFileName := StrPas(Buf); // エンコーディングを判定  FEncodingIndex := DetectEncodingFromFile(FFileName); // ファイルを読み込み  LoadFromFile; // 修正 end; 

    FormShow() 이벤트 핸들러 안.

    frmuMain.pas
    procedure TForm1.FormShow(Sender: TObject); // フォーム表示時 var FileName, Msg: string; ret: Integer; reg: TRegistryIniFile; begin ... FileName := ParamStr(1); if TFile.Exists(FileName) then begin // ファイルが存在する  FFileName := FileName; // エンコーディングを判定  FEncodingIndex := DetectEncodingFromFile(FFileName); // ファイルを読み込み  LoadFromFile; // 修正  end else begin ... 

    acOpenExecute() 이벤트 핸들러 안.

    frmuMain.pas
    procedure TForm1.acOpenExecute(Sender: TObject); // Action: 開く(O)... begin OpenTextFileDialog1.EncodingIndex := FEncodingIndex; if OpenTextFileDialog1.Execute then begin // 値を保存  FFileName := OpenTextFileDialog1.FileName; FEncodingIndex := OpenTextFileDialog1.EncodingIndex; // ファイルを読み込み  LoadFromFile; // 修正  end; end; 

    이것으로 리팩토링이 완료됩니다. 파일을 여는 논리가 한 곳에 집계되었습니다.

    날짜 삽입 로직 추가



    날짜 삽입 로직은 다음과 같습니다.
  • 파일을 읽어보십시오.
  • 첫 번째 줄이 ".LOG"로 시작하면 날짜 문자열 + 줄 바꿈 추가

  • 선행이 ".LOG"라는 것은 대문자로 .LOG 로부터 시작되고 있다고 하는 의미로, 소문자에서는 안 됩니다만, .LOGCABIN 는 받아들입니다. 별을 흩뜨린 달콤한 밤을 지금도 생각나네요 (?).

    첫 번째 줄은 Memo1 (TMemo)의 Lines 속성의 첫 번째 요소입니다. 즉 Memo1.Lines[0] 가 선두행의 캐릭터 라인이 됩니다. 이것을 조사하면 좋지만 Memo1이 비어 있으면 액세스 할 수 없습니다. 즉, 우선은 최저라도 일행 존재할지 어떨지를 판정하지 않으면 안됩니다. Memo1의 행 수는 Lines.Count 속성에서 확인할 수 있습니다.
     if Memo1.Lines.Count > 0 then begin // ここに処理  end; 

    첫 번째 행이 ".LOG"로 시작하는지 여부는 System.Pos() 함수에서 확인할 수 있습니다. System.Pos()은 대소문자를 구분합니다. 단순한 비교이므로 정규 표현식을 사용할 때까지 없을 것입니다.
     if Pos('.LOG', Memo1.Lines[0]) = 1 then begin // ここに処理  end; 

    TMemo의 끝에 행을 추가하려면 Lines.Add() 메서드를 사용합니다. 다음 코드는 Memo1의 끝에 'ABC'라는 행을 추가합니다.
     Memo1.Lines.Add('ABC'); 

    이것을 근거로 하면, LoadFromFile() 메소드의 내용은 이렇게 됩니다.

    frmuMain.pas
    procedure TForm1.LoadFromFile; begin // キャプションを変更  UpdateCaption; // エンコーディングを指定して読み込み  Memo1.Lines.LoadFromFile(FFileName, GetEditorEncoding); // 日付の追加  if (Memo1.Lines.Count > 0) and (Pos('.LOG', Memo1.Lines[0]) = 1) then begin Memo1.Lines.Add(FormatDateTime('hh:nn yyyy/mm/dd', Now)); Memo1.Lines.Add(''); end; end; 

    결론 } end.



    작은 개조이므로 프로퍼티나 메소드를 알고 있으면 간단했습니다.

    Delphi Starter Edition은 현재 10.2 Tokyo Release 3 (10.2.3)이 출시되었습니다. 무료로 업데이트할 수 있으므로 Starter Edition을 사용하시는 분은 꼭 업데이트해 보세요.



    새로 설치하면 처음부터 10.2.3이 됩니다.

    See also:
  • Delphi Starter Edition (Embarcadero)
  • Starter Edition 사용자를 위한 Delphi / C++Builder 10.2 Tokyo Starter Edition (무료!)
  • 금요일 사자 (Take it to the lucky) - TM Network (Amazon Music)
  • 좋은 웹페이지 즐겨찾기