Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2014, 15:07   #11
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Цитата:
Т.е. единственный выход - прорисовывать таблицу и подгружать из файла нужно ровно столько, сколько помещается на видимой части таблицы?
Про прокрутку скроллером не забудьте. Не забудьте и про буферную зону(чтоб учесть прокрутну на 3 строки вверх и вниз).
Человек_Борща вне форума Ответить с цитированием
Старый 31.07.2014, 15:12   #12
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А я даже примерчик подкину:
Код:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Grids,
  StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    DrawGrid1: TDrawGrid;
    ScrollBar1: TScrollBar;
    procedure DrawGrid1DrawCell(Sender: TObject; aCol, aRow: Integer;
      aRect: TRect; aState: TGridDrawState);
    procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure ScrollBar1Change(Sender: TObject);
  private
    fs:TFileStream; fPos:integer;
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  ScrollBar1.Align:=alRight;
  ScrollBar1.Kind:=sbVertical;
  fs:=TFileStream.Create('d:\save.dat',fmOpenRead);
  with DrawGrid1 do begin
    DefaultColWidth:=20; DefaultRowHeight:=DefaultColWidth;
    FixedRows:=0; FixedCols:=0;
    RowCount:=self.Height div DefaultRowHeight; ColCount:=16;
    Align:=alClient;
    ScrollBars:=ssNone;
    ScrollBar1.Max:=fs.Size div RowCount;
  end;
  fPos:=0;
end;

procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
  fPos:=ScrollBar1.Position;
  DrawGrid1.Repaint;
end;

procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  fs.Free;
end;

procedure TForm1.DrawGrid1DrawCell(Sender: TObject; aCol, aRow: Integer;
  aRect: TRect; aState: TGridDrawState);
var ps:Cardinal;
begin
  with TDrawGrid(sender) do begin
    ps:=fPos+(aRow*(RowCount-1))+aCol;
    fs.Position:=ps;
    Canvas.TextOut(aRect.Left,aRect.Top,IntToHex(fs.ReadByte,2));
  end;
end;

end.
Только чур не копипастить!
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.07.2014, 21:19   #13
mahatmaQL
Пользователь
 
Регистрация: 02.04.2014
Сообщений: 18
По умолчанию

спасибо за советы и пример!

Пока не получилось плотно сесть за задачу, только в уме. Думаю, что можно разбить всю таблицу на страницы, равные VisibleRowCount. Естественно, учесть буферные строки при загрузке содержимого. Перерисовывать содержимое в зависимости от номера страницы, TopRow и VisibleRowCount.
На счет использования ТScrollBar были мысли, но не знал, как сделать, поэтому отдельно спасибо за пример. Обещаю не копипастить.
mahatmaQL вне форума Ответить с цитированием
Старый 31.07.2014, 21:44   #14
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Думаю, что можно разбить всю таблицу на страницы
Что настолько слабый комп будет? Даже побайтное чтение в TFileStream вроде за собой тормоза не вещает. Не ну можно конечно поступить не так как в примере - втупую, а с буфферизацией, но... Простота она иногда дает больший КПД нежели выкрутасы с оптимизацией.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.07.2014, 22:31   #15
mahatmaQL
Пользователь
 
Регистрация: 02.04.2014
Сообщений: 18
По умолчанию

Возможно, я запутался и чего-то не так понимаю. Пытаюсь разобраться в Вашем примере. Не подскажите описание процедуры ReadByte. Что-то не могу найти ее в TFileStream, среда Delphi7.
mahatmaQL вне форума Ответить с цитированием
Старый 31.07.2014, 22:35   #16
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вот потому и предупреждаю: не копипастить )
Код:
var b:byte;
...
fs.ReadBuffer(b,1);
...IntToHex(b,2);
...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка "out of memory" Rest_Tremor Общие вопросы Delphi 14 09.04.2013 10:03
Load exe into memory and run it from memory artush1984 Win Api 10 06.02.2012 18:43
Out of memory Bogoley4ik C++ Builder 3 09.04.2011 00:02
Ошибка Out of Memory kruftin Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 11.12.2010 18:46
Ошибка malloc(): memory corruption Роман Радер Общие вопросы C/C++ 6 03.10.2009 19:34