블로그 이미지
딱딱히 굳은 표정으로 승질 팍팍 부리는 전투 민족의 선두 주자 입니다. 진짜 이름이 김말동이 이라 믿는 분이 없으리라 생각하면서 셈틀을 만지는 이들의 쉼터가 되도록 노력해 볼랍니다.
김말동

Recent Comment

Recent Trackback

Archive

calendar

      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  
Statistics Graph


삭제된 9장을 복원하는데 실패하고 다시 작성하기로 맘먹고 다시 적습니다 ㅜ.ㅜ

퀀텀 그리드에서 DB를 연결하지 않고 데이타를 출력하는 방법에는 Unbound Mode( 일반 String Grid 처럼 입력하는 방법 ) 와 Provider Mode( 사용자가 임의로 CustomerDataSource를 생성하여 구성하는 방법 )이 있습니다.

가장 많이 사용되는 방법은 Unbound Mode입니다. 하지만, 가끔은 Provider Mode로 작업을 해야 하는 경우가 있습니다.

UnBound Mode는 일반 StringGrid를 사용하는것과 같은 방식이라 보시면 됩니다. ( DataSource를 직접 연결하지 않고 사용하는 방법입니다. )

이번 9장의 1/2 에서는 Unbound Mode의 사용법에 대해 간단히 알아 보도록 하겠습니다.

이번 내용도 역시 본 제작자가 이동 또는 게시하지 않는 경우를 제외하고는 이곳 외에 다른 곳에서 볼 수 없습니다. 이를 어 길시 정말 법적 제제가 가해질 수 있습니다.


-. Unbound Mode로 Grid 표현하기.

퀀텀 그리드를 처음 올려놓으면 기본값이 DBTableView로 되어 있습니다.


그림에서처럼 DBTableView1을 삭제하고 TableView를 선택합니다.

만들어진 TableView는 DBTableView와 거의 같지만, DataController에 DataSource를 연결하는 부분이 없습니다.
직접 Coding상으로 컬럼을 만들거나 값일 넣어야 합니다.

간단한 예제를 하나 들어 보겠습니다.
TTable에 델파이 기본 데모중 하나인 DBDEMOS의 Animals.dbf의 내용을 넣는 예제 입니다.

var
  iFieldCnt : Integer;
  I: Integer;
  fItems : TcxCustomGridTableItem;
  iRecCnt : Integer;
begin
  // 테이블의 Field 수를 저장.
  iFieldCnt := Table1.FieldCount;

 
Try
    cxGrid1TableView1.BeginUpdate;

   
// 컬럼을 생성합니다.
    cxGrid1TableView1.ClearItems;
   
for I := 0 to iFieldCnt - 1 do
    begin
      fItems := cxGrid1TableView1.CreateItem;   // CreateColumn을 사용하셔도 됩니다.
      fItems.Name := cxGrid1TableView1.Name + Table1.Fields[i].FieldName;
      // 그래픽인경우
     
if Table1.Fields[i].DataType in [ftGraphic, ftBlob, ftTypedBinary ] Then
      begin
        fItems.PropertiesClass := TcxImageProperties;
        TcxImageProperties( fItems.Properties ).GraphicClass := TBitmap;
     
end;

      fItems.Caption := Table1.Fields[i].FieldName;
   
end;

    cxGrid1TableView1.DataController.RecordCount :=
0;
    iRecCnt := cxGrid1TableView1.DataController.RecordCount;
   
// 값을 넣는다.
    With Table1 do
    begin
      First;
     
while not Eof do
      begin
        Inc( iRecCnt );
        cxGrid1TableView1.DataController.RecordCount := iRecCnt;
       
for I := 0 to iFieldCnt - 1 do
          cxGrid1TableView1.DataController.Values[ iRecCnt - 1 , i ] :=
                                                                   Fields[i].Value;

        Next;
     
end// <-- While

    end// <-- With
  Finally
    cxGrid1TableView1.EndUpdate;
 
End;

< 간단한 설명 >
cxGrid1TableView1.BeginUpdate와 EndUpdate가 있습니다.
이는 DisableControls나 EnableControl와 비슷한 내용입니다. BeginUpdate함수가 호출되면, cxGrid1TableView의 Display가 값이 변경될때마다 Update가 되지 않도록 Lock을 겁니다. EndUpdate는 Lock을 풀어 변경된 내용을 다시 화면에 그려주게 됩니다.
 아시겠지만, 어떤 작업을 반복하여 데이타를 출력할때 대부분 화면에 내용을 그려주는데 CPU가 할애되어 많은 시간이 소요됩니다. 그래서, BeginUpdate와 EndUpdate는 화면에 그려주는 작업을 막아 빠른시간에 값을 할당하게 합니다.

ClearItems로 모든 Item( Column )을 지우고 CreateItem 또는 CreateColumn으로 컬럼을 생성합니다.
생성된 Column에 Caption과 기타 내용을 입력하고 조건에 맞는( 여기서는 Field의 DataType이 ftTypedBinary 인경우 Properies를 변경합니다. Object Inspector에서와 다르게 PropertiesClass를 이용하게 되는데, 이넘은 퀀텀에서 정의된 몇가지의 Properties의 내용을 설정합니다. 대부분 Object Inspect에서 보이는 내용뒤에 Properties가붙습니다. ( 예제 : TcxImageProperties, TcxComboBoxProperties등 처럼 Object Inspector에 보이는 문자 앞뒤에 Tcx와 Properties가 붙습니다. )

필드의 내용을 넣는 부분에서 cxGridTableView1.RecordCount가 퀀텀 그리드의 총 Record갯수가 됩니다.
그리드에 넣을 총량을 안다면, 굳이 cxGridTableView1.RecordCount를 매번 증가 시킬 필요가 없겠지요.
모른다면, While 문으로 돌면서 그냥을 설정하면 됩니다.
값은 cxGridTableView1.DataController.Values[ RecordIndex,ItemIndex ] 에 넣으면 됩니다.
여기서 중요한것은 RecordIndex입니다. 화면에 위치한 Row값이 100%  RecordIndex와 동일하지는 않습니다. Fillter나 Sort와 같은 퀀텀 고유의 기능때문에 화면에 보여지는 값의 Row위치와 Record의 실제 위치가 동일하지않기 때문입니다.
따라서   cxGrid1TableView1.Controller.FocusedRowIndex는 화면에 보여지는 Row의 위치값이고..
cxGrid1TableView1.Controller.FocusedRecord.RecordIndex 이넘이 실제 선택된 Row의 실제 레코드 위치 입니다.
헷갈리지 않도록 아래 사용합니다. FocusedRecord를 사용해도 같은 결과 입니다.
( DBTableView도 같습니다. )

  cxGrid1TableView1.Controller.FocusedRow.Index <-- 그려진 Row의 Index
  cxGrid1TableView1.Controller.FocusedRow.RecordIndex <-- 실제 레코드의 Index


-. Unbound Mode로 Master-Detail표현하기.

Master - Detail이란것이 주-종 관계를 나타나게 됩니다.

Bound( DB Grid )모드에서 Master-Detail을 사용할때 Detail Table View에서 DataController-->Master Table View를  연결하듯이 UnBound 모드에서도 같은 방식으로 데이타를 연결 합니다.
하지만, Unbound모드는 필드나 데이타가 정해 진것이 아니므로 Record에 Detail Table View를 Link 시키는 방법으로 구현되게 됩니다.

그림과 같이 Level을 구성하고 MasterTableView에 이미 데이타를 넣었다고 가정하겠습니다.

var
  I: Integer;
  ADetDataController: TcxCustomDataController;

...

  with MasterTableView.DataController do
  begin
    BeginUpdate;
    try
      for I := 0 to RecordCount - 1 do
      begin
        ADetDataController := 
               GetDetailDataController( 레코드 여기서는 I,  MasterLevel 밑의 DetailLvel번호 여기서는 0  );

        with ADetDataController do // 결국 이넘이 하위 Level의 0번째 DetailtableView가 됩니다.
        begin
          BeginUpdate;
          요기서 열심히 값을 넣습니다.
          넣은 값은 I 번째 레코드에 Link되므로 I번째 레코드의 Detail로만 표시 됩니다.

너무 쉽죠?

결국은 MasterTableView의 각각의 레코드에 하위 Detail레코드를 넣는다는 말이 됩니다.
알고 보면 간단한 내용입니다. 결국 저 빨강색 내용이 주가됩니다.


간단하게나마 UnBound 모드에 대해 알아 보았습니다.
다음은 Provider Mode에 대해 알아보도록 하겠습니다.

저작자 표시 비영리 변경 금지
posted by 김말동

댓글을 달아 주세요

Windows7을 깔고 나서 영문이라 당황 하셨던 분들에게 희소식입니다.

Window7 한글 언어팩이 나왔던 것입니다. 나온지 좀 되긴 햇져.,..

Windows7 7100버전에 설치후 이상 없이 잘 동작 하였습니다.

설치 방법을 최대한 간결하고 상세하게 소개해 드리겠습니다.

1. 자신의 Windows7에 맞는 한글언어팩을 선택 합니다.
2. 그럼 RapidShare라는 사이트로 이동을 하고 Free User 버튼을 누릅니다.

3. 약 30-60초 사이를 기다린후 DownLoad 버튼이 생기면 눌러서 저장을 선택 원하는 폴더( 디렉토리 )에 저장 합니다.

4. 다운받은 화일을 더블 클릭하여 압축을 풉니다. 초보자 분들은 바탕 화면에 압축을 푸실것을 권장합니다.
   압축을 푸신 폴더( 디렉토리 )를 잘 기억하셔야 합니다.

5. 압축이 다 풀리면, KO-KR과 같은 폰더가 생기고 그안에 lp.cap화일이 생깁니다.

6. 이제 영문 Windows7의 Start(시작) --> Control Panel( 제어판 ) --> 전체 보기를 눌러 Region and Language 를 선택 합니다.

7. 화면에서 Keyboards and Languages 탭에서 Install/Uninstall Languages... 버튼을 클릭합니다.

8. Install Display Languages 버튼 --> Browse Computer and Network --> Browse 버튼을 눌러 아까저장한 폴더속에 lp.cab을 선택 합니다.

9. 화면에 Korean(한국어) 라고 나와야 정상입니다.

10. Next 버튼 --> 한국어 선택 --> 아래 Apply Display ... 어쩌구 를 선택( 체크 ) --> Change Display Language 버튼을 누릅니다.

11. 한 참을 기달리면 바가 100%를 달리고 Restart Now를 눌러 재부팅 하면.. 짜짠 한글이 되있습니다.

일단 VMWare에 깔고 512에서도 돌려보고, 1024, 2048에서도 돌려보았습니다. 잘돌아 가는군요.
흠. 한가지 아쉬운거라면, 고사양의 CPU가 있어야 할것 같다는 예감이 듭니다.

이상 Windows7에 한글 언어팩을 설치 하는 방법이었습니다.
저작자 표시 비영리
posted by 김말동

댓글을 달아 주세요

 <PREV 1 2 3 4 5 ... 51    NEXT>