Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2011, 16:42   #1
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию Из Clipboard пропадает(для RichEdit) текст

Если честно я не совсем уверен, что он туда попадает, но вроде как должен.

Дано:
На форме компонент TRichEdit и есть массив TStringList. Есть кнопка и есть глобальная переменая Position которая определяет номер элемента массива.

Это работает следующим образом:
Юзер пишет в TRichEdit свои мысли. Надоело ему... Жмёт кнопку.
- сохранение TRichEdit в массив как элемент с номером Position.
- Очищаем РичЕдит.
- Position + 1
- Загружаем в РичЕдит данные из массива по новому номеру.
Юзер снова пишет свои мысли и т.д.

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

Проблема:
Если выделить в РичЕдите текст, нажать Ctrl+C и перейти к редактированию другого элемента массива, то вставить в РичЕдит уже не удаётся.
В случае Ctrl+X всё работает как надо.

Этот текст можно вставить кудаугодно, но только не в РичЕдит.

Какие соображения?

Вообщем запутано как-то получилось.
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 15.05.2011, 16:45   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

У RichEdit есть такие методы:
Код:
Derived from TCustomEdit
CopyToClipboard
CutToClipboard
PasteFromClipboard
Человек_Борща вне форума Ответить с цитированием
Старый 15.05.2011, 17:01   #3
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Так дело в том что как раз PasteFromClipboard не отрабатывает.

Но если редактировать текст в пределах одного текста то все работает, при этом даже если перейти к другому тексту, то уже можно вставлять
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 15.05.2011, 17:16   #4
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Ну вот я из своей программы сделал тестовый пример чтоб показать как это всё происходит.

Проделайте следующии манипуляции:
1. Запустить программу.
2. Выделить в RichEdit часть слова "Заготовка" и нажмите Ctrl+C.
3. Нажмите в "Лист операций" операцию "Технический контроль".
4. Теперь попытайтесь вставить в RichEdit. Ничего не получилось.
5. Попытайтесь теперь вставить в Edit который выше. Получается.
6. Аналогично можно встатвить куда угодно. Но только не в тот РичЕдит.

Интересный момент:
1. Запустить программу.
2. Выделить в RichEdit часть слова "Заготовка" и нажмите Ctrl+C. Теперь в томже RichEdite нажмите Ctrl+V. Работает.
3. Нажмите в "Лист операций" операцию "Технический контроль".
4. Теперь попытайтесь вставить в RichEdit. Работает.

PS: программа использует ГОСТовские шрифты. Если что, установите.
Вложения
Тип файла: rar Project1.rar (693.2 Кб, 9 просмотров)
Сливочное масло Valio - компиляция как по маслу

Последний раз редактировалось Valio; 15.05.2011 в 17:20.
Valio вне форума Ответить с цитированием
Старый 15.05.2011, 17:48   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Оно вставлет, но вставлят пустую строку. (Там реализация через SendMessage)
В любое другое приложение виндов вставляется норм.

Чтобы исправить сделайте свою реализацию ctrl+x,ctrl+c,ctrl+v

Попробуйте, обьект Clipboard (Модуль Clipbrd);

Обьявление в var не нужно. посто
Код:
Clipboard.Open;
Clipboard.AsText:=aStr; //помещаем в буфер строку как текст
ClipBoard.Close;

Последний раз редактировалось Человек_Борща; 15.05.2011 в 17:51.
Человек_Борща вне форума Ответить с цитированием
Старый 15.05.2011, 19:34   #6
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Это реализовать то не проблема, хотелось бы узнать причину, чтоб с ней бороться целенаправленно. Бороться с следствием не очень грамотно.

Пока реализовано так, а дальше посмотрим.

Код:
// Обрабатываем Ctrl+V
Begin
If ((Key = ord('V')) And (ssCtrl In Shift)) Then
  Begin
    If Not Clipboard.HasFormat(CF_TEXT) Then ClipBoard.Clear;
    REProcess.SelText := ClipBoard.AsText;
    Key := 0;
  End;
// End
End;
Сливочное масло Valio - компиляция как по маслу

Последний раз редактировалось Valio; 15.05.2011 в 19:42.
Valio вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Clipboard - не отдаёт текст при неактивной форме web surfer Общие вопросы Delphi 1 21.12.2009 19:46
Clipboard [Qj] Общие вопросы .NET 1 21.08.2009 18:50
Как узнать был ли вставлен текст из ClipBoard? Dux Общие вопросы Delphi 11 25.10.2008 18:03