Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 674

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Помогите пожалуйста. Я пытаюсь скопировать текст из memo в буфер (нажатием кнопки). Все вроде получается, текст там есть, но при повторном нажатии на кнопку программа вылетает.

Приложение:
  1.  


Андрей Николаевич Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Андрей Николаевич (статус: Посетитель)
Вопрос отправлен: 23 апреля 2009, 11:30
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 16; последнее сообщение — 24 апреля 2009, 07:57; участников в обсуждении: 5.
Вадим К

Вадим К (статус: Академик), 23 апреля 2009, 11:34 [#1]:

Странно, с чего бы ей вылетать. Точно вылетает здесь?
А случайно хуков на буфер обмена никаких не установленно? Ну к примеру Abbyy Lingvo, punto switcher (о, как им можно пользоваться?) или какого то хитрого фаервола-антивируса?
Галочка "подтверждения прочтения" - вселенское зло.
Андрей Николаевич

Андрей Николаевич (статус: Посетитель), 23 апреля 2009, 11:56 [#2]:

нет Abbyy Lingvo, punto switcher. Стоит только каспер
Вадим К

Вадим К (статус: Академик), 23 апреля 2009, 11:59 [#3]:

попробовать отключить каспера. если бага будет повторяться, будем фантазировать дальше.
(следует помнит, что современные антивирусы "очень умные" и после обычного "отключения" не всегда отключаются полностью)
Галочка "подтверждения прочтения" - вселенское зло.
Андрей Николаевич

Андрей Николаевич (статус: Посетитель), 23 апреля 2009, 12:07 [#4]:

Попробовал - все по старому.
Вадим К

Вадим К (статус: Академик), 23 апреля 2009, 12:44 [#5]:

ок, подойдём с другой стороны. На самом деле Memo умеет копировать в буфер обмена самостоятельно. Попробуйте так
Memo1.SelStart := 0;
Memo1.Sellength := length(memo1.text);
Memo1.CopyToClipboard;//этот метод копирует выделенный текст
Повториться ли ошибка?
Галочка "подтверждения прочтения" - вселенское зло.
Андрей Николаевич

Андрей Николаевич (статус: Посетитель), 23 апреля 2009, 13:35 [#6]:

Копирует и вылетает 3-4 раза нажав на кнопку. Я мож чет не понимаю, но кипирую этим методом и без выделения тоже ....
min@y™

min@y™ (статус: Доктор наук), 23 апреля 2009, 13:46 [#7]:

Вылетает - это как? Прога просто закрывается или выдаётся ошибка?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Андрей Николаевич

Андрей Николаевич (статус: Посетитель), 23 апреля 2009, 13:50 [#8]:

Просто закрывается. Ошибка не выводится
Вадим К

Вадим К (статус: Академик), 23 апреля 2009, 14:05 [#9]:

Очень странно. Похоже на то, что либо есть ещё код, о котором Вы умалчиваете, либо прибивает стороння программа.
Итак, пути к наступлению.
проверяем кто виноват, вместо строки
Clipboard.asText:=Memo2.Text
пишем
Clipboard.asText:='some text';
и жмем кнопку.
опыт номер два
заменяем кодом
 Try
    Clipboard.asText:=Memo2.Text 
  Except
    on E : Exception do
      ShowMessage(E.ClassName+' ошибка с сообщением : '+E.Message);
  end;
Если выдаст ошибку - копируем сюда.
Галочка "подтверждения прочтения" - вселенское зло.
POWER

POWER (статус: Посетитель), 23 апреля 2009, 14:21 [#10]:

У меня бывала похожая картина. Я просто прикаждой нажатии сперва очищаю буфер и все.
Андрей Николаевич

Андрей Николаевич (статус: Посетитель), 23 апреля 2009, 15:03 [#11]:

Буфер очищать пробовал, и два варианта попробовал - все по старому.
Вот весь код (Простите за стиль написания)

Procedure TForm1.Button1click(Sender: TObject);
var
temp: string;
begin
if Memo1.text <> '' then
begin
temp:=Memo1.Text;
end;
Memo2.text:=temp;
end;

Procedure TForm1.Button2click(Sender: TObject);
begin
Clipboard.asText:=Memo2.Text
end;
end.
min@y™

min@y™ (статус: Доктор наук), 23 апреля 2009, 15:23 [#12]:

Странная реализация копирования текста из одного TMemo в другой.
Procedure TForm1.Button1click(Sender: TObject);
var
  temp: string;
begin
  if Memo1.text <> '' 
    then begin
               temp:=Memo1.Text;
            end;
 
   Memo2.text:=temp; // <--- Чему ревно temp при Memo1.text = ''?
end;
Может написать так:
Procedure TForm1.Button1click(Sender: TObject);
begin
  if Memo1.text <> ''
    then Memo2.Lines.Assign(Memo1.Lines);
end;
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Dron

Dron (статус: Студент), 23 апреля 2009, 15:45 [#13]:

У модуля Clipbrd есть глюки при работе с буфером - в частности, Open иногда может вызывать исключение. Рекомендую делать так:
Memo.SelectAll;
Memo.CopyToClipboard;
С уважением.
Андрей Николаевич

Андрей Николаевич (статус: Посетитель), 23 апреля 2009, 16:11 [#14]:

Да, копирование из мемо в мемо можно сделать и по другому ....
Попробовал:
Memo.SelectAll;
Memo.CopyToClipboard;

Результата нет
Dron

Dron (статус: Студент), 23 апреля 2009, 20:39 [#15]:

Если вам нужно передать текст из одного Memo в другое, использовать буфер - это крайнее извращение. Что касается ошибок - либо копируете очень часто, либо ещё что-то. Оберните хотя бы в try..except.
С уважением.
Андрей Николаевич

Андрей Николаевич (статус: Посетитель), 24 апреля 2009, 07:57 [#16]:

) Да передача из одного мемо в другой это вообще левак ... Вопрос был написан выше - из мемо в буфер=вылет программы.
Прошу прощения у всех, проблема решилась. На другом ПК попробовал и там все отлично работает....

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 12:03
Выполнено за 0.03 сек.