Показать сообщение отдельно
  #6  
Старый 19.04.2018, 21:54
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Думал что-то сложное, но вы, как всегда проделали основную работу самостоятельно и обошлось всё вроде малой кровью, вот с небольшими добавками ваш обработчик жима восьмой кнопки
Код:
procedure TForm1.Button8Click(Sender: TObject);
var
  i: integer;
  iRoot, iNode: IXMLNode;
begin
  XMLDocument2.Active := True; // актвирируем XML документ
  XMLDocument2.Options := XMLDocument2.Options + [doNodeAutoIndent] -
    [doAutoSave]; // отключаем форматирование и автосохранение документа
  // Создаем служебный заголовок
  XMLDocument2.Version := '1.0'; // Указываем версию документа
  XMLDocument2.Encoding := 'windows-1251'; // Указываем кодировку для русского языка
  // Создаем корневой узел документа
  iRoot := XMLDocument2.AddChild('Document_Element'); // root узел документа
  // Создаем шапку документа с атрибутами
  iNode := iRoot.AddChild('HEAD'); // Название узла
  iNode.Attributes['ObjectCount'] := IntToStr(StringGrid2.RowCount + StringGrid1.RowCount);
  // Количество всех узлов "OBJECT"
  iNode.Attributes['SC'] := Edit1.Text; // Атрибут масштаб
  iNode.Attributes['Razr'] := Edit10.Text; // Атрибут разрешение
  iNode.Attributes['Project'] := Edit3.Text; // Атрибут проекция

  for i := 0 to StringGrid2.RowCount-1 do
   begin
    iNode:= iRoot.AddChild('OBJ');                 //Название узла
    iNode.Attributes['РЕГИОН'] := StringGrid2.Rows[i][0];                  //Атрибут регион
    iNode.Attributes['CountC'] := '1';          //Атрибут количества контуров (по умолчанию равен 1)
    iNode.Attributes['CountP'] := '1';          //Атрибут количества точек (по умолчанию равен 1)
    iNode.Attributes['Latitude'] := StringGrid2.Rows[i][1];             //Атрибут широта (записываем данные из Srtinggrid)
    iNode.Attributes['Longitude'] := StringGrid2.Rows[i][2];            //Атрибут долгота (записываем данные из Srtinggrid)
  end;

  for i := 0 to StringGrid1.RowCount-1 do
   begin
    iNode:= iRoot.AddChild('OBJ');                 //Название узла
    iNode.Attributes['РЕГИОН'] := StringGrid1.Rows[i][0];                  //Атрибут регион
    iNode.Attributes['CountC'] := '1';          //Атрибут количества контуров (по умолчанию равен 1)
    iNode.Attributes['CountP'] := '1';          //Атрибут количества точек (по умолчанию равен 1)
    iNode.Attributes['Latitude'] := StringGrid1.Rows[i][1];             //Атрибут широта (записываем данные из Srtinggrid)
    iNode.Attributes['Longitude'] := StringGrid1.Rows[i][2];            //Атрибут долгота (записываем данные из Srtinggrid)
  end;

  ShowMessage('Найтройки созданы. Сохраните результаты.');

  Button3.Enabled:= true;
end;
теперь сливает данные из двух сеток в один общий блок, посмотрите пжлст, мож надо было в разные их пихать, но вроде без разницы это

З.Ы. Косяк только что вылез - между данными разных сеток и в конце пролезают теги-пустышки, думаю, это из-за того, что в StringGridах есть последняя пустая строка, нужно или её грохать, или тогда в forах считать до StringGridХ.RowCount-2 do...
Ответить с цитированием