메모장을 만드는데 상태표시줄에 현재라인수를 나타내려합니다.
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은 어디서 구현하나요?
두 가지 방법으로 만들었습니다.....
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은 어디서 구현하나요?