Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как скопировать содержимое ячейки AdvStringGrid1, когда кликаешь по ней мышкой? 
V
    Опции темы
Canada
Дата 26.4.2009, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 9.2.2009

Репутация: нет
Всего: нет



Есть AdvStringGrid1 от ТМС. Вот хочется, чтобы как только я кликал по ячейке, т.е. выделял ее, чтобы содержимое ее копировалось в буфер обмена, ну типа вставить можно потом в блокнот и т.д.

Т.е. подозреваю, что событие будет OnClickCell обрабатываться. Т.е. TForm1.AdvStringGrid1ClickCell. Но как в буфер копировать? Я не знаю. Помогите пожалуйста.
PM MAIL   Вверх
kami
Дата 26.4.2009, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 22
Всего: 72



И в чем проблема?
OnClickCell имеет x и y ячейки.
Св-во AllCells[x,y] вернет текст этой ячейки
Дальше все просто: добавить текст в clipboard
PM MAIL WWW   Вверх
Canada
  Дата 26.4.2009, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 9.2.2009

Репутация: нет
Всего: нет



А как мне Handle узнать моей программы? Что вообще такое?
PM MAIL   Вверх
kami
Дата 26.4.2009, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 22
Всего: 72



Цитата(Canada @  26.4.2009,  23:38 Найти цитируемый пост)
А как мне Handle узнать моей программы?

Причем здесь Application.Handle?
Хендл - это идентификатор/указатель/"ручка" какого-либо объекта.
У тебя же OnClickCell располагается в TForm1 ? (или как-там-назвал-форму). У TForm есть такое свойство - Handle, поэтому в коде по ссылке ничего менять не нужно.
Так и писать:
Код

SetClipboardText(Handle{ или, если угодно, Self.Handle}, AllCells[x,y]);


PM MAIL WWW   Вверх
Canada
Дата 27.4.2009, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 9.2.2009

Репутация: нет
Всего: нет



Ого! Спасибо. Я думал надо менять. Но я пока тоже без дела не сидел и читал про модуль Clipbrd. Мне бы он очень подошел.
Я написал такой вот простенький кусочек
Код

Uses Clipbrd;

procedure TForm1.AdvStringGrid1ClickCell(Sender: TObject; ARow,
  ACol: Integer);
begin
 Clipboard.clear;
 Clipboard.AsText:=AdvStringGrid2.Cells[ARow,ACol];
end;


А не работает. Вернее работает частично. Кликаешь 1 раз по ячейке[0,0] - копирует. Второй раз по любой другой - выдает пустой буфер, т.е. ничего не вставляет. Типа нечего. Почему?
PM MAIL   Вверх
kami
Дата 27.4.2009, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 22
Всего: 72



Если AdvStringGrid2.Cells[ARow,ACol] <>'' , то :
1. Use the AsText property to place text in and retrieve text from the clipboard. The clipboard must contain a string or an exception occurs. To determine if the clipboard contains a string, pass CF_TEXT to the HasFormat method.
2. Если 1 успешно, то нужно лезть в VCL.
К сожалению, основной метод TClipBoard - SetBuffer не учитывает результат SetClipboardData.
Чуть поколдовав над ним (методом SetBuffer), можно получить следующее:
(код действителен для D7, но сомневаюсь, что что-то кардинально изменилось)
Код

try
  Move(Buffer, DataPtr^, Size);
  Adding;
  ClipHandle:=SetClipboardData(Format, Data);
  if ClipHandle=0 then
    MessageBox(0, IntToStr(GetLastError), 'clipBoard SetBuf error', MB_OK);

finally
  GlobalUnlock(Data);
end;

Затем - смотреть, что означает код ошибки в SystemErrorCodes

Только для всех этих манипуляций лучше скопировать Clipbrd.pas в каталог со своей программой и заниматься его модификацией уже там.

Добавлено через 3 минуты и 58 секунд
Хотя в 1. кажется, нет смысла - все равно при AsText происходит очистка.
PM MAIL WWW   Вверх
Canada
Дата 27.4.2009, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 9.2.2009

Репутация: нет
Всего: нет



Т.е. выходит, что я не смогу кликом скопировать содержимое ячейки????? Вот это прелестно.

Добавлено через 13 минут и 57 секунд
Я тут заметил странности. Кинул на форму Label чтобы выводить на него то, что выделяется кликом. Выбираю значит 1 яейку в табличе, а в Label почему-то результат из 2-й таблицы. Выбираю 2 ячейку в 1 столбце Таблицы1 - результат из 2-й таблицы. Что это такое???
PM MAIL   Вверх
Canada
Дата 27.4.2009, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 9.2.2009

Репутация: нет
Всего: нет



Вообще бред конечно какой-то. Уже сделал 2 метки Label чтобы в 1 видеть координаты ячейки, на которую поставлен указатель, а во второй печаталось содержимое ячейки с этими же координатами. В итоге - в ячейке координаты правильные, а в 2 метке значение от соседней ячейки. Это как так вообще быть может?
PM MAIL   Вверх
Canada
  Дата 27.4.2009, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 9.2.2009

Репутация: нет
Всего: нет



А ларчик просто открывался..ACol сначала и ARow во вторых..А у меня наоборот. Вопрос решен! Уря)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0489 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.