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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2008, 06:06   #11
Andrei
Форумчанин
 
Регистрация: 20.06.2007
Сообщений: 270
По умолчанию

Цитата:
Сообщение от rainbow Посмотреть сообщение
bashkos Я уже догадался.
Только надо f:=TFileStream.Create(((SaveDialog1.FileName)+'.dat'),fmCreate);
писать, чтобы еще с расширением dat сохранялось, только теперь проблема, надо условие написать, если файл существует заменить его или нет, без него прорамма просто создает файл имя файла.dat.dat.
Так делать - не есть правильно. В SaveDialog есть свойство DefaultExt. Впишите в него dat и будет вам счастье .

Всем новым файлам по умолчанию будет присваиваться расширение .dat, если только вы не прописали расширение в строке ручками.

А код останется первоначальный:

f := TFileStream.Create (SaveDialog1.FileName, fmCreate);
-Кукушка, кукушка! Накукуй мне сто лет!
-А накукуй тебе столько?

(с) Библия. Вольный перевод с древнееврейского.
Andrei вне форума Ответить с цитированием
Старый 18.09.2008, 06:54   #12
rainbow
Форумчанин
 
Регистрация: 06.09.2008
Сообщений: 156
По умолчанию

eoln, сделал так, получилось нормально, только заголовок окна Confirm, его можно как нибудь заменить?
И еще почему то если сохранять файл под новым именем, все равно вылазит окно заменить файл или нет. И как сделать, чтобы если нажать в этом окне нет, снова вылазил SaveDialog. Я пробовал сделать через цикл, но не получается.
Andrei, спасибо за совет, действительно так проще.
Ужас, как я устал от тупизны...

Последний раз редактировалось rainbow; 18.09.2008 в 07:24.
rainbow вне форума Ответить с цитированием
Старый 18.09.2008, 17:08   #13
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Цитата:
получилось нормально, только заголовок окна Confirm, его можно как нибудь заменить?
У диалогового онка, как и у обычного есть соответствующее свойство. Их там в инспекторе всего 12. Повнимательней надо.
Код:
SaveDialog1.Title := 'Заголовок';
Цитата:
И еще почему то если сохранять файл под новым именем, все равно вылазит окно заменить файл или нет.
Код в студию
Цитата:
И как сделать, чтобы если нажать в этом окне нет, снова вылазил SaveDialog. Я пробовал сделать через цикл, но не получается.
Зачем цикл. Здесь не циклы, здесь Help нужен.
Код:
SaveDialog1.Options := SaveDialog1.Options + [ofOverwritePrompt];
Цитата:
Сообщение от Переведено в Google, но понять можно
ofReadOnly Выделяет Открыть как Read Only флажок, по умолчанию, когда Откроется диалоговое окно.
ofOverwritePrompt Генерирует предупреждающее сообщение, если пользователь пытается выбрать имя файла, которое уже используется, спрашивая ли перезаписать существующий файл. (С использованием спасти диалоги.)
ofHideReadOnly Удаляет Открыть как Read Only флажок из окна.
После ofNoChangeDir пользователь нажмет OK, сбрасывает текущую директорию на то, что имел в файл-диалог выбора открыты.
ofShowHelp Показывает кнопку Справка в диалоговом окне.

ofNoValidate Отключает проверка на недопустимые символы в имени файла. Позволяет выбора имен файлов с недопустимые символы.
ofAllowMultiSelect позволяет пользователям выбирать более чем один файл в диалоговом окне.
ofExtensionDifferent Этот флаг включен по крайней мере выполнения отдельных файла имеет расширение, которое отличается от DefaultExt. Если Вы используете этот флаг в применении, не забудьте переустановить его.
ofPathMustExist Генерирует сообщение об ошибке, если пользователь пытается выбрать файл с именем несуществующего путь к каталогу.

ofFileMustExist Генерирует сообщение об ошибке, если пользователь пытается выбрать несуществующий файл. (применяется только к открыто диалоги).
ofCreatePrompt Генерирует предупреждающее сообщение, если пользователь пытается выбрать несуществующий файл, задав ли создать новый файл с указанным именем.
ofShareAware игнорировать ошибки обмена и позволяет файлы, которые будут выбраны, даже если происходят нарушения обмена.
ofNoReadOnlyReturn Генерирует сообщение об ошибке, если пользователь пытается выбрать только для чтения файла.

ofNoTestFileCreate Отключает проверку для сетевой защиты файлов и недоступность дисководов. Применяется только тогда, когда пользователь пытается сохранить в файл создать-не-изменение общих сетевых каталогов.
ofNoNetworkButton Удаляет Сеть кнопку (которая открывает Карта сетевого диска диалог) из файла-диалог выбора. Применяется только в том случае, если ofOldStyleDialog флаг включен.
ofNoLongNames отображает 8,3 символам имен файлов только. Эта опция действует только если Параметры также включает ofOldStyleDialog.

ofOldStyleDialog Создает пожилых стиль файл-диалог выбора.
ofNoDereferenceLinks Отключает dereferencing из клавиш Windows. Если пользователь выбирает быстрый, присваивает FileName путь и имя файла ярлык сама (. LNK-файл), а не файл связан с ярлык.
ofEnableIncludeNotify (Windows 2000 и более поздних.) Передает CDN_INCLUDEITEM уведомления сообщений в диалоговом окне, когда пользователь открывает папку. Уведомление направляется по каждому пункту в недавно открытых папок. Вы можете использовать эти сообщения для контроля элементов, которые появляются в папке пункт в списке.

ofEnableSizing (Windows 98 и выше) Давайте Explorer-стиль диалога быть изменен с помощью мыши или клавиатуры. По умолчанию в диалоговом окне позволяет этого размера, независимо от стоимости этой опции. Это требуется только в том случае, если Вы предоставите крючком процедуры или пользовательский шаблон. (Старый стиль диалогов никогда не разрешить изменение размера.)
ofDontAddToRecent Предотвращает файл от добавлен в список недавно открывавшихся файлов.
ofForceShowHidden заверяет, что скрытые файлы не видны в диалоге.

Последний раз редактировалось Sibedir; 18.09.2008 в 17:22.
Sibedir вне форума Ответить с цитированием
Старый 22.09.2008, 19:53   #14
rainbow
Форумчанин
 
Регистрация: 06.09.2008
Сообщений: 156
По умолчанию

SibeDir, спасибо за помощь, но я все таки сделал, чтобы все было нормально, только через метку label.
И имел ввиду изменить заголовок не у диалогового окна SaveDialog
а у окна:
Код:
MessageDlg('Заменить?', mtConfirmation,[mbYes,mbNo], 0)
Ужас, как я устал от тупизны...
rainbow вне форума Ответить с цитированием
Старый 23.09.2008, 08:53   #15
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Цитата:
Сообщение от rainbow
SibeDir
Сам себе (Sibe) каталог (Dir)
Цитата:
но я все таки сделал ... через метку label.
Поясни плиз. Несовсем понятно. Ты создал свое диалоговое окно?
Извини, мне кажется ты перезаморочился. Не пойму, чем тебе не нравится стандартный запрос сэйвдиалога о замене файла. У пользователя не возникнит ни малейшего сомнения о заданном вопросе. Ему это привычно. Многие юзеры не любят подобных "новшеств". Это, конечно, уже потология, но я, во времена, когда заменял системника, встречал пользователей зависающих или бьющихся в панике при виде не знакомого им диалогового окна (они их мне табличками называли), хотя вся исчерпывающая информация в этой самой "табличке" была. Это как дышать или ездить на велосипеде. Пока дышешь - не замечаешь этого, а начинаешь думать о дыхании и дыхание сбивается. В 99% процентах случаев, отвечая на запросы программ, мы даже не задумываемся. Более того, некоторые запросы мы даже не замечаем (так же, как когда моргаешь).

Но, как говорится, дело хозяйское. Просто хотел обратить на это внимание. Я и сам до некоторого времени любил все ручками делать на свой лад. Но теперь отучаю себя от этой дурацкой привычки, потому что, как оказалось, многое уже сделано до меня.
Цитата:
И имел ввиду изменить заголовок не у диалогового окна SaveDialog а у окна:
Код:
MessageDlg('Заменить?', mtConfirmation,[mbYes,mbNo], 0)
Код:
uses
  ...Consts;

procedure HookResourceString(rs: PResStringRec; newStr: PChar);
var
  oldprotect: DWORD;
begin
  VirtualProtect(rs, SizeOf(rs^), PAGE_EXECUTE_READWRITE, @oldProtect);
  rs^.Identifier := Integer(newStr);
  VirtualProtect(rs, SizeOf(rs^), oldProtect, @oldProtect);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  pch: PChar;
begin
  pch := 'Новый заголовок';
  HookResourceString (@SMsgDlgConfirm, pch);
  MessageDlg ('Заменить?', mtConfirmation,[mbYes,mbNo], 0);
end;
Источник: http://delphiworld.narod.ru/base/chg_res_strs_rtti.html

Последний раз редактировалось Sibedir; 23.09.2008 в 09:02.
Sibedir вне форума Ответить с цитированием
Старый 23.09.2008, 09:00   #16
rainbow
Форумчанин
 
Регистрация: 06.09.2008
Сообщений: 156
По умолчанию

Я сделал вот так:
Код:
procedure TForm1.CreateMenuItemClick(Sender: TObject);
label 10;
begin
10:
if SaveDialog1.Execute then
if fileexists(SaveDialog1.FileName) then
begin
if MessageDlg('Вы хотите заменить файл?', mtConfirmation,[mbYes,mbNo], 0) = mrYes then
savefile
else goto 10;
end
else
savefile;
SaveMenuItem.Enabled:=true;
ParametersMenuItem.Enabled:=true;
end;
Еще процедура SaveFile:
Код:
procedure TForm1.SaveFile;
var
st:Pstrings;
f:Tfilestream;
begin
try
st:=New(Pstrings);
st.Xm1:=StrToFloat(ParamForm.StringGrid1.Cells[1,1]);
st.Ym1:=StrToFloat(ParamForm.StringGrid1.Cells[2,1]);
st.X42_1:=StrToFloat(ParamForm.StringGrid1.Cells[3,1]);
st.Y42_1:=StrToFloat(ParamForm.StringGrid1.Cells[4,1]);
st.Xm2:=StrToFloat(ParamForm.StringGrid1.Cells[1,2]);
st.Ym2:=StrToFloat(ParamForm.StringGrid1.Cells[2,2]);
st.X42_2:=StrToFloat(ParamForm.StringGrid1.Cells[3,2]);
st.Y42_2:=StrToFloat(ParamForm.StringGrid1.Cells[4,2]);
st.Xm11:=StrToFloat(ParamForm.StringGrid2.Cells[1,1]);
st.Ym11:=StrToFloat(ParamForm.StringGrid2.Cells[2,1]);
st.X63_1:=StrToFloat(ParamForm.StringGrid2.Cells[3,1]);
st.Y63_1:=StrToFloat(ParamForm.StringGrid2.Cells[4,1]);
st.Xm21:=StrToFloat(ParamForm.StringGrid2.Cells[1,2]);
st.Ym21:=StrToFloat(ParamForm.StringGrid2.Cells[2,2]);
st.X63_2:=StrToFloat(ParamForm.StringGrid2.Cells[3,2]);
st.Y63_2:=StrToFloat(ParamForm.StringGrid2.Cells[4,2]);
if Savedialog1.FileName<>'' then
f:=Tfilestream.Create(SaveDialog1.FileName,fmcreate)
else
f:=Tfilestream.Create(OpenDialog1.FileName,fmcreate);
f.Write(st^,sizeof(st^));
f.Free;
Dispose(st);
except
  Application.MessageBox(PChar('Неправильно введены параметры'),'Внимание!',MB_OK);
end;
end;
Сейчас попробую вставить строку
HookResourceString (@SMsgDlgConfirm, pch);
Ужас, как я устал от тупизны...
rainbow вне форума Ответить с цитированием
Старый 27.09.2008, 11:35   #17
jone
Форумчанин
 
Аватар для jone
 
Регистрация: 27.09.2008
Сообщений: 152
По умолчанию

так самое простое

memo1.Lines.LoadFromFile('c:\1.txt' );
memo1.Lines.SaveToFile('c:\1.txt');
jone вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка/сохранение рисунков Marsik Помощь студентам 20 20.11.2008 18:09
HRGN сохранение-загрузка? Comer_Jus Общие вопросы Delphi 5 21.05.2008 20:12
Сохранение и загрузка информации Slash Общие вопросы Delphi 9 04.02.2007 22:01
Сохранение и загрузка узлов TreeView из базы данных Ko$tello Компоненты Delphi 1 14.11.2006 17:15