Автор: skinash
Дата сообщения: 20.08.2007 14:15
Maks150988
Короче, вот примерчик. Здесь OpenDialog не центрируется, а рисуется относительно верхнего левого угла вызывающей формы. Координаты указываются в rc-шаблоне.
Файл ресурсов myres.rc: [more]OFT DIALOG -1, 1, 304, 62
STYLE DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS
CAPTION ""
FONT 8, "MS Sans Serif"
{
CONTROL "Select Options", 100, "button", BS_GROUPBOX | WS_CHILD | WS_VISIBLE | WS_GROUP, 69, 4, 224, 52
CONTROL "CheckBox1", 101, "button", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 84, 19, 60, 12
CONTROL "CheckBox2", 102, "button", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 84, 38, 60, 12
}[/more]
Компилируется brcc32 myres.rc
Получается myres.res
Собственно код:
[more]
Код: unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, CommDlg;
type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
ofn: TOpenFileName;
f: array[0..MAX_PATH - 1] of Char;
implementation
{$R *.dfm}
{$R myres.res} // файл ресурсов с шаблоном
// 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 TForm2.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;
end.