Delphi World - Автосмена расширения файла в строке ввода OpenDialog при смене типа файла
Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Автосмена расширения файла в строке ввода OpenDialog при смене типа файла

Автор: Павел Озерский
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Автосмена расширения файла в строке ввода OpenDialog при смене типа файла

Кусок из моей программы, в котором автоматически изменяется расширение файла в
строке редактирования имени файла в OpenDialog (у меня - в его наследнике), если
пользователь изменяет тип файла. Функция CustomOnTypeChange должна быть поставлена
как обработчик события OnTypeChange.

Зависимости: Windows, SysUtils, Forms, Dialogs
Автор:       Павел Озерский, pavel@insect.mail.iephb.ru, Санкт-Петербург
Copyright:   Cобственное написание (Павел Озерский), небольшая коррекция - Игорь Плотников
Дата:        18 апреля 2002 г.
***************************************************** }

type
  tHookParam = packed record
    case integer of
      0: (l: longint);
      1: (
        iDX: byte;
        isOpen: byteBool;
        xtLen: word);
  end;
const
  DX: array[1..5] of string[3] = ('bmp', 'tif', 'jpg', '', '');

function dHook(h: tHandle; param: longint): longbool; stdcall;
var
  ss: shortstring;
  ls: ansistring;
  hp: tHookParam absolute param;
begin
  byte(ss[0]) := GetClassName(h, @ss[1], 255);
  if ss = 'Edit' then
  begin
    if hp.isOpen then
      ls := ''
    else
    begin
      byte(ss[0]) := GetWindowText(h, @ss[1], 255);
      ls := ChangeFileExt(ss, '.' + DX[hp.iDX]);
    end;
    SetWindowText(h, pchar(ls));
    result := false;
  end
  else
    Result := true;
end;
{$O-}

procedure TMultiFormatOpenPictureDialog.CustomOnTypeChange(Sender: tObject);
var
  ext: string;
  SaveStyle: boolean;
  hp: tHookParam;
begin
  hp.isOpen := not (Sender is tSaveDialog);
  hp.iDX := tOpenDialog(Sender).FilterIndex;
  tOpenDialog(Sender).DefaultExt := DX[hp.iDX];
  ext := extractFileExt(tOpenDialog(Sender).filename);
  hp.xtLen := length(ext);
  if (ext <> '') and (DX[tOpenDialog(Sender).FilterIndex] <> '') then
    if ext[1] = '.' then
    begin
      SaveStyle := NewStyleControls;
      NewStyleControls := false;

      tOpenDialog(Sender).filename := copy(tOpenDialog(Sender).filename, 1,
        length(tOpenDialog(Sender).filename) - length(ext)) + '.' +
        tOpenDialog(Sender).DefaultExt;
      EnumChildWindows(GetParent(tOpenDialog(Sender).handle), @dHook, hp.l);
      NewStyleControls := SaveStyle;
    end;
end;
{$O+}
Проект Delphi World © Выпуск 2002 - 2017
Автор проекта: Эксклюзивные курсы программирования