Автосмена расширения файла в строке ввода OpenDialog при смене типа файла

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Автор: Павел Озерский

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 }

{/codecitation}

Добавить комментарий