Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 07.05.2015
Сообщений: 42
1

Что надо сделать, чтобы при запуске программы и при первом запуске SaveDialog открывался заданный по умолчанию каталог?

26.04.2017, 11:02. Просмотров 4379. Ответов 28
Метки нет (Все метки)


Здравствуйте ВСЕ !
Проблема следующая.
1) При первом запуске SaveDialog открывается каталог с файлами.
2) Изменяешь каталог, выбираешь файл и производится запись. Этот каталог каким-то образом запоминается ?!
3) Выходишь из программы, запускаешь ее снова, запускаешь SaveDialog и открывается каталог, который был открыт при последнем запуске SaveDialog.

Вопрос: что надо сделать, чтобы при запуске программы и при первом запуске SaveDialog открывался заданный по умолчанию каталог ?

Установка каталога по умолчанию с помощью SaveDialog.InitialDir при загрузке программы не помогает.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.04.2017, 11:02
Ответы с готовыми решениями:

Как сделать чтобы программа при первом запуске добавлялась в автозагрузку?
Как сделать чтобы программа при первом запуске добавлялась в автозагрузку? А потом при каждом...

Сделать, чтобы при запуске, программа по умолчанию была свернута в трей
Здраствуйте. У меня есть программа со значком в трее. Как мне сделать, чтобы при запуске, программа...

Как сделать элемент DropDownList выбранным по умолчанию, при запуске программы?
Продолжаю изучать с# По ходу изучения возникло несколько вопросов. Пишу в Раздел: C# для...

Как мне сделать так, чтобы данный текстовый файл был открыт один раз при запуске программы и закрыт при закрытии программы?
Привет! Возник следующий вопрос. Программа состоит из основного окна Form1 и нескольких Unit. По...

28
4833 / 3814 / 1272
Регистрация: 14.04.2014
Сообщений: 17,649
Записей в блоге: 18
26.04.2017, 11:20 2
именно InitialDir должно помогать
но не при старте программы же, а перед очередным запуском диалога
0
0 / 0 / 0
Регистрация: 07.05.2015
Сообщений: 42
26.04.2017, 13:53  [ТС] 3
Я вставлял "SaveDialog.InitialDir" перед SaveDialog.Execute - не помогло. Такое ощущение, что сохраняется последний каталог, в который заходишь и если при этом запуске выбираешь другой каталог, то при следующем запуске уже появляется он.
0
Эксперт Pascal/Delphi
4665 / 2652 / 832
Регистрация: 04.10.2012
Сообщений: 9,666
26.04.2017, 15:40 4
Цитата Сообщение от geb2010 Посмотреть сообщение
не помогло
Неправда. Проверено
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//инициализация параметров диалога сохранения
procedure TForm1.FormCreate(Sender: TObject);
begin
with SaveDialog1 do begin
Title :='Задайте имя файла';  //заголовок
DefaultExt :='txt'; //расширение по умолчанию
Filter :='Текстовые файлы|*.txt'; //фильтр
InitialDir :='сюда_пропишите_ваш_каталог_сохранения_по_умолчанию'; //<--та самая строка !!
 end;
end;
// пример сохранения
procedure TForm1.SaveButtonClick(Sender: TObject);
begin
SaveDialog1.FileName :='';
if not SaveDialog1.Execute then Exit;
Memo1.Lines.SaveToFile(SaveDialog1.FileName);
end;
 
end.
0
0 / 0 / 0
Регистрация: 07.05.2015
Сообщений: 42
27.04.2017, 07:49  [ТС] 5
Проблема решена следующим образом:
Delphi
1
2
3
4
5
6
7
var TekDir: string;
...
Tekdir:=GetCurrentDir;                       //  запоминаем текущий каталог
SetCurrentDir('нужный каталог');        //  устанавливаем нужный каталог текущим
SaveDialog.InitialDir:=GetCurrentDir;   //  инициализируем свойство  SaveDialog
SaveDialog.Execute;                          //  получаем имя файла из каталога 
SetCurrentDir(TekDir);                       //  восстанавливаем текущий каталог
...

Всем спасибо !
0
Эксперт Pascal/Delphi
4665 / 2652 / 832
Регистрация: 04.10.2012
Сообщений: 9,666
27.04.2017, 09:16 6
Цитата Сообщение от geb2010 Посмотреть сообщение
Проблема решена
это не решение, а костыль. Решение выше и работает без проблем.
0
Житель Земли
2819 / 2670 / 373
Регистрация: 26.07.2011
Сообщений: 10,724
Записей в блоге: 1
27.04.2017, 09:20 7
geb2010, ты решил задачу длинным путем и странным
Цитата Сообщение от geb2010 Посмотреть сообщение
SetCurrentDir('нужный каталог'); // устанавливаем нужный каталог текущим
SaveDialog.InitialDir:=GetCurrentDir; // инициализируем свойство SaveDialog
зачем это? если здесь достаточно написать одну строчку, "сократив" по правилам дробей
Delphi
1
SaveDialog.InitialDir:= 'нужный каталог';
тебе ж в посте №2 подсказали короткое решение и правильное
0
0 / 0 / 0
Регистрация: 07.05.2015
Сообщений: 42
27.04.2017, 19:37  [ТС] 8
Уважаемые droider и DenNik большое спасибо за помощь, но свойство SaveDialog.InitialDir в моей программе не работает. Я не знаю почему ??? Я это свойство пробовал использовать сразу, когда начал писать программу. Пробовал с ним разные варианты, но заработал вариант, который я написал.
0
Эксперт Pascal/Delphi
4665 / 2652 / 832
Регистрация: 04.10.2012
Сообщений: 9,666
27.04.2017, 20:40 9
Цитата Сообщение от geb2010 Посмотреть сообщение
SaveDialog.InitialDir в моей программе не работает
Нет уж, Вам самому неинтересно разобраться в причине вместо того, чтобы делать через...?
Какая у Вас версия Delphi?
Цитата Сообщение от geb2010 Посмотреть сообщение
Пробовал с ним разные варианты
А Вы делали в точности так, как я написал выше?
0
0 / 0 / 0
Регистрация: 07.05.2015
Сообщений: 42
27.04.2017, 21:47  [ТС] 10
droider:
Дельфи 6. Мне очень хочется разобраться почему не срабатывает свойство. Если я создаю новую форму и вставляю в нее Ваш код то все работает. Но когда я вставляю в свою программу и аналогично все делаю, то не работает. Как будто где-то в реестре запоминается последняя папка и ее потом подключают.
0
494 / 396 / 260
Регистрация: 05.04.2013
Сообщений: 1,763
28.04.2017, 05:16 11
это конечно странно, но помнится у меня на delphi 7 иногда не срабатывал InitialDir ... не помню как лечил, кажется вообще не лечил

Добавлено через 25 секунд
правда то был OpenDialog
0
0 / 0 / 0
Регистрация: 07.05.2015
Сообщений: 42
28.04.2017, 05:20  [ТС] 12
Какой диалог не имеет значения. У меня оба диалога и на загрузку и на запись и что интересно последняя папка открывается и в одном и в другом.
0
Житель Земли
2819 / 2670 / 373
Регистрация: 26.07.2011
Сообщений: 10,724
Записей в блоге: 1
28.04.2017, 09:10 13
geb2010, этим Виндовс заведует
0
0 / 0 / 0
Регистрация: 23.02.2020
Сообщений: 12
08.02.2021, 20:13 14
Вот это срабатывает точно. А с Dir была проблема.
Delphi
1
SaveDialog1.FileName:=ExtractFileDir(ParamStr(0))+'\BAZA\*.*';
0
Житель Земли
2819 / 2670 / 373
Регистрация: 26.07.2011
Сообщений: 10,724
Записей в блоге: 1
08.02.2021, 21:41 15
С Dir здесь как раз нет проблемы. А проблема в том, что FileName так не назначают. Ты спутал с фильтром, ибо звездочка - это подстановочный символ для фильтра
0
0 / 0 / 0
Регистрация: 23.02.2020
Сообщений: 12
08.02.2021, 22:13 16
Я ничего ни с чем не спутал. Написанное мною РАБОТАЕТ в D6/7.
А через InitialDir входит в нужную папку не всегда.
+'\BAZA\*.* ' я поставил для примера.
0
1988 / 985 / 361
Регистрация: 15.11.2015
Сообщений: 3,984
09.02.2021, 03:18 17
InitialDir работает в самом начале. Когда файл уже был открыт, то InitialDir не действует. И это логично - не кидает в одну и ту же папку при каждом открытии файла.
Если нужно перекидывать в другую папку, то можно очищать FileName, тогда диалог откроется в InitialDir.
Либо так же задавать FileName. Например:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure TForm1.btnSaveAsClick(Sender: TObject);
var
  s: string;
begin
  SaveD.Filter := 'Windows bitmap (*.bmp)|*.bmp|JPEG (*.jpg)|*.jpg|Portable Network Graphic (*.png)|*.png|PCExchange (*.pcx)|*.pcx';
 
  s := OpenD.FileName;
  SetLength(s, Length(s) - Length(ExtractFileExt(s)));
  SaveD.FileName := s;
 
  SaveD.InitialDir := ExtractFilePath(OpenD.FileName);
  if not SaveD.Execute then
    Exit;
 
  SavePicture(SaveD.FileName);
end;
Диалог сохранения всегда открывается там, где был открыт файл.
0
0 / 0 / 0
Регистрация: 23.02.2020
Сообщений: 12
09.02.2021, 09:53 18
Теперь народ, прочитав всё вышеизложенное сам решит нужную задачу. Надеюсь.
0
Житель Земли
2819 / 2670 / 373
Регистрация: 26.07.2011
Сообщений: 10,724
Записей в блоге: 1
09.02.2021, 10:21 19
Цитата Сообщение от lllevin Посмотреть сообщение
*.*
Вот этого не должно быть в имени файла. Точка
0
0 / 0 / 0
Регистрация: 23.02.2020
Сообщений: 12
09.02.2021, 13:33 20
Слова "должно" в программировании нет.
Есть только: "программа работает правильно",
или "программа не работает",
а что ещё хуже: "программа работает, но неправильно".
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.02.2021, 13:33

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Стал сильно нагреваться блок питания но только при первом запуске и вырубает комп , при втором запуске работает норм
поставил новую видюху Geforce GTX 560 ti и стал сильно нагреваться блок питания но только при...

Как сделать так чтобы при запуске третьей программы с параметром \R предыдущие программы закрывались?
#include &quot;stdafx.h&quot; #include &lt;windows.h&gt; #include &lt;iostream&gt; void main(int argc, char *argv)...

Как сделать, чтобы при запуске программы включалось видео
Я сделал программу в которой при запуске включается видео, как мне сделать что бы видео...

Как сделать, чтобы при запуске программы кнопка автоматически нажималась?
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics,...

Как сделать, чтобы при запуске программы кнопка автоматически нажималась?
есть программа (обсалютно любая на которой одна кнопка стоит и все) как сделать чтобы при запуске...

Как сделать так, чтобы при запуске программы её не было видно?
Как сделать так, чтобы при запуске программы её не было видно? А именно программа запущена а...


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

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

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