Модератор: Модераторы
SGbuf:=TStringGrid.Create(nil);
SGbuf.ColCount:=1;
SGbuf.LoadFromFile('History.buf');
Memo1.Text:=SGbuf.Cells[0,0];
Caption := IntToStr(SGbuf.RowCount);
<?xml version="1.0"?>
<CONFIG>
<grid version="3">
<saveoptions create="False" content="True" position="False"/>
<content>
<cells cellcount="16">
<cell1 row="0" text="set names utf8" column="0"/>
<cell2 row="1" text="select * from glob" column="0"/>
<cell3 row="2" text="select * from glob" column="0"/>
<cell4 row="3" text="set names utf8" column="0"/>
<cell5 row="4" text="select * from glob" column="0"/>
<cell6 row="5" text="select * from glob" column="0"/>
<cell7 row="6" text="use ksall" column="0"/>
<cell8 row="7" text="select * from test" column="0"/>
<cell9 row="8" text="use test" column="0"/>
<cell10 row="9" text="0rty" column="0"/>
<cell11 row="10" text="select * from test" column="0"/>
<cell12 row="11" text="use test" column="0"/>
<cell13 row="12" text="use test" column="0"/>
<cell14 row="13" text="use ksall" column="0"/>
<cell15 row="14" text="use test" column="0"/>
<cell16 row="15" text="use test" column="0"/>
</cells>
</content>
</grid>
</CONFIG>
//Берем количество строк и колонок из файла
procedure TForm1.GetRowColCount(var r{RowCount}, c{ColCount}: Integer; f{ileName}: String);
var
xmlf: TXMLConfig; // unit XMLCfg
vers, cl: Integer;
begin
if not FileExistsUTF8(f) then Exit; //Если файл не тот - выход
xmlf:=TXMLConfig.Create(nil);
try
xmlf.Filename := f;
Vers := xmlf.GetValue('grid/version',-1);
if Vers = -1 then Exit; //Если версия файла не та - выход
cl := xmlf.getValue('grid/content/cells/cellcount', 0); //Количество ячеек
c := Succ(xmlf.GetValue('grid/content/cells/cell'+IntToStr(cl)+'/column', -1)); //количество колонок
r := Succ(xmlf.GetValue('grid/content/cells/cell'+IntTostr(cl)+'/row', -1)); //количество строк
finally
FreeThenNil(xmlf); //из unit LCLProc - освобождаем память
end;
end;
//Примерно так делаем вызов
procedure TForm1.BitBtn2Click(Sender: TObject);
var r, c: Integer;
begin
GetRowColCount(r, c, 'grd1.test');
StringGrid1.RowCount := r;
StringGrid1.Colcount := c;
StringGrid1.LoadFromFile('grd1.test');
end;
Спасибо.
Но все же я считаю, что это недоделка для LoadFromFile. Может пофиксят со временем?
StringGrid1.SaveOptions:=[soDesign, soContent];
procedure TCustomStringGrid.LoadContent(Cfg: TXMLConfig; Version:Integer);
var
ContentSaved: Boolean;
i,j,k: Integer;
begin
inherited LoadContent(Cfg, Version); //Здесь просто формируется таблица, во время дизайна, по умолчанию
if soContent in FSaveOptions then begin
ContentSaved:=Cfg.GetValue('grid/saveoptions/content', false);
if ContentSaved then begin
k:=cfg.getValue('grid/content/cells/cellcount', 0);
// Сюда и можно вставить код для установки правильного количества строк и столбцов
while k>0 do begin
i:=cfg.GetValue('grid/content/cells/cell'+IntToStr(k)+'/column', -1);
j:=cfg.GetValue('grid/content/cells/cell'+IntTostr(k)+'/row',-1);
if (j>=0)and(j<=rowcount-1)and(i>=0)and(i<=Colcount-1) then // Проверка на существующие ячейки
Cells[i,j]:=cfg.GetValue('grid/content/cells/cell'+IntToStr(k)+'/text','');
Dec(k);
end;
end;
end;
end;
Vadim писал(а):Logo
Там в файле есть опция create = True/False. Я думал, может она влияет на создание ячеек, но ошибся. Видимо смысл её намного глубже.
GAMER писал(а):Вроде работает и без этих опций. Видать они включены по умолчанию.
Vadim писал(а):GAMER писал(а):Вроде работает и без этих опций. Видать они включены по умолчанию.
Работать, безусловно, работает, но по умолчанию в файл скидывается только контент, без указания кол-ва строк и столбцов.
GAMER писал(а):Вопрос снят. перед записью в файл нужно делать SGbuf.SaveOptions := [soDesign, soContent, soAttributes];
Тогда читает коректное значение строк.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 48