Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/17: Рейтинг темы: голосов - 17, средняя оценка - 4.88
apocalypce
8 / 8 / 0
Регистрация: 08.08.2009
Сообщений: 47
1

Сохранить в файл текст того Memo, что был в фокусе

03.09.2009, 13:05. Просмотров 3136. Ответов 10
Метки нет (Все метки)

Здравствуйте есть вопрос: на форме имееться 2 компонента скажем memo. Как сделать чтобы при нажатии на кнопку сохранить как (или открыть) сохранялся тот документ, где установлен курсор мыши, а если курсора не в memo1 не в memo 2 не стоит значит вылетало сообщение!

спасибо
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.09.2009, 13:05
Ответы с готовыми решениями:

Сохранить текст из memo в текстовый файл
Мне нужна текст каторий есть в мемо сохранить в txt файле. Как ето зделать:?

Сохранить текст в файл, что бы не было AV
Приветствую. Ситуация несколько не стандартная. Например, в стринглист...

Как сохранить текст из memo в кодировке UTF-8?
Приветствую! Нужна Ваша помощь. Мне надо сохранить текст из memo1 в кодировке...

Сохранить файл из memo
Как сохранить текст из поля Memo в файл, используя системный диалог SaveDialog

Сохранить из Memo по 20 строк в каждый файл
здравствуйте! подскажите пожалуйста, есть memo в нем какое-то количество...

10
schdub
Эксперт С++
3037 / 1379 / 421
Регистрация: 19.01.2009
Сообщений: 3,681
Завершенные тесты: 1
03.09.2009, 13:26 2
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.SaveAsClick(Sender: TObject);
begin
  if (Memo1.Focused) or (Memo2.Focused) then
  begin
    if SaveDialog1.Execute then
    begin
      if Memo1.Focused then
        Memo1.Lines.SaveToFile(SaveDialog1.FileName)
      else
        Memo2.Lines.SaveToFile(SaveDialog1.FileName);
    end;
  end
  else
    ShowMessage('Ни один Memo не имеет фокуса ввода!');
end;
Добавлено через 3 минуты
А да, этот метод будет работать, только если "Сохранить как" - это пункт меню. Если данную процедуру Вы запихнете в обработчик клика кнопки, то он всегда будет говорить Вам, что 'Ни один Memo не имеет фокуса ввода!'. Дело в том, что если вы нажимаете на кнопку, то фокус ввода перемещается с предыдущего контрола, на кнопку, на которую Вы нажали.
0
Puporev
Модератор
54586 / 42092 / 29061
Регистрация: 18.05.2008
Сообщений: 99,290
03.09.2009, 13:34 3
Если данную процедуру Вы запихнете в обработчик клика кнопки, то он всегда будет говорить Вам, что 'Ни один Memo не имеет фокуса "
Точно и поэтому номер с кнопкой или другим компонентом не пройдет. Можно попробовать сделать это по нажатию клавиши.
0
apocalypce
8 / 8 / 0
Регистрация: 08.08.2009
Сообщений: 47
03.09.2009, 13:42  [ТС] 4
насколько я понял такое сделать не реально???polivets спасибо за код конечно, но т.к. если такое сделать будет нельзя ,то я думаю следует отказаться от данной затеи! (((((

Добавлено через 2 минуты
хотел бросить на форму скажем панель с кнопками и чтобы прога управлялась с этой панели скажем открыть сохранить удалить и т.д.
0
schdub
Эксперт С++
3037 / 1379 / 421
Регистрация: 19.01.2009
Сообщений: 3,681
Завершенные тесты: 1
03.09.2009, 13:50 5
Тогда сделай несколко сложнее. Через обработчики OnEnter и OnExit.
Кодю пример.
0
Puporev
Модератор
54586 / 42092 / 29061
Регистрация: 18.05.2008
Сообщений: 99,290
03.09.2009, 13:53 6
но т.к. если такое сделать будет нельзя ,то я думаю следует отказаться от данной затеи! (((((
Курсор мыши не может сразу оказаться в двух местах и в Мемо и на кнопке.А вот оставить курсор в Мемо, а обработав нажатие клавиши это можно сделать.
0
apocalypce
8 / 8 / 0
Регистрация: 08.08.2009
Сообщений: 47
03.09.2009, 13:57  [ТС] 7
Цитата Сообщение от Puporev Посмотреть сообщение
но т.к. если такое сделать будет нельзя ,то я думаю следует отказаться от данной затеи! (((((
Курсор мыши не может сразу оказаться в двух местах и в Мемо и на кнопке.А вот оставить курсор в Мемо, а обработав нажатие клавиши это можно сделать.
как если не секрет!?
0
schdub
Эксперт С++
3037 / 1379 / 421
Регистрация: 19.01.2009
Сообщений: 3,681
Завершенные тесты: 1
03.09.2009, 14:06 8
Суть метода: в глобальной переменной SaveIdx сохраняется id Memo, который последний имел фокус ввода. Я поступил очень просто. Если Первый мемо получает фокус ввода, то в переменную применяем значение 1. Если второй, то соответсвенно - 2. Если мемо1 теряет фокус ввода, то в его обработчике проверяем, какой контрол получил фокус ввода после этого мемо. Если енто кнопка, которая вызывает процедуру сохранения, то с нашей переменной, хранящей id memo ничего не делаем, иначе просто обнуляем ее значение. Приблизительно так же поступаем при потери фокуса ввода второго мемо. Отмечу, что если добавить несколько Активных кнопок, то просто нужно будет добавить проверку на получение фокуса ввода для данных кнопок после мемо.


Как вариант глобальную переменную SaveIdx можно заменить на экземпляр класса TMemo обозвав его, например, SelectedMemo (конечно, нужно будет внести некоторые изменеия в бизнес-логику обработчиков). Тогда несколько упроститься код.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
var   SaveIdx : integer; {глобальная переменная}
 
...
 
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  if SaveIdx>0 then
  begin
    if SaveDialog1.Execute then
    begin
      if SaveIdx=1 then
        Memo1.Lines.SaveToFile(SaveDialog1.FileName)
      else
        Memo2.Lines.SaveToFile(SaveDialog1.FileName);
    end;
  end
  else
    ShowMessage('Ни один Memo не имеет фокуса ввода!');
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  SaveIdx := 0;
end;
 
procedure TForm1.Memo1Enter(Sender: TObject);
begin
  SaveIdx := 1;
end;
 
procedure TForm1.Memo1Exit(Sender: TObject);
begin
  if not Button1.Focused then SaveIdx := 0;
end;
 
procedure TForm1.Memo2Enter(Sender: TObject);
begin
  SaveIdx := 2;
end;
 
procedure TForm1.Memo2Exit(Sender: TObject);
begin
  if not Button1.Focused then SaveIdx := 0;
end;
Конечно изврат так программировать, но если надо...
0
АНК
124 / 115 / 17
Регистрация: 27.02.2007
Сообщений: 291
03.09.2009, 15:57 9
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

polivets, позвольте мне несколько подправить Ваш код
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
var   MemoCurr : TMemo; {глобальная переменная, или переменная класса}
 
...
 
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  if MemoCurr <> nil then begin
    if SaveDialog1.Execute then begin
        MemoCurr.Lines.SaveToFile(SaveDialog1.FileName)
    end;
  end else
    ShowMessage('Ни один Memo не имеет фокуса ввода!');
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  MemoCurr := nil;
end;
 
procedure TForm1.MemoEnter(Sender: TObject);
begin
  MemoCurr := Sender as TMemo;
end;
 
procedure TForm1.MemoExit(Sender: TObject);
begin
  if not Button1.Focused then MemoCurr := nil;
end;
Мне кажется, что так будет поприятнее
0
schdub
Эксперт С++
3037 / 1379 / 421
Регистрация: 19.01.2009
Сообщений: 3,681
Завершенные тесты: 1
03.09.2009, 16:46 10
Цитата Сообщение от АНК Посмотреть сообщение
Мне кажется, что так будет поприятнее
Я с Вами согласен. Кстати, если вы внимательнее прочтете мой предыдущий пост, то увидете, что именно это я и предлагал (в конце). Но, судя по всему, автору уже не нужно.
0
apocalypce
8 / 8 / 0
Регистрация: 08.08.2009
Сообщений: 47
03.09.2009, 23:06  [ТС] 11
да нет нужно спасибо завтра проверю!просто изначально сказали что такое не может быть поэтому и решил раз не возможно такое реализовать, следовательно нужно искать пути обхода !завтра посмотрю и отпишу!)))
0
03.09.2009, 23:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.09.2009, 23:06

Сохранить содержимое Memo через SaveDialog в текстовый файл
как сохранить содержание memo через savedialog в текстовый файл *.txt

Ряд последовательных действий в зависимости от того, что считали с memo
Считываем из memo( или из текстового файла) построчно. и в зависимости от...

Как сохранить в текстовый файл строки со второй по последнюю из memo?
Как сохранить в текстовый файл строки со второй по последнюю из memo? т.е. все,...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru