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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2008, 14:22   #11
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Всегда очень уважительно отношусь к вашим высказываниям (чувствуется глубокое знание предмета). Но в данном случае, возможно, либо я вас не понял, либо (что этому и поспособствовало) вы слишком сильно завуалировали тему...
При чем тут "TEdit или TMemo, скажем"? Решительно - не понимаю ход ваших мыслей... Увы...
Спасибо, mihali4. Я имел в виду следующее. Edit-контролы Windows поддерживают "внутри себя" флаг, получив который (через сообщения, которые я привел) можно узнать о наличии изменений в тексте. Поддерживать свою переменную для этого несколько затруднительно потому, что придется учесть все возможные пути, которыми меняется текст - и через клавиатуру, и через Clipboard, и через прямое присвоение, и т.п. Насколько я помню TEdit и TMemo напрямую наследуются от стандартного элемента управления (оконного класса EDIT в Windows), поэтому они не могут не поддерживать этот флаг, единственное, что я не могу сейчас уточнить, есть ли у них свойство (или процедура, что менее вероятно), дающее доступ к этому флагу. В любом случае должно работать примерно следующее:
Код:
bChanged := SendMessage(Memo1.Handle, EM_GETMODIFY, 0, 0);
---------------------
Да, ещё об этом: "При чем тут "TEdit или TMemo, скажем"?".
Патрон выше обмолвился о Memo, кроме того я и обозначил именно их вторым пунктом.

Последний раз редактировалось B_N; 24.03.2008 в 14:25.
B_N вне форума Ответить с цитированием
Старый 24.03.2008, 14:35   #12
Патрон
Форумчанин
 
Аватар для Патрон
 
Регистрация: 07.03.2008
Сообщений: 151
По умолчанию

Я конечно не против общения. Но я просто хочу узнать куда прописать следующий параметр:
Код:
var   
Change: boolean = false;     
Change:=true;
Очень хочется узнать это загадочное место в UNIT'е.

Заранее спасибо.
Патрон вне форума Ответить с цитированием
Старый 24.03.2008, 14:36   #13
Патрон
Форумчанин
 
Аватар для Патрон
 
Регистрация: 07.03.2008
Сообщений: 151
По умолчанию

_Dmitry, спасибо что откликнулся.
Патрон вне форума Ответить с цитированием
Старый 24.03.2008, 14:46   #14
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Патрон Посмотреть сообщение
Я конечно не против общения. Но я просто хочу узнать куда прописать следующий параметр:
Код:
var   
Change: boolean = false;     
Change:=true;
Очень хочется узнать это загадочное место в UNIT'е.

Заранее спасибо.
Патрон, во-первых, mihali4 показал Вам на "прямо перед implementation", я написал - лучшее место для такой переменной - класс формы, в которой "расположен" Ваш документ. Во-вторых, Вам придется менять эту переменную в нескольких местах. В-третьих, я предложил вариант с SendMessage. И, в-четвёртых, если Вы покажете свой код, можно будет легко указать это место.
B_N вне форума Ответить с цитированием
Старый 24.03.2008, 15:41   #15
Патрон
Форумчанин
 
Аватар для Патрон
 
Регистрация: 07.03.2008
Сообщений: 151
По умолчанию

Цитата:
Сообщение от B_N Посмотреть сообщение
Патрон, во-первых, mihali4 показал Вам на "прямо перед implementation", я написал - лучшее место для такой переменной - класс формы, в которой "расположен" Ваш документ. Во-вторых, Вам придется менять эту переменную в нескольких местах. В-третьих, я предложил вариант с SendMessage. И, в-четвёртых, если Вы покажете свой код, можно будет легко указать это место.
Этот код:
Код:
bChanged := SendMessage(Memo1.Handle, EM_GETMODIFY, 0, 0);
не хочет работать. Не знаю почему
B_N, вот Вы можете объяснить все попорядку мне???
Просто все что мне сегодня сказали несомненно был некий смысл. Но смысл был озвучан на уровне продвинутых программеров. А насчет кодов.. Коды я думаю были озвучаны так сказать в разорванном виде, и именно поэтому я ничего не смог понять к сожалению
Патрон вне форума Ответить с цитированием
Старый 24.03.2008, 16:41   #16
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Патрон Посмотреть сообщение
Этот код:
Код:
bChanged := SendMessage(Memo1.Handle, EM_GETMODIFY, 0, 0);
не хочет работать. Не знаю почему
B_N, вот Вы можете объяснить все попорядку мне???
Просто все что мне сегодня сказали несомненно был некий смысл. Но смысл был озвучан на уровне продвинутых программеров. А насчет кодов.. Коды я думаю были озвучаны так сказать в разорванном виде, и именно поэтому я ничего не смог понять к сожалению
Ну вот смотрите.

Вариант 1. В работаете с TMemo, TEdit и т.п. - с любым TCustomEdit.
У них у всех есть свойство Modified. Это как раз аналог того флажка, про который я писал выше.
Так сказать "низким уровнем" к нему можно получить доступ скажем так:
Код:
bChanged := (SendMessage(Memo1.Handle, EM_GETMODIFY, 0, 0) <> 0);
Просто я забыл, что паскаль присваивает целые числа переменным boolean только с Extended Syntax. Кажется так, если правильно помню.
Таким образом, Вы можете просто проверять при закрытии формы Modified у нужного компонента и если оно true, то просить записать файл.
Код:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
    if Memo1.Modified then begin
        // предложить записать
        // ...................
        // Если сохранение закончилось неудачей, значит CanClose := false;
    end;
end;
А если сохраняете файл по ходу работы, значит после записи просто присваиваете Memo1.Modified := false;

Вариант 2. Ваш документ не имеет ничего общего с TCustomEdit. Тогда просто добавляете переменную к классу формы. Пусть так, для начала.
Код:
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Label1: TLabel;
    Button2: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);

    DocumentModified : boolean;
  private
    { Private declarations }
  public
    { Public declarations }
  end;
Видите "DocumentModified : boolean;"?
И можете работать с ним как с обычным членом формы. Но тогда нужно будет внимательно следить за всеми изменениями,
которые происходят с документом и соответственно менять эту переменную.
B_N вне форума Ответить с цитированием
Старый 24.03.2008, 16:45   #17
Патрон
Форумчанин
 
Аватар для Патрон
 
Регистрация: 07.03.2008
Сообщений: 151
По умолчанию

B_N я сделал все сам только по другой функции. спасибо
Патрон вне форума Ответить с цитированием
Старый 24.03.2008, 16:48   #18
Патрон
Форумчанин
 
Аватар для Патрон
 
Регистрация: 07.03.2008
Сообщений: 151
По умолчанию

Функция такая:
Код:
procedure TForm1.N8Click(Sender: TObject);
var
str:String;
i:Integer;
begin
if (ParamCount > 0) then
begin
Str:=ParamStr(1);
for i:=2 to ParamCount do
begin
Str:=Str+' '+ParamStr(1);
end;
Memo1.Lines.SaveToFile(Str);
  Memo1.Modified := False;
  SetModified(False);
end else N9.Click;
end;
Патрон вне форума Ответить с цитированием
Старый 24.03.2008, 16:55   #19
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

По какой же другой?
Код:
Memo1.Modified := False;
Оно и есть. А "SetModified(False);" Этот кажется как раз "внутренности" свойства Modified и есть. Она второй раз и не нужна.
B_N вне форума Ответить с цитированием
Старый 14.12.2008, 14:17   #20
Andrei Isaev
Дельфист
Пользователь
 
Аватар для Andrei Isaev
 
Регистрация: 18.11.2008
Сообщений: 19
По умолчанию

Вот простое решение : в обработчике события OnCloseQuery напиши :
CanClose := MessageDlg('Вы уверены?', mtConfirmation, [mbyes, mnNo],0);
И всё!
Andrei Isaev вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сохранение 1234 Общие вопросы Delphi 11 30.08.2008 11:47
TClientSocket - сохранение JRcoker Общие вопросы Delphi 4 03.08.2008 00:37
Сохранение страницы Патрон PHP 3 28.03.2008 00:00
Сохранение Lonix Общие вопросы Delphi 1 22.04.2007 00:15
Сохранение в TXT фйл M@rsel Общие вопросы Delphi 6 22.12.2006 16:12