Форум: "Основная";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];
ВнизПроблема с отображением поля типа dtGraphic в отчете Rave Report Найти похожие ветки
← →
Денис Евлентьев (2004-01-28 10:11) [0]Проблема с отображением поля типа dtGraphic в отчете Rave Report в случае использования
в качестве источника данных объекта типа TRvCustomConnection.
При назначении в отчете компоненту Bitmap в качестве источника данных поля получаемого из
TRvCustomConnection и запуске отчета получаем Access Violation.
Для воспроизведения ситуации выполняем следующие действия.
Добавляем на форму TImage и вставляем туда какой-нибудь bitmap.
Добавляем на форму источник данных TRvCustomConnection, задаем обработчик OnGetCols.
procedure TForm1.RvCustomConnection1GetCols(Connection: TRvCustomConnection);
begin
Connection.WriteField("PICTURE", dtGraphic, 10, "PICTURE", "PICTURE");
end;
Задаем обработчик OnGetRow.
procedure TForm1.RvCustomConnection1GetRow(
Connection: TRvCustomConnection);
var
Buffer: PChar;
Stream: TMemoryStream;
begin
if Assigned(Image1.Picture.Bitmap) then
begin
Stream := TMemoryStream.Create;
try
Image1.Picture.Bitmap.SaveToStream(Stream);
Stream.Position := 0;
Buffer := PChar(AllocMem(Stream.Size + 1));
Stream.ReadBuffer(Buffer^, Stream.Size);
Connection.WriteBlobData(Buffer^, Stream.Size);
finally
Stream.Free;
if Assigned(Buffer) then
FreeMem(Buffer);
end;
end
else Connection.WriteNullData;
end;
Задаем обработчик OnOpen
procedure TForm1.RvCustomConnection1Open(Connection: TRvCustomConnection);
begin
RowCount := 0; // Переменную RowCount нужно объявить в классе формы
end;
Задаем обработчик OnEof
procedure TForm1.RvCustomConnection1EOF(Connection: TRvCustomConnection;
var Eof: Boolean);
begin
Eof := RowCount > 1;
Inc(RowCount);
end;
← →
Zergling (2004-01-28 12:41) [1]Я гружу растр из файла (переделаешь я думаю) :)
var
I: Integer = 1;
procedure TForm1.RvCustomConnection1Open(Connection: TRvCustomConnection);
begin
Connection.DataRows := 3;
end;
procedure TForm1.RvCustomConnection1GetCols(
Connection: TRvCustomConnection);
begin
// Определяем какие будут поля
with Connection do
begin
WriteField("Graph", dtGraphic, 20, "Graph", "");
end;
end;
procedure TForm1.RvCustomConnection1GetRow(
Connection: TRvCustomConnection);
var
MB: TMemoryStream;
Buf: PByte;
begin
with Connection do
begin
try
MB := TMemoryStream.Create;
MB.LoadFromFile("C:\1.bmp");
MB.Position := 0;
Buf := PByte(AllocMem(MB.Size + 1));
MB.ReadBuffer(Buf^, MB.Size);
if I <= 3 then
begin
WriteBlobData(Buf^, MB.Size);
end else
begin
WriteNullData;
end;
finally
MB.Free;
if Assigned(Buf) then FreeMem(Buf);
end;
end; // with
Inc(I);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
RvProject1.Execute;
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.08 c