Q&A

  • 리스트박스에서...
데이타베이스 테이블에서 각 항목들을 3개를 만들었다하고...

그 내용을 리스트 박스에 모두 출력하는 방법은 어떻게 하는지 답변 좀 부탁드립니다...



------------------------------------

항목1 항목2 항목3

항목1의내용 항목2의내용 항목3의내용

. . .

. . .

. . .

------------------------------------

와 같이 하는 방법을 좀........

1  COMMENTS
  • Profile
    이재식 1999.12.18 07:17
    김민호 wrote:

    > 데이타베이스 테이블에서 각 항목들을 3개를 만들었다하고...

    > 그 내용을 리스트 박스에 모두 출력하는 방법은 어떻게 하는지 답변 좀 부탁드립니다...

    >

    > ------------------------------------

    > 항목1 항목2 항목3

    > 항목1의내용 항목2의내용 항목3의내용

    > . . .

    > . . .

    > . . .

    > ------------------------------------

    > 와 같이 하는 방법을 좀........



    이재식 Wrote :

    안녕하십니까?

    위의 표현대로 하려면 ListBox의 DrawItem 및 Canvas객체를 이용해야 합니다.

    제가 샘플로 한번 코딩을 설명드리겠습니다.

    우선 3개의 항목을 출력하려면 3개의 간격에 대해 각각의 간격을 설정해야 될 것입니다.

    우리는 그 변수는 Size1, Size2, Size3라고 합시다.

    Size1 := 30 ; // 항목 1간격

    Size2 := 30 ; // 항목 2 간격

    Size3 := 30 ; // 항목 3 간격

    그리고, LIstBox에 보면 Style속성이 있습니다.

    대개 standard라고 디폴트로 되어 있을 것입니다.

    이것을 standard가 아닌 나머지 두개가 더 있는데요, 그 중 아무것으로 하나

    선택하세요. 이유는 standard로 하면 제 경험상 DrawItem에 코딩된대로

    제대로 출력이 안되더라구요. 뭔가 이상한 글자가 나오더라구요.



    그런다음 Table1에 3개의 필드항목이 있다고 가정합시다.

    F1, F2, F3이렇게 말입니다.

    이젠 이것을 위의 표현대로 출력을 한다고 합시다.

    즉, 버튼1을 누르면 테이블에 있는 내용이 리스트 박스에 3칼럼의 형식으로

    출력이 된다고 합시다.

    Button1 클릭 이벤트

    procedure TForm1.Button1Click(Sender: TObject);

    var

    Data1, Data2, Data3 : String ;



    begin

    With Table1 do

    begin

    Close ;

    Open ;



    While Not Eof do

    begin

    Data1 := FieldByName('F1').asString ;

    Data2 := FieldByName('F2').asString ;

    Data3 := FieldByName('F3').asString ;

    ListBox1.Items.Add (Data1 + #9 + Data2 + #9 + Data3) ;

    // #9는 아스키코드로 Tab키로 말합니다.

    // #9말고도 다른 특정 문자로 필드간을 구별하는 문자를

    // 택할 수 있는 것이죠. 가령 #32등등.

    Next ;

    end ;

    end ;

    end; // 여기까지가 리스트 박스에 출력을 하는 것입니다.

    이제부터는 리스트 박스의 OnDrawItem이벤트에 다음과 같이 코딩합니다.

    var

    Col1, Col2, Col3 : TRect ; // 이것은 각 칼럼별 크기를 가지는 변수

    Data : String ; // 출력할 데이터

    Tab_pos : integer ; // 위에서 말한 칼럼간 간격 식별자 #9의 위치를 저장

    begin

    Col1 := Rect ;

    Col2 := Rect ;

    Col3 := Rect ;



    Col1.Right := Size1 ;

    Col2.Left := Col1.Right + 1 ;

    Col2.Right := Col2.Left + Size2 ;

    Col3.Left := Col2.Right + 1 ;

    Col3.Right := col3.Left + Size3 ;

    Data := TListBox(Control).Items[Index] ; // 리스트박스의 데이터를 대입



    with TListBox(Control).Canvas do

    begin

    FillRect (Rect) ; // 반드시 필요.

    Tab_Pos := Pos (#9, Data) ;

    // TextRect대신 TextOut를 사용해도 됩니다.

    // 첫번째 칼럼 출력

    TextRect (Col1, Col1.Left, Col1.top, copy(Data, 1, Tab_Pos-1)) ;



    // 두번째 칼럼 출력

    Data := Copy(Data, Tab_Pos+1, Length(Data) - Tab_Pos + 1) ;

    Tab_Pos := Pos (#9, Data) ;

    TextRect (Col2, Col2.Left, Col2.top, copy(Data, 1, Tab_Pos-1)) ;



    // 세번째 칼럼 출력

    Data := Copy(Data, Tab_Pos+1, Length(Data) - Tab_Pos + 1) ;

    TextRect (Col3, Col3.Left, Col3.top, Data) ;

    end ;



    end;



    그럼...