![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
собственно сабж. можно ли както при последующем открытии опендиалога сделать чтоб по умолчанию был выделен последний открытый им файл? а то надо открывать файлы из папки с большой кучей файлов,и каждый раз пролистывать ОД к нужному файлу,при этом надо еще визуально найти этот файл..долговато получается
|
|
#2
|
||||
|
||||
|
Указывать его до открытия OpenDialog-а.
|
|
#3
|
|||
|
|||
|
Цитата:
|
|
#4
|
||||
|
||||
|
Если OnSelectionChange не поможет, тогда нужно перехватить WndProc контрола, а именно сообщение WM_INITDIALOG. Дать отработать родному обработчику, а затем выделить нужный пункт.
|
|
#5
|
|||
|
|||
|
Цитата:
нельзя ли пожалуйста поподробнее,что прописывать в OnSelectionChange ? |
|
#6
|
||||
|
||||
|
Попробуй такой код:
Код:
procedure TForm1.ODSelectionChange(Sender: TObject);
var
wnd, lv : HWND;
I : Integer;
ClassName : array[0..MAX_PATH + 1] of Char;
function IndexOf : Integer;
var
Info : TLVFindInfo;
begin
with Info do
begin
flags := LVFI_STRING or LVFI_PARTIAL;
psz := PChar(ChangeFileExt(ExtractFileName(OD.FileName), ''));
end;
Result := ListView_FindItem(lv, -1, Info);
end;
begin
if (OD.FileName <> '') and (ExtractFileName(OD.FileName) <> '') then
begin
wnd := GetWindow(GetParent(OD.Handle), GW_CHILD);
while wnd > 0 do
begin
GetClassName(wnd, ClassName, MAX_PATH);
if ClassName = 'SHELLDLL_DefView' then
Break;
wnd := GetWindow(wnd, GW_HWNDNEXT);
end;
lv := GetWindow(wnd, GW_CHILD);
I := IndexOf;
if (lv <> 0) and (I >= 0) then
begin
ListView_EnsureVisible(lv, I, True);
ListView_SetItemState(lv, I, LVIS_SELECTED, LVIS_SELECTED);
ListView_SetItemState(lv, I, LVIS_FOCUSED, LVIS_FOCUSED);
Windows.SetFocus(lv);
end;
end;
end; |