달력

3

« 2025/3 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
2011. 5. 30. 09:07

0530) 윈도우즈 서버.. 어렵다.. =_=; 2011. 5. 30. 09:07

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2011. 5. 19. 18:59

0519) 오라클 검색명령어 모음 2011. 5. 19. 18:59

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2011. 5. 10. 11:20

0510) 오라클 셋팅 및 DB 생성법 2011. 5. 10. 11:20

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2011. 5. 10. 11:02

0510) 오라클 에러 코드 (error code) 모음 2011. 5. 10. 11:02

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2011. 5. 9. 14:46

0509) 오라클 기초 2011. 5. 9. 14:46

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2011. 5. 5. 23:58

0505) 공학용 계산기 2/3 2011. 5. 5. 23:58

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2011. 5. 4. 21:42

0504) VK 가상키 모음 2011. 5. 4. 21:42

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2011. 5. 4. 19:31

0504) 델파이로 만든 경마장 게임 2011. 5. 4. 19:31

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2011. 5. 4. 19:30

0504) 델파이로 만든 계산기 (일반용) 2011. 5. 4. 19:30

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2011. 5. 4. 11:46

0504) 메모장 만들기 준비 업무2011. 5. 4. 11:46


메모장만들기 

1) 현재 라인번호 알아내기


메모에서 현재 Caret이 위치하고 있는 줄이 몇 번째 줄인지를 리턴한다.
Label1.Caption := IntToStr(GetCurrLine(Memo1));

function GetCurrLine(Memo : TMemo) : integer;
begin
      Result := Memo.Perform(EM_LINEFROMCHAR, Memo.SelStart, 0);
end;

2) 현재 컬럼번호 알아내기


메모에서 현재 Caret이 위치하고 있는 줄에서 몇 번째 컴럼인지를 리턴한다.
Label1.Caption := IntToStr(GetCurrCul(Memo1));

function GetCurrCul(Memo : TMemo)) : integer;
begin
     Result := Memo.SelStart - Memo.Perform(EM_LINEINDEX, GetCurrLine(Memo), 0);
end;

3) Caret를 원하는 라인으로 이동하기


Caret을 원하는 위치로 이동시키는데 이때 넘겨주는 값이 라인의 한계를 벗어나면
그 안 범위로 위치시킨다.
만약 라인의 맨끝으로 이동시키고 싶다면 아주 큰값을 주면된다.
SetCurrLine(Memo1. 10);

procedure SetCurrLine(Memo : TMemo; Value : integer);
begin
   if Value < 0 then Value := 0;
   if Value > Memo.Lines.Count then Value := Memo.Lines.Count;
   Memo.SelLength := 0;
   Memo.SelStart := Memo.Perform(EM_LINEINDEX, Value, 0);
end;

4) Caret을 원하는 컬럼으로 이동하기


SetCurrCul(Memo1. 10);

procedure SetCurrCul(Memo : TMemo; Value : integer);
var
   CurrLine : integer;
begin
   CurrLine := GetCurrLine(Memo);
   if Value < 0 then Value := 0;
   if (Value > Length(Memo.Lines[CurrLine])) then
      Value := Length(Memo.Lines[CurrLine]);
   Memo.SelLength := 0;
   Memo.SelStart := Memo.Perform(EM_LINEINDEX, CurrLine, 0) + Value;
end;

5) Text가 쓰여지는 영역 알아내기


현재 Text가 쓰여지는 영역을 TRect형으로 리턴한다.
즉 글자의 높이가 10이고 메모의 높이가 25라면 2라인만이 그려지게 된다.
따라서 글자가 그려지는 정확한 영역을 알아내기 위해서는 아래 함수를 사용한다.
Rect := GetTextRect(Memo1);

function GetTextRect(Memo : TMemo) : TRect;
var
   lParam : TRect;
begin
   Memo.Perform(EM_GETRECT, 0, Integer(@lParam));
   Result := lParam;
end;

6) 메모에서 현재 보이는 라인수 알아내기


Label1.Caption := IntToStr(GetVisibleLine(Memo1));

function GetVisibleLine(Memo : TMemo) : integer;
var
   Metric : TTextMetric;
   DC : hDC;
begin
   DC := GetWindowDC(Memo.Handle);
   GetTextMetrics(DC, Metric);
   Result := (GetTextRect(Memo).Bottom div Metric.tmHeight);
end;

7) 원하는 라인만큼 스크롤하기


현재상태에서 원하는 x, y만큼 스크롤한다.

DoScroll(Memo1, 10, 10);

procedure DoScroll(Memo : TMemo; x : integer; y : integer);
begin
   Memo.Perform(EM_LINESCROLL, x, y);
end;

 

 TRichEdit컴포넌트 관련 팁

1) 블록설정부분 폰트 변경하기


리치에디트컴포넌트는 메모컴포넌트와는 달리 설정부분만 폰트를 변경한다던가,
정렬상태를 바꾸는게 가능하다.

procedure TForm1.FontBtnClick(Sender : TObject);
begin
   if RichEdit1.SelLength > 0 then begin
   FontDialog1.Font.Assign(RichEdit1.DefAttributes);
   if FontDialog1.Execute then
      RichEdit1.SelAttributes.Assign(FontDialog1.Font);
   end
   else
     ShowMessage('No Text Selected');
end;

2) 블록설정부분 속성 변경하기


아래의 소스는 굵게(Bold) 속성을 지정한다.
이탤릭(fsItalic), 밑줄(fsUnderLine) 등의 속성도 마찬가지로 바꿀 수 있다.

procedure TForm1.BoldBtn(Sender : TObject);
begin
   if BoldBtn.Down then
      RichEdit1.SelAttributes.Style := RichEdit1.SelAttributes.Style + [fsBold]
   else
      RichEdit1.SelAttributes.Style := RichEdit1.SelAttributes.Style - [fsBold];
end;

3) 블록설정부분 복사, 삭제, 잘라우기, 붙이기 설정방법


interface부의 uses절에 Clipbrd를 추가한다.

procedure TForm1.CopyBtnClick(Sender : TObject);
begin
   RichEdit1.CopyToClipboard;  {복사}
   RichEdit1.CutToClipboard;   {잘라두기}
   RichEdit1.ClearSelection;  {지우기 - 클립보드에 저장되지 않는다}
   if Clipboard.HasFormat(CF_TEXT) then begin
      PasteBtn.Enabled := True;   {복사가 되었으면 붙이기 버튼을 활성화}
   end;
end;
 
procedure TForm1.PasteBtnClick(Sender : TObject);
begin
   RichEdit1.PasteFromClipboard;
end;

4) Insert 키 상태 알아내기


이 소스는 RichEdit 컴포넌트에서만 사용할 수 있다.
(메모컴포넌트는 삽입, 수정의 개념이 없음)

procedure TForm1.RichEdit1Key(Sender: TObject; var Key: Word; Shift: TShiftState);
var
  ret : integer;
begin
   ret := GetKeyState(45);
   if ret=1 then
      Label1.Caption := 'Overwrite'
   else
      Label1.Caption := 'Insert';
end;

 

 FindDialog컴포넌트 사용법

1) 리치에디트에서 문자열찾기


먼저 폼에 Memo, FindDialog컴포넌트를 배치합니다. 델파이 도움말에서 참조했습니다.

procedure TForm1.FindBtnClick(Sender : TObject);
begin
   FindDialog1.Execute;
   { or ReplaceDialog1.Execute;}
end;
 
procedure TForm1.FindDialog1Find(Sender: TObject);
var
   SelPos: Integer;
begin
   with TFindDialog(Sender) do begin
    { Perform a global case-sensitive search for FindText in Memo1 }
      SelPos := Pos(FindText, Memo1.Lines.Text);
      if SelPos > 0 then  begin
         Memo1.SelStart := SelPos - 1;
         Memo1.SelLength := Length(FindText);
         end
      else MessageDlg(Concat('Could not find "', FindText, '" in Memo1.'), mtError,[mbOk], 0);
      end;
end;
 
procedure TForm1.ReplaceDialog1Replace(Sender: TObject);
var
   SelPos: Integer;
begin
   with TReplaceDialog(Sender) do begin
   { Perform a global case-sensitive search for FindText in Memo1 }
     SelPos := Pos(FindText, Memo1.Lines.Text);
     if SelPos > 0 then begin
        Memo1.SelStart := SelPos - 1;
        Memo1.SelLength := Length(FindText);
        { Replace selected text with ReplaceText }
        Memo1.SelText := ReplaceText;
        end
      else MessageDlg(Concat('Could not find "', FindText, '" in Memo1.'), mtError,[mbOk], 0);
   end;
end;

:
Posted by 투잌
2011. 5. 4. 11:40

0504) 델파이 Application 객체 정리 2011. 5. 4. 11:40

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2011. 5. 4. 11:39

0504) 델파이 함수 모음 2011. 5. 4. 11:39

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2011. 5. 3. 10:27

0503) 데이터베이스 프로그래밍 기초 2011. 5. 3. 10:27

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2011. 5. 2. 15:57

0502) 스키마 (우왕 봄이다) 2011. 5. 2. 15:57

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2011. 4. 30. 15:34

0430) 비가 너무 내리네 주절2011. 4. 30. 15:34

어젯밤에 천둥 미친듯이 치더니

지금은 오후 2시부터 또 폭우가...

공부 집중도 안되고 뭔가 멍멍하네...

이렇게 비 많이 오는 날에는 추억에 빠지는 일이 많은 듯...

'주절' 카테고리의 다른 글

둘이 살면 괜찮아 보이는 집인디.. ㅠ  (0) 2011.07.07
0530) 윈도우즈 서버.. 어렵다.. =_=;  (0) 2011.05.30
0217) 이력서  (0) 2011.02.17
0114) 이력서, 자기소개서  (0) 2011.01.14
1231) 페이스북 가입!!  (0) 2010.12.31
:
Posted by 투잌
2011. 4. 30. 10:39

0430) 델파이 단축키 모음 2011. 4. 30. 10:39

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2011. 4. 28. 19:14

0428) 델파이로 만든 기본 메모장 2011. 4. 28. 19:14

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2011. 4. 26. 08:35

0426) 파스칼 입문 2011. 4. 26. 08:35

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2011. 3. 25. 17:40

0325) 연결리스트 테스트 2011. 3. 25. 17:40

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2011. 3. 17. 18:11

0317) 이력서 3차수정 2011. 3. 17. 18:11

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2011. 3. 11. 12:34

0311) pcap 테스트 2011. 3. 11. 12:34

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2011. 3. 11. 10:19

0311) 자바 공부 홈피 주소 2011. 3. 11. 10:19

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.