Q&A

  • DBGrid에서 (memo)로 나오는데..
폼에 DBGrid하나 언고, query랑 datasource를 하나 얹었습니다.



다른 필드는 정상적으로 출력이 되는데 한 필드가 (MEMO)의 형태만 나오고 내용이 나오지 않습니다. 아마도 데이타 형이 다른 포맷인것 같은데, 이것을 (MEMO)가 안나오고 내용이 나오게 하는 방법이 없을까요?



그림은 DBGrid에 나오게 할수 있다고 들었는데, (MEMO)로 나오는것도 방법이 있을것 같은데 영 갑갑하군요.푸우우우우우~~(한숨소리)

1  COMMENTS
  • Profile
    최석기 2000.08.12 02:07
    선해석 wrote:

    > 폼에 DBGrid하나 언고, query랑 datasource를 하나 얹었습니다.

    >

    > 다른 필드는 정상적으로 출력이 되는데 한 필드가 (MEMO)의 형태만 나오고 내용이 나오지 않습니다. 아마도 데이타 형이 다른 포맷인것 같은데, 이것을 (MEMO)가 안나오고 내용이 나오게 하는 방법이 없을까요?

    >

    > 그림은 DBGrid에 나오게 할수 있다고 들었는데, (MEMO)로 나오는것도 방법이 있을것 같은데 영 갑갑하군요.푸우우우우우~~(한숨소리)



    예전에 어디선가 받아놓은 소스가 있네요..



    참고하세요..





    const

    MAX_CHARSIZE = 50; // DBGrid에 출력할 Memo 필드의 글자수



    var

    Form1: TForm1;



    implementation



    {$R *.DFM}



    procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;

    Field: TField; State: TGridDrawState);

    var

    P: array [0..MAX_CHARSIZE] of char;

    BS: TBlobStream;

    S: String;

    begin

    if Field is TMemoField then

    begin

    with (Sender as TDBGrid).Canvas do

    begin

    {Table1Notes 은 TMemoField 형입니다}

    BS := tBlobStream.Create(Table1Notes, bmRead);

    FillChar(P,SizeOf(P),#0);



    BS.Read(P, MAX_CHARSIZE); {blobStream 에서 MAX_CHARSIZE 바이트만큼 읽는다}

    BS.Free;

    S := StrPas(P);

    while Pos(#13, S) > 0 do {CR 문자 제거}

    S[Pos(#13, S)] := ' ';

    while Pos(#10, S) > 0 do {LF 문자 제거}

    S[Pos(#10, S)] := ' ';

    FillRect(Rect);

    TextOut(Rect.Left, Rect.Top, S);

    end;

    end;

    end;