powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delpi 7 => XE2
25 сообщений из 25, страница 1 из 1
Delpi 7 => XE2
    #39917748
Фотография Генерал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть процедура, которая работает в Delpi 7:

Код: 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.
var
  FileExportMain: string;

procedure TForm1.SaveDialog1TypeChange(Sender: TObject);
var
  hSaveDialog: HWND;
  sNewName: String;
begin
  hSaveDialog := GetParent(SaveDialog1.Handle);
  sNewName := FileExportMain;

  if SaveDialog1.FilterIndex = 1 then
  begin
    sNewName := sNewName + '.rtf';
  end
  else

  if SaveDialog1.FilterIndex = 2 then
  begin
    sNewName := sNewName + '.pdf';
  end;

  SendMessage(hSaveDialog, CDM_SETCONTROLTEXT, edt1, LongInt(PChar(sNewName)));
end;



А в XE2 этот же код не работает, не меняется расширение файла в наименовании.
Всё перерыл и не нашёл почему.
Прошу совета.
...
Рейтинг: 0 / 0
Delpi 7 => XE2
    #39917750
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
23.01.2020 11:03, Генерал пишет:
> и не нашёл почему.

потому что стринги другие
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delpi 7 => XE2
    #39917761
Фотография Генерал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

А какие нужны?
Менял на Widestring и Ansistring. Не помогло.
...
Рейтинг: 0 / 0
Delpi 7 => XE2
    #39917777
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что Вы вообще пытаетесь сделать, зачем SendMessage?

P.S. SendMessageA/SendMessageW попробуйте.
...
Рейтинг: 0 / 0
Delpi 7 => XE2
    #39917778
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
23.01.2020 11:54, Гаджимурадов Рустам пишет:
> SendMessageA попробуйте.

и PAnsiChar
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delpi 7 => XE2
    #39917795
Фотография Генерал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

Не поверите, пробовал - не помогло.
...
Рейтинг: 0 / 0
Delpi 7 => XE2
    #39917797
Фотография Генерал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий

23.01.2020 11:54, Гаджимурадов Рустам пишет:
> SendMessageA попробуйте.

и PAnsiChar


И так не помогло... ((
...
Рейтинг: 0 / 0
Delpi 7 => XE2
    #39917798
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
23.01.2020 12:12, Генерал пишет:
>
> И так не помогло... ((
>

ты код свой покажи.
а не хватайся за что попало.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delpi 7 => XE2
    #39917800
Фотография Генерал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам

А что Вы вообще пытаетесь сделать, зачем SendMessage?


Есть SaveDialog1.
Когда меняю тип файла, то наименование тоже должно поменяться.
Например, выбираю тип RTF, то в наименовании появляется 111.RTF/
Когда выбираю PDF, то в наименовании появляется 111.PDF
...
Рейтинг: 0 / 0
Delpi 7 => XE2
    #39917801
Фотография Генерал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий

ты код свой покажи.
а не хватайся за что попало.


В первом посте код.

Код: 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.
var
  FileExportMain: string;

procedure TForm1.SaveDialog1TypeChange(Sender: TObject);
var
  hSaveDialog: HWND;
  sNewName: String;
begin
  hSaveDialog := GetParent(SaveDialog1.Handle);
  sNewName := FileExportMain;

  if SaveDialog1.FilterIndex = 1 then
  begin
    sNewName := sNewName + '.rtf';
  end
  else

  if SaveDialog1.FilterIndex = 2 then
  begin
    sNewName := sNewName + '.pdf';
  end;

  SendMessage(hSaveDialog, CDM_SETCONTROLTEXT, edt1, LongInt(PChar(sNewName)));
end;
...
Рейтинг: 0 / 0
Delpi 7 => XE2
    #39917805
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Генерал,

отладчик-то работает?
...
Рейтинг: 0 / 0
Delpi 7 => XE2
    #39917810
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Генерал
В первом посте код.
это говнокод (применительно к ХЕ2).
где исправления?
...
Рейтинг: 0 / 0
Delpi 7 => XE2
    #39917816
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Генерал> Когда меняю тип файла, то наименование тоже должно поменяться.

Это довольно необычная логика, но допустим.
Во-первых, это можно сделать перед собсно
сохранением (т.е. после ша Dialog.Execute).
Во-вторых, Вы понимаете, что по этой логике
(и приведенному коду) у Вас может появиться
имя файла 111.RTF.PDF.RTF.PDF.RTF ?

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delpi 7 => XE2
    #39917817
Фотография Генерал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman
Генерал,

отладчик-то работает?


Да, работает.
...
Рейтинг: 0 / 0
Delpi 7 => XE2
    #39917827
Фотография Генерал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Генерал> Когда меняю тип файла, то наименование тоже должно поменяться.

Это довольно необычная логика, но допустим.
Во-первых, это можно сделать перед собсно
сохранением (т.е. после ша Dialog.Execute).
Во-вторых, Вы понимаете, что по этой логике
(и приведенному коду) у Вас может появиться
имя файла 111.RTF.PDF.RTF.PDF.RTF ?



В Delphi 7 ведь работает.
Имя файла заранее готовится и передаётся через SendMessage
...
Рейтинг: 0 / 0
Delpi 7 => XE2
    #39917830
Фотография Генерал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
Генерал
В первом посте код.
это говнокод (применительно к ХЕ2).
где исправления?


Да вот сам думаю, зачем всё это нужно?
)))

Можно и без расширения в имени файла прожить...
...
Рейтинг: 0 / 0
Delpi 7 => XE2
    #39917890
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГенералДа вот сам думаю, зачем всё это нужно?

Ну как же, иначе ведь придётся читать документации на флаги диалога, а это тяжко, долго и
приводит к летальным последствиям. А так немного говнокода и ты в шоколаде.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delpi 7 => XE2
    #39917910
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Генерал,

может edt1 неправильно определяется....
...
Рейтинг: 0 / 0
Delpi 7 => XE2
    #39917916
Фотография Генерал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

ГенералДа вот сам думаю, зачем всё это нужно?

Ну как же, иначе ведь придётся читать документации на флаги диалога, а это тяжко, долго и
приводит к летальным последствиям. А так немного говнокода и ты в шоколаде.


Нет такого флага!
...
Рейтинг: 0 / 0
Delpi 7 => XE2
    #39917917
Фотография Генерал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zelius
Генерал,

может edt1 неправильно определяется....


Отладчик показывает, что всё норм.
1152
...
Рейтинг: 0 / 0
Delpi 7 => XE2
    #39917925
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ГенералНет такого флага!

ForceExtension выпилили? Ню-ню...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delpi 7 => XE2
    #39917929
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
23.01.2020 15:19, Dimitry Sibiryakov пишет:
>
> ForceExtension выпилили? Ню-ню...

в 7-ке его и не было.
но почему ТС не использует проперть DefaultExt, мне лично непонятно...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delpi 7 => XE2
    #39917987
Фотография Генерал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

ForceExtension


Может это как-то по другому называется?
У меня даже гугл ничего подобного не нашёл...
...
Рейтинг: 0 / 0
Delpi 7 => XE2
    #39918024
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийв 7-ке его и не было.

Действительно. Что-то с чем-то я перепутал.
https://stackoverflow.com/questions/39016662/tsavedialog-file-extension-and-ofoverwritepromt-issue
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Delpi 7 => XE2
    #39918048
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вначале так
https://docs.microsoft.com/en-us/windows/win32/dlgbox/cdm-setcontroltext CDM_SETCONTROLTEXT message

[ Starting with Windows Vista, the Open and Save As common dialog boxes have been superseded by the Common Item Dialog . We recommended that you use the Common Item Dialog API instead of these dialog boxes from the Common Dialog Box Library.]

Sets the text for the specified control in an Explorer-style Open or Save As dialog box. The dialog box must have been created with the OFN_EXPLORER flag ; otherwise, the message fails.
Потом так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
function TOpenDialog.DoExecute(Func: Pointer; ParentWnd: HWND): Bool;
.............
begin
  if (Win32MajorVersion >= 6) and UseLatestCommonDialogs and
     StyleServices.Enabled and (Template = nil) and
     not (Assigned(FOnIncludeItem) or Assigned(FOnClose) or Assigned(FOnShow)) then
  begin
    // This requires Windows Vista or later
    if Func = @GetOpenFileName then
      FileDialogWrapper := TFileOpenDialogWrapper.Create(Self)
    else
      FileDialogWrapper := TFileSaveDialogWrapper.Create(Self);

    try
      Result := FileDialogWrapper.Execute(ParentWnd);
    finally
      FileDialogWrapper.Free;
    end;
    Exit;
  end;
  ..............
end;

и в конце вот так
Код: 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.
function TOpenDialog.DoExecute(Func: Pointer; ParentWnd: HWND): Bool;
  .............
begin
  if (Win32MajorVersion >= 6) and UseLatestCommonDialogs and
     StyleServices.Enabled and (Template = nil) and
     not (Assigned(FOnIncludeItem) or Assigned(FOnClose) or Assigned(FOnShow)) then
  begin
    ........................
    Exit;
  end;
  .................
    Flags := OFN_ENABLEHOOK;
    FlagsEx := 0;

    for Option := Low(Option) to High(Option) do
      if Option in FOptions then
        Flags := Flags or OpenOptions[Option];
    if NewStyleControls then
    begin
      Flags := Flags xor OFN_EXPLORER;
      ..............
    end
    else
      Flags := Flags and not OFN_EXPLORER;
    .............
end;

Дальше отлаживайтесь и думайте сами
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delpi 7 => XE2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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