powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / запрет на изменение FileName в SaveDialog
30 сообщений из 30, показаны все 2 страниц
запрет на изменение FileName в SaveDialog
    #37807397
nilanerda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите пожалуйста, какой функцией в SaveDialog запретить изменение имени файла, которое вормируется программно?
чтобы пользователь не мог не дописать не удалить символы, не изменить

при сохранении имени в фильтр всеравно можно изменить, в опциях тоже нет специальной функции.

у меня написано так: (но не работает)

SD.FileName := 'test_'+CBSh1.Text+'_'+Ed1.Text+'_'+Daten[1]+Daten[2]+Daten[4]+Daten[5]+Daten[7]+Daten[8]+Daten[9]+Daten[10]+'.xls';
SD.Filter := SD.FileName;
[img=]
XL.ActiveWorkBook.SaveAs(SD.FileName);
...
Рейтинг: 0 / 0
запрет на изменение FileName в SaveDialog
    #37807434
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
nilanerdaПодскажите пожалуйста, какой функцией в SaveDialog запретить изменение имени файла, которое вормируется программно?
чтобы пользователь не мог не дописать не удалить символы, не изменить

Тогда надо показывать юзеру не диалог сохранения ФАЙЛА, а диалог ВЫБОРА ПАПКИ.
И всё.
...
Рейтинг: 0 / 0
запрет на изменение FileName в SaveDialog
    #37807444
xen2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а) игнорировать введенное имя: ExtractFilePath(SD.FileName)+MyFileName
б) использовать диалог выбора папки , а не SaveDialog
...
Рейтинг: 0 / 0
запрет на изменение FileName в SaveDialog
    #37807447
nilanerda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так тогда вместо кнопки сохранить будет кнопка открыть
...
Рейтинг: 0 / 0
запрет на изменение FileName в SaveDialog
    #37807451
nilanerda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и что там в коде писать? как о диалоге для открытия сохранять?
...
Рейтинг: 0 / 0
запрет на изменение FileName в SaveDialog
    #37807472
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
nilanerdaтак тогда вместо кнопки сохранить будет кнопка открыть
nilanerdaи что там в коде писать? как о диалоге для открытия сохранять?

Мож, поделишься такой забойной травой?
...
Рейтинг: 0 / 0
запрет на изменение FileName в SaveDialog
    #37807484
Если я правильно понял, она в конце концов из экселя сохраняет.
Не ну в принципе конечно можно readonly сделать, но ну его нафиг.
Офисов, ВинОсей всяких поразвелось

Чето какие то задачи у девушки совсем не студенческие
...
Рейтинг: 0 / 0
запрет на изменение FileName в SaveDialog
    #37807493
nilanerda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
с диалогом выбора папки то же самое
...
Рейтинг: 0 / 0
запрет на изменение FileName в SaveDialog
    #37807521
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nilanerdaтак тогда вместо кнопки сохранить будет кнопка открытьво-первых, будет кнопка ОК. во-вторых, это можно пофиксить . в-третьих, при желании можно попытаться намудохать рабочий вариант с диалогом выбора файла. в-четвертых, я знаю некоторые программы, в которых выбор папки происходит с помощью диалога выбора файла о_О, там вместо Открыть/Сохранить написано Выбрать папку (пример - uTorrent при создании торрент-файла).

Как это сделано - я и сам не прочь узнать, т.к. для выбора папки диалог открытия файла удобнее, имхо, чем дерево с папками)) перечитать все доки по OpenFileName-функции я чето не смог :)
...
Рейтинг: 0 / 0
запрет на изменение FileName в SaveDialog
    #37807535
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fd00chКак это сделано - я и сам не прочь узнать, т.к. для выбора папки диалог открытия файла удобнее, имхо, чем дерево с папками)) перечитать все доки по OpenFileName-функции я чето не смог :)похоже, там наговнили кучу из CDM_HIDECONTROL + CDM_SETCONTROLTEXT + CDN_INCLUDEITEM
...
Рейтинг: 0 / 0
запрет на изменение FileName в SaveDialog
    #37807579
Эй теоретики, так я все таки не понял.
Этот диалог из экселя выскочил ?, и она показала совсем не тот кусок кода?

От этого очень сильно зависит возможные пути решения задачи.
а то тут гопнег Леха уже начал намудохивать диалоги вовсю
...
Рейтинг: 0 / 0
запрет на изменение FileName в SaveDialog
    #37807601
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диалоги о сохраненияхтак я все таки не понял.
Этот диалог из экселя выскочил ?ога. новый Excel 2012 как раз такой тип файлов прописывает в диалоге))

Диалоги о сохраненияха то тут гопнег Леха уже начал намудохивать диалоги вовсю интересно ж. меня всегда убивала ущербность стандартного SHBrowseForFolder...
...
Рейтинг: 0 / 0
запрет на изменение FileName в SaveDialog
    #37807616
nilanerda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Этот диалог не из экселя, а SaveDialog
...
Рейтинг: 0 / 0
запрет на изменение FileName в SaveDialog
    #37807618
fd00ch,
Меня эта хрень очень сильно смущает:
Код: pascal
1.
XL.ActiveWorkBook.SaveAs(SD.FileName); 



Размышления вслух:
А если ее диалог не из экселя...
У Рей Конопка(raize) вроде как свои диалоги были, там вроде как можно было делать все что угодно.
...
Рейтинг: 0 / 0
запрет на изменение FileName в SaveDialog
    #37807622
nilanerda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а название файла из программы добавляется, и надо, чтобы оно таким же и оставалось
...
Рейтинг: 0 / 0
запрет на изменение FileName в SaveDialog
    #37807628
nilanerdaЭтот диалог не из экселя, а SaveDialog
Запуск диалога, выполняется методом Execute , у тебя этого не видно.
Ты нас не путай
...
Рейтинг: 0 / 0
запрет на изменение FileName в SaveDialog
    #37807636
nilanerda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Daten := DateToStr(Date);

sd.InitialDir := GetDirect + '\ExcelReports';
sd.FileName := 'test_'+CBSh1.Text+'_'+Ed1.Text+'_'+Daten[1]+Daten[2]+Daten[4]+Daten[5]+Daten[7]+Daten[8]+Daten[9]+Daten[10]+'.xls';
// if AnsiCompareStr(sd.FileName,buf) <> 0 then sd.FileName := buf;

buf := sd.FileName;
if sd.Execute then begin
v := 0;
vv := 0;
w := 1;
XL.ActiveWorkBook.Saveas(sd.FileName);
end;
...
Рейтинг: 0 / 0
запрет на изменение FileName в SaveDialog
    #37807680
xen2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я же тебе предложил ExtractFilePath!!!
Код: pascal
1.
2.
3.
4.
MyFileName := 'test_'+CBSh1.Text+'_'+Ed1.Text+'_'+Daten[1]+Daten[2]+Daten[4]+Daten[5]+Daten[7]+Daten[8]+Daten[9]+Daten[10]+'.xls';
...
if SD.Execute then
  XL.ActiveWorkBook.Saveas(ExtractFilePath(SD.FileName)+MyFileName)
...
Рейтинг: 0 / 0
запрет на изменение FileName в SaveDialog
    #37807732
nilanerda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо, сейчас попробую, я просто не знала где это написать
...
Рейтинг: 0 / 0
запрет на изменение FileName в SaveDialog
    #37807734
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xen2, изящно - дать юзеру выбор и следом наплевать на него))
...
Рейтинг: 0 / 0
запрет на изменение FileName в SaveDialog
    #37807749
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дату в имени файла правильно писать как yyyymmdd, для правильной сортировки имен файлов.
соответственно, и всякие другие цифры, время, и т.п. должны идти после даты, а не до.
...
Рейтинг: 0 / 0
запрет на изменение FileName в SaveDialog
    #37807789
Фотография Sergij Gromov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvдату в имени файла правильно писать как yyyymmdd, для правильной сортировки имен файлов.
соответственно, и всякие другие цифры, время, и т.п. должны идти после даты, а не до.

главное чтобы системные функции возвращения даты не юзались, ибо заменит юзер в ОС разделитель на "/" - и привет всем стараниям
...
Рейтинг: 0 / 0
запрет на изменение FileName в SaveDialog
    #37807827
nilanerda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
получилось, спасибо xen2
...
Рейтинг: 0 / 0
запрет на изменение FileName в SaveDialog
    #37807855
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nilanerdaс диалогом выбора папки то же самоеSelectDirectory. И не нужно обманывать пользователей
...
Рейтинг: 0 / 0
запрет на изменение FileName в SaveDialog
    #37808254
Это наверное никому нахрен не пригодится, но тему все таки нужно раскрыть.
Раз уж зашел разговор...
И умнее этого, чето ни чо не придувается

Код: pascal
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.
procedure TForm1.Button1Click(Sender: TObject);
begin
  SaveDialog1.FileName:='test.txt';
  SaveDialog1.OnShow:=MySaveDialogShow;
  SaveDialog1.Execute;
end;

procedure TForm1.MySaveDialogShow(Sender: TObject);
var
  h: THandle;
  Buf: array[0..255] of Char;
  S: String;
  L: Integer;
begin
  h:=SaveDialog1.Handle;
  while h<>0 do
  begin
    h:=GetWindow(h,GW_HWNDPREV);
    L:=GetClassName(h,@Buf,SizeOf(Buf));
    SetString(S,PChar(@Buf),L);
    if S='ComboBoxEx32' then
    begin
      h:=GetWindow(h,GW_CHILD);
      h:=GetWindow(h,GW_CHILD);
      SendMessage(h,EM_SETREADONLY,Ord(True),0);
      Break;
    end;
  end;
end;
...
Рейтинг: 0 / 0
запрет на изменение FileName в SaveDialog
    #37808257
придумывается
...
Рейтинг: 0 / 0
запрет на изменение FileName в SaveDialog
    #37808280
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диалоги о сохранениях
Код: pascal
1.
SendMessage(h,EM_SETREADONLY,Ord(True),0);

Извращенец
...
Рейтинг: 0 / 0
запрет на изменение FileName в SaveDialog
    #37808330
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диалоги о сохранениях
Код: pascal
1.
2.
3.
4.
5.
6.
7.
    if S='ComboBoxEx32' then
    begin
      h:=GetWindow(h,GW_CHILD);
      h:=GetWindow(h,GW_CHILD);
      SendMessage(h,EM_SETREADONLY,Ord(True),0);
      Break;
    end;

буээээ... комбобокс-то открывается
Диалоги о сохранениях
Код: pascal
1.
2.
3.
4.
5.
    if S='ComboBoxEx32' then
    begin
      EnableWindow(h, False);
      Break;
    end;

и усё равно файл выбирается и его имя записывается в комбобокс
...
Рейтинг: 0 / 0
запрет на изменение FileName в SaveDialog
    #37808378
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всё же то решение тоже никудышное. если поупражняться в проктологии - то можно родить такое
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
uses 
 Dlgs;

procedure TForm1.Button1Click(Sender: TObject);
 begin
  SaveDialog1.FileName:='test.txt';
  SaveDialog1.OnShow:=MySaveDialogShow;
  SaveDialog1.Execute;
 end;

procedure TForm1.MySaveDialogShow(Sender: TObject);
 const
  WasteControls: array [0..4] of Integer = (edt1, cmb13, stc3, cmb1, stc2);
 var
  Wnd : HWND;
  Step: Integer;
 begin
  Wnd:=GetParent(SaveDialog1.Handle);
  for Step:=Low(WasteControls) to High(WasteControls)
   do   ShowWindow(GetDlgItem(Wnd, WasteControls[Step]), SW_HIDE)
 end;

хотя этот изврат тоже неправильный с т.з. разумности, т.к. нормальный семерочный диалог подменяется экспишными отбросами
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
запрет на изменение FileName в SaveDialog
    #40033545
_Alex_121286
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
РЕШЕНИЕ ВСЕ-ТАКИ СУЩЕСТВУЕТ!!!

Код: pascal
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.
uses
   ..., CommDlg, StrUtils;

public
  OLD_FILENAME : string; //переменная для первоначального имени файла; 

...

procedure TForm1.Button1Click(Sender: TObject);//сохранить как
begin
  SaveDialog1.InitialDir:='D:\';
  SaveDialog1.FileName:='111.txt';
  OLD_FILNAME:=ExtractFileName(SaveDialog1.FileName);
  if SaveDialog1.Execute then
     Memo1.Lines.SaveToFile(SaveDialog1.FileName);
end;

procedure TForm1.SaveDialog1Show(Sender: TObject);//делаем поле для имени файла неактивным
var 
  Dlg, Wnd : THandle;
begin
  Dlg:=GetParent((Sender as TSaveDialog).Handle);
  Wnd:=FindWindowEx(Dlg, 0, 'ComboBoxEx32', nil);
  EnableWindow(Wnd, False);
end;


procedure TForm1.SaveDialog1SelectionChange(Sender: TObject);//при выборе файла заменяем имя файла на первоначальное
var
  AParent:HWND;
begin
  Aparent:=GetParent(SaveDialog1.Handle);
  SendMessage(AParent,CDM_SETCONTROLTEXT, GetDlgCtrlID(FindWindowEx(AParent,0,'ComboBoxEx32',nil)), 
                      Cardinal(PChar(OLD_FILENAME)));  //вставляем первоначальное имя файла
end;



Модератор: Пользуйтесь тегом (кнопкой) SRC для оформления кода, пожалуйста.
...
Рейтинг: 0 / 0
30 сообщений из 30, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / запрет на изменение FileName в SaveDialog
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]