Q&A

  • DBGrid의 Memo Field 내용 나타내기는 어떻게??
델파이 이제 시작한 초보입니다.



김영대님의 델파이 팁 자료실에

"DBGrid에 Memo필드의 내용 출력하기" 라는 제목으로 아주 유용한 팁을 올려

주셨더군요

그런데..

실행을 해보니 "BS := TBlobStream.Create(Table1Notes, bmRead); "부분에서

Access violation error가 나는 부분이 있어 아무리 연구를 해보아도

제 실력으론 극복할 수 가 없더군요.

아시는 분... 제발 도움을 주시기 바랍니다...



그리고 한가지만 더 부탁할께요.

TMemoField 라는 component가 있는지요?

아래 소스에서는 클래스에 등록이 되어 있는데 찾아보아도 안보이더군요..

델파이에 있다면 있는 위치를, 다른 방법으로 등록을 한다면 그 방법을 좀

가르쳐 주세요..



아래에 소스를 참부합니다...



unit Unit1;



interface



uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

Grids, DBGrids, Db, DBTables;



type

TForm1 = class(TForm)

Table1: TTable;

DataSource1: TDataSource;

DBGrid1: TDBGrid;

Table1Notes: TMemoField;

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

Field: TField; State: TGridDrawState);

private

{ Private declarations }

public

{ Public declarations }

end;



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;



end.

0  COMMENTS