|  26.02.2009, 15:20 | #1 | 
| Участник | фильтр на копировании в буфер обмена 
			
			добрый день, коллеги - у меня стоит такая задача. При копировании через буфер обмена содержимого грида в EXCEL надо в момент копирования в буфер отсечь определенные записи, скажите какой метод на форме или датасорсе мне надо перекрыть, пробовал многие - толку нет никакого | 
|  | 
|  26.02.2009, 16:22 | #2 | 
| Участник | 
			
			ИМХО - нереально. Разве что ставить фильтр на грид перед копированием.
		 
				__________________ Существует 10 типов людей: одни понимают двоичную систему, другие - нет. | 
|  | 
|  26.02.2009, 16:55 | #3 | 
| Участник | 
			
			я тоже прихожу к такому выводу , фильтр я бы поставил но там зависимость попадания в буфер обмена от сложного дисплей метода
		 | 
|  | 
|  26.02.2009, 17:05 | #4 | 
| Программатор | 
			
			Сделайте кнопку для выгрузки в Эксель. Меньше гемора, но и помедленнее правда.
		 | 
|  | 
|  26.02.2009, 17:28 | #5 | 
| Участник | 
			
			намного медленнее - поэтому пришлось через буфер обмена
		 | 
|  | 
|  26.02.2009, 17:55 | #6 | 
| Участник | 
			
			Перехватите в мтетоде task() формы событие копирования в буфер, скопируйте буфер в свою переменную, отредактируйте её и запихните в буфер обмена зы X++: #define.taskCopy(771) 
				__________________ aLL woRk aNd nO JoY MAKes jAck a dULL Boy Последний раз редактировалось ivas; 26.02.2009 в 17:59. | 
|  | 
|  26.02.2009, 18:07 | #7 | 
| Боец | 
			
			Чуть опоздал, но как пример к предыдущему посту. перед super() в методе task() формы делаем вставку X++: //EVO --> #task if (_taskId == #taskCopy) { //TODO: track selected records and copy to clipboard manually (use class TextBuffer) return _taskId; } //EVO <-- Последний раз редактировалось DSPIC; 26.02.2009 в 18:09. | 
|  | 
|  26.02.2009, 18:11 | #8 | 
| Участник | 
			
			вот набросал примерчик) X++: #define.taskCopy(771) public int task(int _taskId) { TextBuffer txtBuffer; str text; int ret; if (_taskId != #taskCopy) ret = super(_taskId); else { ret = super(_taskId); txtBuffer = new TextBuffer(); txtBuffer.fromClipboard(); text = txtBuffer.getText(); //крячим буфер) txtBuffer.setText(text); txtBuffer.toClipboard(); } return ret; } 
				__________________ aLL woRk aNd nO JoY MAKes jAck a dULL Boy | 
|  | 
|  26.02.2009, 18:13 | #9 | 
| Axapta | 
			
			А если пойти от обратного немного. То есть сделать кнопку, по которой выделять только нужные записи. А их уже копировать в эксель. Должно быть существенно проще. Про выделение строк тут: Как пометить на grid_е несколько строк ? | 
|  | 
|  26.02.2009, 18:15 | #10 | 
| Участник | 
			
			или в таске с ненужных просто убрать выделение) так наверно ещё проще
		 
				__________________ aLL woRk aNd nO JoY MAKes jAck a dULL Boy | 
|  | 
|  26.02.2009, 18:19 | #11 | 
| Axapta | 
			
			Нет. Я бы делал именно так, как написал выше. Это позволит пользователю увидеть, какие строки попадут в отчет и, при необходимости, подкорректировать что-то. И не будет вопросов, почему какая-то строка не выгрузилась в эксель. А все эти перехваты тасков без особой необходимости от лукавого, имхо.
		 | 
|  | 
|  26.02.2009, 18:24 | #12 | 
| Участник | Цитата: 
		
			Сообщение от oip
			   Нет. Я бы делал именно так, как написал выше. Это позволит пользователю увидеть, какие строки попадут в отчет и, при необходимости, подкорректировать что-то. И не будет вопросов, почему какая-то строка не выгрузилась в эксель. А все эти перехваты тасков без особой необходимости от лукавого, имхо. 
				__________________ aLL woRk aNd nO JoY MAKes jAck a dULL Boy | 
|  | 
|  26.02.2009, 18:30 | #13 | 
| Axapta | 
			
			Зачем запрещать? Я не вижу в постановке задачи, почему копировать все запрещено. Захотел пользователь скопировать все, скопировал все. Захотел только то, что надо, скопировал то, что надо. Может я неправильно понимаю задачу, но сейчас я ее вижу так: нужно дать пользователю возможность быстро выгрузить в эксель строки, отобранные по определенному критерию. И все, больше ничего.
		 | 
|  | |
| За это сообщение автора поблагодарили: ZVV (1). | |
|  26.02.2009, 18:33 | #14 | 
| Участник | 
			
			Судя по всему это для защиты данных от "дурака") т.к. есть куча софта позволяющего грабить текст прямо с экрана)
		 
				__________________ aLL woRk aNd nO JoY MAKes jAck a dULL Boy | 
|  | 
|  26.02.2009, 18:38 | #15 | 
| Axapta | 
			
			Во-первых, про это нигде не написано. Во-вторых, безопасность данных должна достигаться совсем другими средствами, а не перехватом метода task. Не забывайте про обычный скриншот, например. Или пользователь может ручками просто создать в экселе "ненужную" строку.
		 | 
|  | 
|  26.02.2009, 21:10 | #16 | 
| Участник | 
			
			коллеги - огромное спасибо за ответы ! Помогло. Воспользовался методом markRecord, во время перебора строк  и определяю нужно ли выделять для последующего копирования или нет
		 | 
|  | 
| Теги | 
| buffer, clipboard, copy, excel, grid, буфер обмена, грид, сеть, копирование | 
|  | 
| 
 |