Q&A

  • 상태표시줄에 현재라인수 나타내기요
메모장을 만드는데 상태표시줄에 현재라인수를 나타내려합니다.



function CurrentLine: integer;

begin

Result := Memo1.Perform(em_LineFromChar, $FFFF, 0);

end;



전에 이 소스를 넣으면 된다고 하셨는요. 어디에 어떻게 넣는건지요..

지금은 전체라인이 보이게 아래같이 메모장의 체인지이벤트에 해놓았습니다.



procedure TForm1.Memo1Change(Sender: TObject);

begin

statusbar1.simplePanel:=true;

statusbar1.simpleText:=format('%d 줄',[memo1.lines.count]);

end;



이 전체라인코드는 지워야 하나요?



어쨌튼 function은 어디서 구현하나요?

2  COMMENTS
  • Profile
    남기석 2000.09.21 19:55
    이렇게 해 보세요...



    두 가지 방법으로 만들었습니다.....



    Memo1은 제가 지금 사용하고 있는 방식이고요....

    Memo2는 다른분이 답해주신 대로 구현한겁니다.....

    =================================================================================

    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls, ComCtrls;



    type

    TForm1 = class(TForm)

    Memo1: TMemo;

    Memo2: TMemo;

    Label1: TLabel;

    StatusBar1: TStatusBar;

    procedure Memo1Change(Sender: TObject);

    procedure Memo2Change(Sender: TObject);

    private

    { Private declarations }

    procedure GetLineColumn(Sender: TMemo; var iLin: Integer; var iCol:Integer);

    function CurrentLine: integer;

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;



    implementation



    {$R *.DFM}



    procedure TForm1.GetLineColumn(Sender: TMemo; var iLin: Integer; var iCol:Integer);

    var

    lLin, lCol: Longint;

    begin

    lLin := SendMessage(Sender.Handle, EM_LINEFROMCHAR, Sender.SelStart, 0);

    lCol := SendMessage(Sender.Handle, EM_LINEINDEX, lLin, 0);

    iCol := Sender.SelStart - lCol + 1;

    iLin := lLin + 1;

    end;



    procedure TForm1.Memo1Change(Sender: TObject);

    var

    iLin,iCol: Integer;

    sLine,sCol: String;

    begin

    GetLineColumn(Sender as TMemo, iLin, iCol);



    sLine := Format('%4d', [iLin]);

    sCol := IntToStr( iCol );

    if Length(sCol) < 2 then sCol := sCol + ' ';

    Label1.Caption := ' ' + sLine + ' : ' + sCol;

    end;



    function TForm1.CurrentLine: integer;

    begin

    Result := Memo2.Perform(em_LineFromChar, $FFFF, 0);

    end;



    procedure TForm1.Memo2Change(Sender: TObject);

    begin

    statusbar1.simpleText:=format('%d/%d 줄',[CurrentLine, memo2.lines.count]);

    end;



    end.



    =================================================================================





    니케 wrote:

    > 메모장을 만드는데 상태표시줄에 현재라인수를 나타내려합니다.

    >

    > function CurrentLine: integer;

    > begin

    > Result := Memo1.Perform(em_LineFromChar, $FFFF, 0);

    > end;

    >

    > 전에 이 소스를 넣으면 된다고 하셨는요. 어디에 어떻게 넣는건지요..

    > 지금은 전체라인이 보이게 아래같이 메모장의 체인지이벤트에 해놓았습니다.

    >

    > procedure TForm1.Memo1Change(Sender: TObject);

    > begin

    > statusbar1.simplePanel:=true;

    > statusbar1.simpleText:=format('%d 줄',[memo1.lines.count]);

    > end;

    >

    > 이 전체라인코드는 지워야 하나요?

    >

    > 어쨌튼 function은 어디서 구현하나요?

  • Profile
    돌머리 2000.09.21 19:31
    안녕하세요, 김동원입니다.

    답은 다 구하셨네요..

    statusbar1.simpleText:=format('%d/%d 줄',[CurrentLine, memo1.lines.count]);



    도움이 되셨기를...







    니케 wrote:

    > 메모장을 만드는데 상태표시줄에 현재라인수를 나타내려합니다.

    >

    > function CurrentLine: integer;

    > begin

    > Result := Memo1.Perform(em_LineFromChar, $FFFF, 0);

    > end;

    >

    > 전에 이 소스를 넣으면 된다고 하셨는요. 어디에 어떻게 넣는건지요..

    > 지금은 전체라인이 보이게 아래같이 메모장의 체인지이벤트에 해놓았습니다.

    >

    > procedure TForm1.Memo1Change(Sender: TObject);

    > begin

    > statusbar1.simplePanel:=true;

    > statusbar1.simpleText:=format('%d 줄',[memo1.lines.count]);

    > end;

    >

    > 이 전체라인코드는 지워야 하나요?

    >

    > 어쨌튼 function은 어디서 구현하나요?