델파이 이제 시작한 초보입니다.
김영대님의 델파이 팁 자료실에
"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.