Автосмена расширения файла в строке ввода OpenDialog при смене типа файлаDelphi , Программа и Интерфейс , Диалоги и Фреймы
Автор: Павел Озерский { **** UBPFD *********** by delphibase.endimus.com **** >> Кусок из моей программы, в котором автоматически изменяется расширение файла в строке редактирования имени файла в 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+} Here's a translation of the provided text into Russian: Код на языке Delphi автоматизирует процесс изменения расширения файла в поле редактирования диалога "Открыть", когда пользователь изменяет тип файла. Это достигается за счет переопределения события OnTypeChange компонента OpenDialog. Вот шаг за шагом, как код работает:
Код довольно эффективен и структурирован, что делает его легко понятным и поддерживаемым. Однако есть несколько областей, которые можно улучшить:
Вот измененный вариант кода с некоторыми улучшениями: Тип TOpenDialog = класс(ComCtrls.TOpenDialog); var DX: array[1..5] of string[3]; 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; else Result := true; end; procedure TMultiFormatOpenPictureDialog.CustomOnTypeChange(Sender: TObject); var ext: string; SaveStyle: boolean; hp: THookParam; begin hp.isOpen := not (Sender is TSaveDialog); hp.iDX := OpenDialog(Sender).FilterIndex; OpenDialog(Sender).DefaultExt := DX[hp.iDX]; ext := ExtractFileExt(OpenDialog(Sender).Filename); hp.xtLen := Length(ext); if (ext <> '') and (DX[OpenDialog(Sender).FilterIndex] <> '') then if ext[1] = '.' then begin SaveStyle := NewStyleControls; NewStyleControls := false;
end; В измененном коде:
Обратите внимание, что это только один из возможных способов улучшить код, и может быть другие подходы в зависимости от вашей конкретной задачи и ограничений. Автосмена расширения файла в строке ввода OpenDialog при смене типа файла происходит автоматически изменением расширения файла в строке редактирования имени файла, если пользователь изменяет тип файла. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Диалоги и Фреймы ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |