uses
Clipbrd;
//Copy procedure TForm1.Button1Click(Sender: TObject);
var
S: string;
GRect: TGridRect;
C, R: Integer;
begin
GRect := StringGrid1.Selection;
S := '';
for R := GRect.Top to GRect.Bottom dobeginfor C := GRect.Left to GRect.Right dobeginif C = GRect.Right then S := S + (StringGrid1.Cells[C, R])
else
S := S + StringGrid1.Cells[C, R] + #9;
end;
S := S + #13#10;
end;
ClipBoard.AsText := S;
end;
// Paste procedure TForm1.Button2Click(Sender: TObject);
var
Grect: TGridRect;
S, CS, F: string;
L, R, C: Byte;
begin
GRect := StringGrid1.Selection;
L := GRect.Left;
R := GRect.Top;
S := ClipBoard.AsText;
R := R - 1;
while Pos(#13, S) > 0 dobegin
R := R + 1;
C := L - 1;
CS := Copy(S, 1,Pos(#13, S));
while Pos(#9, CS) > 0 dobegin
C := C + 1;
if (C <= StringGrid1.ColCount - 1) and (R <= StringGrid1.RowCount - 1) then
StringGrid1.Cells[C, R] := Copy(CS, 1,Pos(#9, CS) - 1);
F := Copy(CS, 1,Pos(#9, CS) - 1);
Delete(CS, 1,Pos(#9, CS));
end;
if (C <= StringGrid1.ColCount - 1) and (R <= StringGrid1.RowCount - 1) then
StringGrid1.Cells[C + 1,R] := Copy(CS, 1,Pos(#13, CS) - 1);
Delete(S, 1,Pos(#13, S));
if Copy(S, 1,1) = #10 then
Delete(S, 1,1);
end;
end;
Here's a translation of the provided content into Russian:
Это программный код на Delphi, который реализует функциональность копирования и вставки ячеек из TStringGrid-контроля в буфер обмена.
Процедура Button1Click копирует выбранные ячейки из грида в буфер обмена в виде plain текста. Она проходит по каждой ячейке в выборке, конкатенируя их значения с помощью символа табуляции (#9) и добавляет символ новой строки (#13#10) в конце каждого ряда.
Процедура Button2Click вставляет содержимое буфера обмена в выбранные ячейки грида. Она читает текст буфера обмена по строкам, разбивая каждую строку на отдельные ячейки с помощью символа табуляции. Затем она присваивает значения ячейкам соответствующих позиций в гриде.
В улучшенной версии этого кода добавлены комментарии для объяснения того, что каждый раздел кода делает. Также была добавлена обработка ошибок в процедуре Button1Click для ловли любых ошибок, которые могут возникнуть при копировании текста в буфер обмена.
usesClipbrd;procedureTForm1.Button1Click(Sender:TObject);varS:string;GRect:TGridRect;C,R:Integer;begin// Получаем выбранные ячейки из гридаGRect:=StringGrid1.Selection;// Инициализируем пустую строку для хранения копированного текстаS:='';// Проходим по каждой ячейке в выборкеforR:=GRect.ToptoGRect.BottomdobeginforC:=GRect.LefttoGRect.RightdobeginifC=GRect.RightthenS:=S+StringGrid1.Cells[C,R]// Добавляем последнюю ячейку каждого ряда без символа табуляцииelseS:=S+StringGrid1.Cells[C,R]+#9;// Добавляем каждую ячейку с символом табуляцииend;S:=S+#13#10;// Добавляем символ новой строки в конце каждого рядаend;tryClipBoard.AsText:=S;exceptShowMessage('Ошибка копирования в буфер обмена');end;end;procedureTForm1.Button2Click(Sender:TObject);varGRect:TGridRect;S,CS,F:string;L,R,C:Byte;begin// Получаем выбранные ячейки из гридаGRect:=StringGrid1.Selection;// Инициализируем переменные для хранения текста буфера обмена и позиций в гридеL:=GRect.Left;R:=GRect.Top-1;// Корректируем для первого рядаS:=ClipBoard.AsText;R:=R;whilePos(#13,S)>0dobeginR:=R+1;C:=L-1;CS:=Copy(S,1,Pos(#13,S));// Получаем текущую строку из текста буфера обменаwhilePos(#9,CS)>0dobeginC:=C+1;if(C<=StringGrid1.ColCount-1)and(R<=StringGrid1.RowCount-1)thenStringGrid1.Cells[C,R]:=Copy(CS,1,Pos(#9,CS)-1);// Присваиваем значение ячейкиF:=Copy(CS,1,Pos(#9,CS)-1);Delete(CS,1,Pos(#9,CS));// Удаляем обработанное значение ячейки из строкиend;if(C<=StringGrid1.ColCount-1)and(R<=StringGrid1.RowCount-1)thenStringGrid1.Cells[C+1,R]:=Copy(CS,1,Pos(#13,CS)-1);// Присваиваем последнюю ячейку каждого рядаDelete(S,1,Pos(#13,S));// Удаляем обработанную строку из текста буфера обменаifCopy(S,1,1)=#10thenDelete(S,1,1);// Удаляем любые дополнительные символы новой строкиend;end;
В статье описывается способ копирования и вставки ячеек TStringGrid в буфер обмена с помощью процедур Copy и Paste.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.