Содержание материала

 
 
и получается myres.res, который линкуется к проекту директивой {$R} (удобнее, конечно создавать и компилить шаблон в каком-нить редакторе ресурсов, типа Resource Workshop'а).
 
Ну а в проге заполняется структура TOpenFileName (надо в uses подключить commdlg), у которой в поле lpTemplateName задается имя шаблона, а в поле lpfnHook - hook-процедура. В этой hook-процедуре и обрабатывается реакция на дополнительные контролы (например чекбоксы). Там же можно обработать смену типа файла, директории, выбранного файла, нажатие на OK, etc.
Ну а для показа самого диалога вызывается API'шная GetOpenFileName
 
Короче, вот пример кода
 

Code:

uses

commdlg;

 

{$R *.dfm}

 

{$R MYRES.RES} // файл ресурсов с шаблоном

 

var

ofn:TOpenFileName;

f:array[0..MAX_PATH-1] of Char;

 

// hook-процедура

function Fh(Wnd: HWND; Msg:cardinal; wParam,lParam: Integer): UINT stdcall;

begin

result:=0;

case Msg of

WM_INITDIALOG:

            begin

             CheckDlgButton(Wnd,101,BST_CHECKED);  // отметим первый чекбокс

            end;

WM_COMMAND: // реакция на изменение состояния чекбоксов

     case LOWORD(wParam) of

      101:

         begin

          if (IsDlgButtonChecked(Wnd,101)=BST_CHECKED) then MessageBox(Wnd,'CheckBox1 Checked!','FileOpenDialog',0);

         end;

      102:

         begin

          if (IsDlgButtonChecked(Wnd,102)=BST_CHECKED) then MessageBox(Wnd,'CheckBox2 Checked!','FileOpenDialog',0);

         end;

 

     end;

WM_NOTIFY:

  case

  POFNotify(lParam)^.hdr.code of

   CDN_FILEOK:  // реакция на выбор файла

       begin

        if (IsDlgButtonChecked(Wnd,101)=BST_CHECKED) then

         MessageBox(Wnd,PChar('CheckBox1 Checked and '+ofn.lpstrFile+' selected'),'FileOpenDialog',0);

 

        if (IsDlgButtonChecked(Wnd,102)=BST_CHECKED) then

         MessageBox(Wnd,PChar('CheckBox2 Checked and '+ofn.lpstrFile+' selected'),'FileOpenDialog',0);

 

        end;

  end;

end;

end;

 

 

 

procedure TForm1.Button1Click(Sender: TObject);

begin

FillChar(f,sizeof(f),0);

FillChar(ofn,sizeof(ofn),0);

 

ofn.lStructSize := sizeof(TOpenFileName);

ofn.hwndOwner := Handle;

ofn.hInstance := hInstance;

 

ofn.lpstrFilter       :=  'Text Files (*.TXT)'#0'*.txt'#0+

                           'Executables (*.EXE)'#0'*.exe'#0+

                           'All files (*.*)'#0'*.*'#0#0;

ofn.lpstrTitle        := 'Select File';

ofn.lpstrFile         := f;

ofn.nMaxFile          := MAX_PATH;

ofn.lpTemplateName    :='OFT';   // имя шаблона

ofn.lpfnHook          := Fh;     // hook-процедура

ofn.Flags             := OFN_EXPLORER or OFN_CREATEPROMPT or

                         OFN_FILEMUSTEXIST or OFN_HIDEREADONLY or

                         OFN_PATHMUSTEXIST or OFN_ENABLEHOOK or

                         OFN_ENABLETEMPLATE;

// показываем диалог

if GetOpenFileName(ofn) then ShowMessage(ofn.lpstrFile);

end;

 

 
Автор: Krid

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

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить