Q&A
HOME
Tips & Tech
Q&A
Discuss
Download
자유게시판
홍보 / 광고
구인 / 구직
LOGIN
회원가입
RichEdit에서 역 검색은 어떻게?
자주 질문하네요... ^^;;;
질문은 RichEdit에서 역검색을 하고 싶습니다.
FindDialog를 보면
검색 조건에
위로, 아래로 가 있는데.......
이것을 이용해서
TRichEdit.FindText 함수를 이용하여
위로 검색을 하고 싶습니다....
잘 되지 않네요.... 간단할 줄 알았는디... -____-;
고수님들 답변 부탁드립니다.
1
COMMENTS
구창민
•
1999.06.03 23:31
남윤혁 께서 말씀하시기를...
> 자주 질문하네요... ^^;;;
> 질문은 RichEdit에서 역검색을 하고 싶습니다.
> FindDialog를 보면
> 검색 조건에
> 위로, 아래로 가 있는데.......
> 이것을 이용해서
> TRichEdit.FindText 함수를 이용하여
> 위로 검색을 하고 싶습니다....
> 잘 되지 않네요.... 간단할 줄 알았는디... -____-;
> 고수님들 답변 부탁드립니다.
남윤혁님 안녕하세요?
아래 예제를 참고하셔서 응용하시면 충분히 해내실수 있으실 겁니다
델파이 헬퍼의 팁/강좌란에서 펐습니다.
컴파일하여 실행하신 후 SpeedButton을 클릭할때마다
다음찾기를 시도합니다
// 아래 예제는 Edit1.Text 에 입력한 문자열을 Memo1 에서 찾기하는
// 것으로 FindDialog 를 사용하지 않고 다음찾기를 구현한 것입니다
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons;
type
TForm1 = class(TForm)
Edit1: TEdit;
Memo1: TMemo;
CB_CaseSensitive: TCheckBox;
SpeedButton1: TSpeedButton;
procedure SpeedButton1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function FindMemoStr(SrchStr: String; fromIndex: Integer; CaseSensitive: Boolean): Integer;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
function TForm1.FindMemoStr(SrchStr: String; fromIndex: Integer; CaseSensitive: Boolean): Integer;
function Replichar(c: char; n: integer):string;
var
i: integer;
o: string;
begin
o := '';
for i := 1 to n do AppendStr(o,c);
Replichar := o;
end;
var
CRow, CCol, SRow, SCol: longint;
located: Boolean;
s, t, p: String;
begin
Result := -1;
if length(SrchStr) < 1 then
System.Exit;
// Memo의 주어진 위치부터 찾기위해
Memo1.SelStart := fromIndex;
located := False;
if CaseSensitive then
s := SrchStr
else
s := Uppercase(SrchStr);
with Memo1 do
begin
if lines.count < 1 then
exit;
{현재 row and column을 얻는다}
CRow := SendMessage(Memo1.Handle, EM_LineFromChar, Memo1.SelStart, 0);
CCol := Memo1.SelStart - SendMessage(Memo1.Handle, EM_LineIndex, CRow, 0);
SRow := CRow; {검색시작 row}
while (SRow < lines.count) and not located do
begin
if CaseSensitive then
t := lines[SRow]
else
t := UpperCase(lines[SRow]);
if SRow = CRow then
begin
Delete(t,1,CCol+1);
p := Replichar(' ', CCol+1);
AppendStr(p, t);
t := p;
end;
SCol := pos(s, t);
if SCol > 0 then
located := True
else
inc(SRow);
end;
if located then
begin
SelStart := SendMessage(Memo1.Handle, EM_LineIndex, SRow, 0) + SCol - 1;
SelLength := length(s);
Result := SelStart;
end
else
begin
Result := -1;
end;
end;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
// 두번째 파라미터는 대소문자 구별 여부
SpeedButton1.Tag := FindMemoStr(Edit1.Text, SpeedButton1.Tag, CB_CaseSensitive.Checked);
if SpeedButton1.Tag = -1 then
begin
MessageBeep(MB_ICONHAND);
MessageDlg('더이상 찾는 문자열이 없습니다', mtInformation, [mbOK],0);
SpeedButton1.Tag := 0;
end
else
begin
Memo1.SetFocus;
SpeedButton1.Tag := SpeedButton1.Tag + 1; // 다음 찾기할 시작위치
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
SpeedButton1.Tag := 0; // 처음 찾기할 시작위치(SelStart)
// 아래는 예제 자료입니다
Edit1.text := 'ab';
Memo1.Clear;
Memo1.Lines.Add('abwerewrabfdfd');
Memo1.Lines.Add('werteab04549ab');
Memo1.Lines.Add('ab435435');
Memo1.Lines.Add('dsfdsfab');
end;
end.
0
0
삭제
수정
댓글
(NOTICE) You must be
logged in
to comment on this post.
노영길
•
1999.06.04 04:20
1
COMMENTS
/
0
LIKES
FFT소스구함
글쎄요.
•
1999.06.05 01:19
노영길 께서 말씀하시기를... > 안녕하세요 > 저는 전북에 사는 영길이라고 하는데 이번 레포트에서 FFT...
박성훈
•
1999.06.04 03:07
2
COMMENTS
/
0
LIKES
재고관리...
신호성
•
1999.06.04 22:46
박성훈 께서 말씀하시기를... > 메뉴테이블, 재료테이블,재료입력테이블, 판매테이블이 있습니다. (식당관...
신인재
•
1999.06.04 04:49
일딴 질문의 요지를 모르겠군요...말씀하신것을 보면 일딴 프로그램적인 로직은 다 서있으신거 같은데.......
이호선
•
1999.06.04 00:54
2
COMMENTS
/
0
LIKES
메뉴의 폰트에 대하여...
김성동
•
1999.06.04 20:15
델4의 경우에는 OWNERDRAW 기능이 있어서 적절한 폰트를 가지고 일일이 그려주면 됩니다. 델4이하 버전에서...
신인재
•
1999.06.04 04:32
글쎄요......2가지 방법이 있습니다.... 첫번째. 팝업메뉴를 새로 만든다......( 팝업메뉴에선 폰트를 ...
박정현
•
1999.06.04 00:51
1
COMMENTS
/
0
LIKES
DBGrid에서 행의 위치?
redhead
•
1999.06.04 23:30
박정현 께서 말씀하시기를... > DBGrid에서 행의 위치를 알려면 어떻게 하면 될까요. > PowerBuilder에서...
서영택
•
1999.06.03 23:29
1
COMMENTS
/
0
LIKES
install shield 매우급함
이규하
•
1999.06.04 19:18
서영택 께서 말씀하시기를... > 환경 > UNIX, ORACLE8, DELPHI4 > > > 인스톨쉴드로 만들어서 설치...
구창민
1999.06.03 23:28
0
COMMENTS
/
0
LIKES
Re: [help]컴포넌트를 구합니다..
김영애
•
1999.06.03 22:38
1
COMMENTS
/
0
LIKES
퀵레포트에서 옆으로 출력되게 하고 시포요~~!!
희우니
•
1999.06.10 23:29
저도 출력때문에... 고민좀 하다가... 보개 되는 군요... > > |고객명 | 판매금액 | 전화 |고객...
김수봉
•
1999.06.03 21:46
1
COMMENTS
/
0
LIKES
Rich에서 바로 SQL문을 이용한 DB저장?
구창민
•
1999.06.03 23:25
김수봉 께서 말씀하시기를... > 안녕하세요. 김수봉입니다. > > RichEdit에서 작성한 문서를 SQL문을 ...
chobo
•
1999.06.03 21:09
1
COMMENTS
/
0
LIKES
아주 간단한 DB를 만들고 싶은데요
구창민
•
1999.06.03 23:23
chobo 께서 말씀하시기를... > 아주 간단한 DB를 만들고자 합니다. > BDE와 같은 Database Engine등은 사...
남윤혁
•
1999.06.03 20:09
1
COMMENTS
/
0
LIKES
RichEdit에서 역 검색은 어떻게?
자주 질문하네요... ^^;;; 질문은 RichEdit에서 역검색을 하고 싶습니다. FindDialog를 보면 검색 조건에 위로, 아래로 가 있는데....... 이것을 이용해서 TRichEdit.FindText 함수를 이용하여 위로 검색을 하고 싶습니다.... 잘 되지 않...
구창민
•
1999.06.03 23:31
남윤혁 께서 말씀하시기를... > 자주 질문하네요... ^^;;; > 질문은 RichEdit에서 역검색을 하고 싶습니...
델파이 초보자
•
1999.06.03 19:18
2
COMMENTS
/
0
LIKES
SERVERSOCKET/CLIENTSOCKET 접속해제
이정욱
•
1999.06.03 20:27
ServerSoket의 OnClientError와 OnClientDisconnect 에서 처리를 해주시면 됩니다. 델파이 초보자 께서...
초보
•
1999.06.05 19:41
이정욱 께서 말씀하시기를... > ServerSoket의 OnClientError와 OnClientDisconnect 에서 처리를 해주시...
송기원
•
1999.06.03 18:46
1
COMMENTS
/
0
LIKES
Delphi40 CodeInsight 사용법?
이정욱
•
1999.06.03 20:30
커서의 위치는 | 를 사용해서 결정합니다. 쉬프트 누르고 누르면 나오는 문자요... | 문자가 있는 곳에 ...
송기원
•
1999.06.03 17:27
2
COMMENTS
/
0
LIKES
Internet OCX 배포방법..
류성호
•
1999.06.04 22:46
송기원 께서 말씀하시기를... > 델파이에 포함되어 있는 FTP컴포넌트를 이용하여 개발한 > 프로그램을 배...
이정욱
•
1999.06.03 20:06
델파이 헬프에서 'Distributable Files'라는 색인으로 보세요. 이부분이 글씨가 작아서 잘 안보이니 인쇄...
심상수
1999.06.03 17:26
0
COMMENTS
/
0
LIKES
Text file(sql문장)을 DB에 Insert하려면
김경수
1999.06.03 10:18
0
COMMENTS
/
0
LIKES
ISAPI에 관한질문
조성윤
•
1999.06.03 05:59
1
COMMENTS
/
0
LIKES
MessageDlg에서....
이정욱
•
1999.06.03 20:02
Dialogs.pas의 소스를 보시면 1554번째 줄에 ButtonNames: array[TMsgDlgBtn] of string = ( 'Yes...
김윤경
•
1999.06.03 04:38
1
COMMENTS
/
0
LIKES
Oracle number(10.5)형 insert 방법은 ?
신인재
•
1999.06.03 04:59
음냐 execsql하기 전에 showmessage(query1.sql.text); 를 삽입해서 쿼리를 확인해 보세요.... 불완전...
정인철
•
1999.06.03 02:41
1
COMMENTS
/
0
LIKES
델파이4.0에서 Custom용지설정
김경수
•
1999.06.03 14:54
안녕하세요. 전 전에 nt에서 퀵레포트를 이용해서 프로그램한적이 있었는데, 질문과 같은 문제가 생기더라...
정창헌
•
1999.06.03 02:15
1
COMMENTS
/
0
LIKES
db그리드의 글자크기
신인재
•
1999.06.03 05:01
디비그리드를 찍고 마우스 오른쪽버튼을 누르면 컬럼editor를 부를 수 있습니다. 거기서 각 칼럼의 폰트를 ...
기노현
•
1999.06.03 00:01
1
COMMENTS
/
0
LIKES
DBGrid에서 여러 선택 방법(Shift, Ctrl)
신인재
•
1999.06.03 05:04
dgMultiSelect 옵션을 True로 주시고 함 해보세요.... 기노현 께서 말씀하시기를... > DBGrid에서 여러...
남윤혁
1999/06/03 20:09
Views
1564
Likes
0
Comments
1
Reports
0
Tag List
수정
삭제
목록으로
한델 로그인 하기
로그인 상태 유지
아직 회원이 아니세요? 가입하세요!
암호를 잊어버리셨나요?
> 자주 질문하네요... ^^;;;
> 질문은 RichEdit에서 역검색을 하고 싶습니다.
> FindDialog를 보면
> 검색 조건에
> 위로, 아래로 가 있는데.......
> 이것을 이용해서
> TRichEdit.FindText 함수를 이용하여
> 위로 검색을 하고 싶습니다....
> 잘 되지 않네요.... 간단할 줄 알았는디... -____-;
> 고수님들 답변 부탁드립니다.
남윤혁님 안녕하세요?
아래 예제를 참고하셔서 응용하시면 충분히 해내실수 있으실 겁니다
델파이 헬퍼의 팁/강좌란에서 펐습니다.
컴파일하여 실행하신 후 SpeedButton을 클릭할때마다
다음찾기를 시도합니다
// 아래 예제는 Edit1.Text 에 입력한 문자열을 Memo1 에서 찾기하는
// 것으로 FindDialog 를 사용하지 않고 다음찾기를 구현한 것입니다
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons;
type
TForm1 = class(TForm)
Edit1: TEdit;
Memo1: TMemo;
CB_CaseSensitive: TCheckBox;
SpeedButton1: TSpeedButton;
procedure SpeedButton1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function FindMemoStr(SrchStr: String; fromIndex: Integer; CaseSensitive: Boolean): Integer;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
function TForm1.FindMemoStr(SrchStr: String; fromIndex: Integer; CaseSensitive: Boolean): Integer;
function Replichar(c: char; n: integer):string;
var
i: integer;
o: string;
begin
o := '';
for i := 1 to n do AppendStr(o,c);
Replichar := o;
end;
var
CRow, CCol, SRow, SCol: longint;
located: Boolean;
s, t, p: String;
begin
Result := -1;
if length(SrchStr) < 1 then
System.Exit;
// Memo의 주어진 위치부터 찾기위해
Memo1.SelStart := fromIndex;
located := False;
if CaseSensitive then
s := SrchStr
else
s := Uppercase(SrchStr);
with Memo1 do
begin
if lines.count < 1 then
exit;
{현재 row and column을 얻는다}
CRow := SendMessage(Memo1.Handle, EM_LineFromChar, Memo1.SelStart, 0);
CCol := Memo1.SelStart - SendMessage(Memo1.Handle, EM_LineIndex, CRow, 0);
SRow := CRow; {검색시작 row}
while (SRow < lines.count) and not located do
begin
if CaseSensitive then
t := lines[SRow]
else
t := UpperCase(lines[SRow]);
if SRow = CRow then
begin
Delete(t,1,CCol+1);
p := Replichar(' ', CCol+1);
AppendStr(p, t);
t := p;
end;
SCol := pos(s, t);
if SCol > 0 then
located := True
else
inc(SRow);
end;
if located then
begin
SelStart := SendMessage(Memo1.Handle, EM_LineIndex, SRow, 0) + SCol - 1;
SelLength := length(s);
Result := SelStart;
end
else
begin
Result := -1;
end;
end;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
// 두번째 파라미터는 대소문자 구별 여부
SpeedButton1.Tag := FindMemoStr(Edit1.Text, SpeedButton1.Tag, CB_CaseSensitive.Checked);
if SpeedButton1.Tag = -1 then
begin
MessageBeep(MB_ICONHAND);
MessageDlg('더이상 찾는 문자열이 없습니다', mtInformation, [mbOK],0);
SpeedButton1.Tag := 0;
end
else
begin
Memo1.SetFocus;
SpeedButton1.Tag := SpeedButton1.Tag + 1; // 다음 찾기할 시작위치
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
SpeedButton1.Tag := 0; // 처음 찾기할 시작위치(SelStart)
// 아래는 예제 자료입니다
Edit1.text := 'ab';
Memo1.Clear;
Memo1.Lines.Add('abwerewrabfdfd');
Memo1.Lines.Add('werteab04549ab');
Memo1.Lines.Add('ab435435');
Memo1.Lines.Add('dsfdsfab');
end;
end.