Сейчас на форуме: tyns777 (+4 невидимых)

 eXeL@B —› Программирование —› Delphi 7, dll и TStringGrid
Посл.ответ Сообщение

Ранг: 18.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 14 мая 2010 15:15 · Поправил: FockuS
· Личное сообщение · #1

Нужен пример кода для dll, чтобы вытащть содержимое с TStringGrid.
Уточнение: приложение чужое.
пробывал этот код, но не удачно. ((

procedure SGCopyToCLP(StringGrid: TStringGrid; CopySel: Boolean; CL: integer = -1;
RT: integer = -1; CR: integer = -1; RB: integer = -1)stdcall;
var
i, j: Integer;
s: string;
begin
s := '';
with StringGrid do
begin
if CopySel then
begin
CL := Selection.Left;
CR := Selection.Right;
RT := Selection.Top;
RB := Selection.Bottom;
end;
if (CL < FixedCols) or (CL > CR) or (CL >= ColCount) then
CL := FixedCols;
if (CR < FixedCols) or (CL > CR) or (CR >= ColCount) then
CR := ColCount - 1;
if (RT < FixedRows) or (RT > RB) or (RT >= RowCount) then
RT := FixedRows;
if (RB < FixedCols) or (RT > RB) or (RB >= RowCount) then
RB := RowCount - 1;
for i := RT to RB do
begin
for j := CL to CR do
begin
s := s + Cells[j, i];
if j < CR then
s := s + #9;
end;
s := s + #13#10;
end;
end;
ClipBoard.AsText := s;
end;



копирование происходит, но не до конца
показывает 2 ошибки
1) ишибка на чтение с адреса
2) Stack overloff




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 14 мая 2010 16:28 · Поправил: Isaev
· Личное сообщение · #2

1. FockuS пишет:
копирование происходит, но не до конца

Копирование никуда не происходит, т.к. s локальная переменная и процедура ничего не возвращает
2. FockuS пишет:
показывает 2 ошибки

судя по
Code:
  1. CL := Selection.Left;
  2. CR := Selection.Right;
  3. RT := Selection.Top;
  4. RB := Selection.Bottom;

необходимо перед копированием выделить область в таблице, иначе ошибки будут

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 137.9 (ветеран), 45thx
Активность: 0.080
Статус: Участник

Создано: 14 мая 2010 17:37
· Личное сообщение · #3

FockuS
forum.vingrad.ru/articles/topic-226725.html



Ранг: 18.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 14 мая 2010 17:37
· Личное сообщение · #4

варианты вызов процедуры:

SGCopyToCLP(StringGrid, True); //выделение

SGCopyToCLP(StringGrid, False); //все ячейки

SGCopyToCLP(StringGrid, False, 1, 1, 3, 2); //диапазон, 6 ячеек

Весь код взят с примера.
В своем приложении, работает на УРА.
но никак не могу применить этот код к чужому ((

если есть другие варианты, прошу не молчать.



Ранг: 18.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 14 мая 2010 17:42
· Личное сообщение · #5

Isaev пишет:
Копирование никуда не происходит, т.к. s локальная переменная и процедура ничего не возвращает



сор, забыл дописать

end;
ClipBoard.AsText := s;
end;



Ранг: 18.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 14 мая 2010 21:54
· Личное сообщение · #6

Биг СПС yanus0

Тема закрыта


 eXeL@B —› Программирование —› Delphi 7, dll и TStringGrid
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати