Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Аналог блокнота   Найти похожие ветки 

 
Human ©   (2010-02-21 15:01) [0]

Здравствуйте уважаемые мастера Delphi. Подскажите пожалуйста. Пытаясь написать аналог болокнота Windows, столкнулся с такой проблемой: прописываю пункт меню файл(создать,открыть,сохранить...).Каким образом можно сравнить уже открытый файл в поле Memo1 и тот текст который нужно сохранить? Открываю файлы из OpenDialog.


 
KilkennyCat ©   (2010-02-21 15:03) [1]

при любом изменении выставлять флаг ЕнтотФайлБылИзменен, в дальнейшем проверять.


 
Loginov Dmitry ©   (2010-02-21 15:05) [2]


>  Пытаясь написать аналог болокнота Windows, столкнулся
> с такой проблемой


Можно вопрос, зачем писать свои аналоги болокнота Windows?


> Каким образом можно сравнить уже открытый файл в поле Memo1
> и тот текст который нужно сохранить?


Для сравнения в Pascal используется операция "="


 
Human ©   (2010-02-21 15:08) [3]

А возможно ли сопоставить текст в Memo и открытый файл через память?


 
Human ©   (2010-02-21 15:10) [4]

Я хочу написать свой текстовый редактор, а блокнот беру за образец.


 
{RASkov} ©   (2010-02-21 15:11) [5]

> [0] Human ©   (21.02.10 15:01)
> Каким образом можно сравнить уже открытый файл в поле Memo1
> и тот текст который нужно сохранить?

А разве это не одно и тоже? Зачем это сравнивать?
или нужно сравнить текст в файле на диске с текстом в мемо?


 
Human ©   (2010-02-21 15:17) [6]

Да именно сравнить текст в Memo с файлом на диске. А еще лучше узнать программно, что находится в Memo.


 
Anatoly Podgoretsky ©   (2010-02-21 15:19) [7]

> Loginov Dmitry  (21.02.2010 15:05:02)  [2]

Плох тот программист, который не хочет написать свой блокнот.


 
KilkennyCat ©   (2010-02-21 15:30) [8]


> А еще лучше узнать программно, что находится в Memo.

да ладно, программно ненадежно, лучше аппаратно - через сканирование сканером, или на крайний случай - фотоаппаратом.

Memo.text


 
Юрий Зотов ©   (2010-02-21 15:45) [9]

> Human ©   (21.02.10 15:01)  

1. В обработчике события Memo.OnChange пишете Memo.Modified := True;
2. После создания, открытия и сохранения документа пишете  Memo.Modified := False;

Теперь в любом месте программы можно проверить свойство Memo.Modified. Если оно равно False, то текст не изменялся.


 
Human ©   (2010-02-21 15:47) [10]

Ну а если без смеха, только что пришло в голову решение: обьявить глобальную переменную типа Strings, после открытия файла присвоить ей текст из Memo, а перед сохранением сравнить = текст из Memo и содержание этой переменной. Думал что вы мне подскажете похожее решение(((


 
Human ©   (2010-02-21 15:53) [11]

Юрий, спасибо за подсказку. А можно ли сравнить через свойство FileName компонентов OpenDialog, SaveDialog?


 
{RASkov} ©   (2010-02-21 15:57) [12]

> [10] Human ©   (21.02.10 15:47)

Для чего вообще это сравнение?
Неужели не достаточно свойства Modified? ...о котором ЮЗ говорил
только в OnChange не нужно ничего писать, оно само в true выставится при реджактировании в мемо, а вот в False нужно будет выставлять как им(ЮЗ) сказано во 2м пункте...


 
{RASkov} ©   (2010-02-21 15:58) [13]

> [11] Human ©   (21.02.10 15:53)
> А можно ли сравнить через свойство FileName компонентов
> OpenDialog, SaveDialog

что хочешь сравнить? Все тот же текст? Нет, нельзя это сделать через данное свойство.


 
Loginov Dmitry ©   (2010-02-21 16:02) [14]


> только что пришло в голову решение: обьявить глобальную
> переменную типа Strings, после открытия файла присвоить
> ей текст из Memo, а перед сохранением сравнить = текст из
> Memo и содержание этой переменной.


А это время какой-нибудь Вася взял да и открыл этот же файл обычным блокнотом и внес изменения :)


 
Human ©   (2010-02-21 16:03) [15]

Спасибо! Сейчас попробую.


 
Human ©   (2010-02-21 16:08) [16]

А про Васю я чёт не подумал))


 
Human ©   (2010-02-21 16:11) [17]

Подскажите пожалуйста, где есть исходники блокнота, только не сильно навёрнутого?


 
@!!ex ©   (2010-02-21 16:23) [18]

Ты объясни что тебе нужно. Какую задачу решаешь??


 
Anatoly Podgoretsky ©   (2010-02-21 16:31) [19]

> Human  (21.02.2010 16:11:17)  [17]

В Демос


 
Human ©   (2010-02-21 17:21) [20]

@!!ex, я решаю такую задачу: в блокноте для кнопки сохранить есть два варианта - или она сохраняет в уже открытый файл, или сохранённый ранее. Как дать понять программе куда сохранять внесённые изменения?


 
Palladin ©   (2010-02-21 17:57) [21]

Запомнить имя файла.


 
Loginov Dmitry ©   (2010-02-21 18:11) [22]


> открытый файл, или сохранённый ранее


"открытый файл" - он и есть "сохраненный ранее".
В общем не до конца ясно, что именно должна делать эта кнопка.


 
@!!ex ©   (2010-02-21 18:13) [23]

> [20] Human ©   (21.02.10 17:21)

Открыть:
FFileName = OpenDialog.FileName;

Сохраненить:
SaveToFile(FFileName);

Сохранить как:
FFileName = SaveDialog.FileName;
SaveToFile(FFileName);


 
Human ©   (2010-02-21 18:49) [24]

Спасибо. Подскажите пожалуйста, я пишу обработчик для кнопки открыть, происходит следующее: открываю текст, вношу изменения, опять открываю, если на вопрос сохранить или нет отвечаю нет, этот же вопрос выскакивает еще раз. Подскажите, в чем ошибка? Здесь код:
procedure TForm1.N4Click(Sender: TObject);
begin
 if Memo1.Modified = true then
 begin
 MessageBeep(Mb_Iconexclamation);
 if MessageDlg("Текст в файле Новый был изменён. Сохранить изменения?",
 mtWarning, [mbOk,mbCancel,mbNo],0)= mrCancel then
 exit else
 if MessageDlg("Текст в файле Новый был изменён. Сохранить изменения?",
 mtWarning, [mbOk,mbCancel,mbNo],0)= mrNo then
 OpenDialog1.Filter := "Текстовые файлы (*.txt)|*.txt";
 if OpenDialog1.Execute and
 FileExists(OpenDialog1.FileName)
 then
 Memo1.Lines.LoadFromFile(OpenDialog1.FileName)else
 if MessageDlg("Текст в файле Новый был изменён. Сохранить изменения?",
 mtWarning, [mbOk,mbCancel,mbNo],0)= mrOk then
 SaveDialog1.Filter := "Текстовые файлы (*.txt)|*.txt";
 if SaveDialog1.Execute
 then
 Memo1.Lines.SaveToFile
 (SaveDialog1.FileName + ".txt")
 end else
 if Memo1.Modified = false then
 OpenDialog1.Filter := "Текстовые файлы (*.txt)|*.txt";
 if OpenDialog1.Execute and
 FileExists(OpenDialog1.FileName)
 then
 Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
 Memo1.Modified:= false;
end;


 
Anatoly Podgoretsky ©   (2010-02-21 18:51) [25]

> Human  (21.02.2010 17:21:20)  [20]

Тогда это почти непригодный редактор, надо еще уметь и создавать файл.


 
Human ©   (2010-02-21 18:58) [26]

Как именно?


 
Игорь Шевченко ©   (2010-02-21 19:46) [27]


> Подскажите, в чем ошибка?


В перекладывании своих проблем на других


> Здесь код:


Это не код, это порнография. Открой любой пример из Demos и посмотри форматирование


 
@!!ex ©   (2010-02-21 20:49) [28]

> [24] Human ©   (21.02.10 18:49)
> if MessageDlg("Текст в файле Новый был изменён. Сохранить
> изменения?",
> mtWarning, [mbOk,mbCancel,mbNo],0)= mrCancel then
> exit else
> if MessageDlg("Текст в файле Новый был изменён. Сохранить
> изменения?",

LOL.
Ты понимаешь что пишешь, или чужой код просто вставляешь без понимания???


 
Eraser ©   (2010-02-21 21:15) [29]

> [24] Human ©   (21.02.10 18:49)

установи Д2010, там жмешь ctrl+D и получаешь
procedure TForm1.N4Click(Sender: TObject);
begin
 if Memo1.Modified = true then
 begin
   MessageBeep(Mb_Iconexclamation);
   if MessageDlg("Текст в файле Новый был изменён. Сохранить изменения?", mtWarning, [mbOk, mbCancel, mbNo],
     0) = mrCancel then
     exit
   else if MessageDlg("Текст в файле Новый был изменён. Сохранить изменения?", mtWarning,
     [mbOk, mbCancel, mbNo], 0) = mrNo then
     OpenDialog1.Filter := "Текстовые файлы (*.txt)|*.txt";
   if OpenDialog1.Execute and FileExists(OpenDialog1.FileName) then
     Memo1.Lines.LoadFromFile(OpenDialog1.FileName)
   else if MessageDlg("Текст в файле Новый был изменён. Сохранить изменения?", mtWarning,
     [mbOk, mbCancel, mbNo], 0) = mrOk then
     SaveDialog1.Filter := "Текстовые файлы (*.txt)|*.txt";
   if SaveDialog1.Execute then
     Memo1.Lines.SaveToFile(SaveDialog1.FileName + ".txt")
 end
 else if Memo1.Modified = false then
   OpenDialog1.Filter := "Текстовые файлы (*.txt)|*.txt";
 if OpenDialog1.Execute and FileExists(OpenDialog1.FileName) then
   Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
 Memo1.Modified := false;
end;


 
{RASkov} ©   (2010-02-21 21:54) [30]

> [24] Human ©   (21.02.10 18:49)
> в чем ошибка? Здесь код:

При таком форматировании грех без ошибок писать...)


 
Human ©   (2010-02-21 23:17) [31]

Вы все говорите о форматировании, но ни кто не предложил не одного решения. За то время пока я сидел в форуме пытался, что то исправить, кое что начало получаться. А вы только кричите про порнографию и чужие проблемы. Лично я начинающий и поэтому пишу в форум для начинающих. Интересно, какие вопросы на форуме задаёте вы? Eraser, спасибо за подсказку про Д2010.


 
Игорь Шевченко ©   (2010-02-21 23:41) [32]


> но ни кто не предложил не одного решения


Никто не должен предлагать решения. Удивись.


> А вы только кричите про порнографию и чужие проблемы


Это действительно твои проблемы. А не нащи - разбираться в твоем неотформатированном коде.


 
@!!ex ©   (2010-02-21 23:51) [33]

> [31] Human ©   (21.02.10 23:17)

Отношение такое по очень простой причине:
Если прочитать хотя бы одну книжку по основам программирования - этих проблем просто не будет.


 
Плохиш ©   (2010-02-21 23:55) [34]


> Human ©   (21.02.10 23:17) [31]

Графу "Образование" в анкете исправь, а то смешно просто...


 
Eraser ©   (2010-02-22 00:09) [35]

> [31] Human ©   (21.02.10 23:17)


> но ни кто не предложил не одного решения.

решение одно - форматировать код вручную при написании, например по стандарту http://www.delphikingdom.com/asp/viewitem.asp?catalogid=802 . различные инструменты полезны только когда нужно править какие-нибудь сторонние горе-исходники вроде [24].


 
Human ©   (2010-02-22 00:12) [36]

Удалено модератором


 
{RASkov} ©   (2010-02-22 00:19) [37]

Удалено модератором


 
Human ©   (2010-02-22 00:19) [38]

Удалено модератором



Страницы: 1 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.046 c
2-1265698658
И. Павел
2010-02-09 09:57
2010.08.27
Вылетает окно "Система выполнила недопустимую операцию..."


6-1224492803
Поросенок Винни-Пух
2008-10-20 12:53
2010.08.27
gprs modem + sms


15-1270049066
Чайник
2010-03-31 19:24
2010.08.27
Сколько на самом деле человек вКонтакте?


15-1274808723
Lyonux
2010-05-25 21:32
2010.08.27
Работа сайта


15-1274352889
crazy~driver
2010-05-20 14:54
2010.08.27
Распечатать с dbgrid