//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "uPasteExcelDataMainForm.h"
#include <Vcl.Clipbrd.hpp>
#include <memory>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TPasteExcelDataMainForm *PasteExcelDataMainForm;
//---------------------------------------------------------------------------
__fastcall TPasteExcelDataMainForm::TPasteExcelDataMainForm(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TPasteExcelDataMainForm::StringGrid1KeyDown(TObject *Sender, WORD &Key,
		  TShiftState Shift)
{
	if(Key == vkV && Shift.Contains(ssCtrl))
		PasteExcelDataFromClipboard(static_cast<TStringGrid*>(Sender));

}

void TPasteExcelDataMainForm::PasteExcelDataFromClipboard(TStringGrid* StringGrid)
{
//Проверяем буффер на наличие данных с \r\n в конце каждой строки
	if (!Clipboard()->HasFormat(CF_TEXT)){
		MessageDlg(u"Буфер не содержит данных!",
			mtInformation, TMsgDlgButtons() << mbOK, 0);
		return;
	}
//Записываем строки строк буфера в массив по умному указателю строк std::unique_ptr<BuffLines>
	const auto UPtrBuffLines {std::make_unique<TStringList>()};
	UPtrBuffLines -> Delimiter = '\n';
	UPtrBuffLines -> StrictDelimiter = true;
	UPtrBuffLines -> DelimitedText = Clipboard() -> AsText;
//Определение индексов выбранной стартовой ячейки для вставки StringGrid
	const int SelectedCellCol {StringGrid -> Col};
	const int SelectedCellRow {StringGrid -> Row};
//Итерация по строкам строк буффера
	for(int I {0}; I < UPtrBuffLines -> Count; ++I){
//Записываем строки строки буфера в массив по умному указателю строк std::unique_ptr<BuffLine>
		const auto UPtrBuffLine {std::make_unique<TStringList>()};
		UPtrBuffLine -> Delimiter = '\t';
		UPtrBuffLine -> StrictDelimiter = true;
		UPtrBuffLine -> DelimitedText = UPtrBuffLines -> Strings [I];
//Итерация по строкам строки буффера
		for (int J {0}; J < UPtrBuffLine -> Count; ++J)
			StringGrid -> Cells[J + SelectedCellCol]
							   [I + SelectedCellRow] = UPtrBuffLine -> Strings[J];
	}

}
//---------------------------------------------------------------------------
