Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/29: Рейтинг темы: голосов - 29, средняя оценка - 4.52
0 / 0 / 0
Регистрация: 29.10.2010
Сообщений: 93

Как запретить копирование текста из RichtextBox в буфер обмена?

29.11.2010, 11:44. Показов 6064. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача такая: выводить текст на форму так, чтобы его можно было только читать. Пробовал использовать Label, но без полос прокрутки текста получилось очень убого
Спасибо, если кто подскажет.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.11.2010, 11:44
Ответы с готовыми решениями:

Копирование текста в буфер обмена
Всем доброго времени суток. В макросе требуется скопировать текст в буфер обмена. Ну вроде сделал по инструкции Dim d As New DataObject ...

Копирование текста в буфер обмена
Всем привет, скажите пожалуста, как можна скопировать в буфер обмена определённый текст ?

Копирование текста в буфер обмена
Блин, после замены клипбордовых процедур с апишных на джаву на некоторых машинах (там кстати 8.5 стоит) нотес стал крошиться с ошибкой ...

40
0 / 0 / 0
Регистрация: 29.10.2010
Сообщений: 93
29.11.2010, 11:55  [ТС]
Извините, сам нашел ответ: поставить Enabled = False
Всем спасибо
0
0 / 0 / 0
Регистрация: 29.10.2010
Сообщений: 93
29.11.2010, 11:58  [ТС]
А! Нет, не получается: если текст большой, то скроллинг не работает.... а как же сделать тогда?
0
0 / 0 / 3
Регистрация: 28.01.2010
Сообщений: 279
29.11.2010, 12:17
AutoVerbMenu=False, Locked=True
0
0 / 0 / 0
Регистрация: 29.10.2010
Сообщений: 93
29.11.2010, 12:26  [ТС]
RE:'AutoVerbMenu=False, Locked=True'
не-а, не работает... то есть правый клик мышкой заблокирован, но можно выделить текст и все скопировать Ctrl+C
0
0 / 0 / 0
Регистрация: 29.10.2010
Сообщений: 93
29.11.2010, 13:54  [ТС]
Хотя, если отслеживать нажатие Ctrl+C, то можно использовать метод Clipboard.Clear, который очистит буфер обмена.

Тогда лишь одна проблема - как отслеживать нажатие Ctrl+C?
0
0 / 0 / 0
Регистрация: 29.10.2010
Сообщений: 93
29.11.2010, 14:30  [ТС]
Итак, полное решение:

AutoVerbMenu=False, Locked=True - блокирует вызов контекстного меню

в модуль формы пишем:
Visual Basic
1
2
3
4
5
Private Sub RichTextBox1_KeyPress(KeyAscii As Integer)
    If KeyAscii = 3 Then
        Clipboard.Clear
    End If
End Sub
- и вуаля! текст не скопируешь!
Всем спасибо.
0
Messir
30.11.2010, 00:37
Скопируешь при желании...
0 / 0 / 3
Регистрация: 28.01.2010
Сообщений: 279
30.11.2010, 09:53
Еще учти сочетание Shift+Ins оно тоже что Ctrl+C, его тоже заблокируй.
0
Messir
30.11.2010, 13:42
А еще сообщения никто не отменял...
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,748
30.11.2010, 18:23
не Shift+Ins, а Ctrl+Ins
0
3 / 3 / 0
Регистрация: 12.07.2010
Сообщений: 128
05.12.2010, 23:20
Если мне память не изменяет Ctrl+C не догма.
Пользователь может настроить функцию копирования на другое сочетание...
0
render
06.12.2010, 09:42
User'у никто не помешает изменить сочетание клавиш для копирования в буфер обмена поэтому я бы решал проблему так:

1. При открытии формы - создавать тред.
2. В треде выпонять проверку:
if ClipBoard.GetFormat(vbCFText)=True then
if ClipBoard.GetText() = txtRichEdit.Text then ClipBoard.Clear
end if
Messir
06.12.2010, 09:46
А я бы - сабклассингом...
0 / 0 / 0
Регистрация: 29.10.2010
Сообщений: 93
06.12.2010, 10:01  [ТС]
А можно пояснить, что такое 'тред'?
0
3 / 3 / 0
Регистрация: 12.07.2010
Сообщений: 128
06.12.2010, 11:31
1 - сабклассингом:
от контекстного меню спасает сразу: блокируем обработку WM_COPY
по принципу http://relib.com/forums/topic.asp?id=837670, так как
меню просто посылает RichTextBox'у это сообщение. Спасает также от
SendMessge. Но Ctrl+Ins этот метод не блокирует, т.к. в этом случае
WM_COPY не посылается.
Здесь можно обрабатывать и сообщения клавиатулы, но как уже
отмечалось, они могут быть разные. Надо хотя бы узнать в run-time
текущие настройки и подавлять именно текущие сочетания.

2 - с помощью 'трейда':
приведенный пример имеет один недостаток - можно копировать текст по
частям и тут никакие сравнения с содержимым RichTextBox не помогут.
Как вариант можно очищать Clipboard независимо от содержимого (ну, если текст). А вообще, и трейд-то наверное не нужен. Можно просто Timer.
Однако, лично мое мнение, тупое ClipBoard.Clear - противоречит духу
программирования в многозадачное среде, хотя если очень нужно, то...
С уважением.
0
3 / 3 / 0
Регистрация: 12.07.2010
Сообщений: 128
06.12.2010, 11:42
Небольшое дополнение к методу с 'сабклассингом'. Раз мы должны
защищать наш RichTextBox от копирования, полагаю и вводить туда
с клавиатуры ничего не нужно, т.е. RichTextBox используется для
отображения текста. Если так, то наверное можно блокровать не
Ctrl+Ins, А ВСЕ СООБЩЕНИЯ ОТ КЛАВИАТУРЫ !!! Уж это-то наверно
сработает.
0
3 / 3 / 0
Регистрация: 12.07.2010
Сообщений: 128
06.12.2010, 11:49
Ну насчет ВСЕ СООБЩЕНИЯ ОТ КЛАВИАТУРЫ я немножко погорячился. Надо оставить хотябы клавиши навигации (минимум).

А есть еще один метод: не давать выделять текст, тогда и копировать
нечего будет.
0
3 / 3 / 0
Регистрация: 12.07.2010
Сообщений: 128
06.12.2010, 12:08
Вопрос Messir'у:
Судя по Вашему игривому настроению Вы имеете ввиду что-то типа
GetWindowText, который, как я понимаю мимо наших ловушек проскочит.
Можно ли этому воспрепятствовать?
0
Messir
06.12.2010, 12:13
Можно, точно так же, как можно и обойти это припятствие при известном желании... Например, можно перехватить также WM_GETTEXT и ему подобные, специфические для RTB вызовы. Еще неплохо бы определять, от кого пришло сообщение и фильтровать сообщения извне (но это сложнее...)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.12.2010, 12:13
Помогаю со студенческими работами здесь

Копирование текста в буфер обмена
Подскажите код с помощью которого можно будет скопировать текст в буфер обмена в Android на языке c#.

Копирование текста в буфер обмена в Windows XP
Здравствуйте. Насколько я понял, в WinXP копирование в буфер посредством ВАТ-файла возможно лишь после установки дополнительных утилит...

Копирование\вставка текста в\из буфер обмена DOS??? (На Ассемблере)
Прошу помощи!!! Вопрос таков: нужно поместить текстовую строку в буфер обмена DOS, а затем извлечь её же???

Автоматическое копирование текста в буфер обмена, или другое место
Хочу сделать кое-какую программу, если нажата клавиша (Например ctrl) то программа автоматически скопирует весь текст с какого-нибудь...

Копирование строк текста в буфер обмена с последующим смещением на строку
Во общем дела таковы, есть текст на 30 строк из которого нужно копировать значения в буфер обмена для дальнейшего загона текста по своим...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru