Работа организована на стандартных компонентах (TOpenDialog, TComboBox, TButton). TComboBox можно заменить TEdit, но тогда возможно отобразить только имя последнего открытого файла, в то время как ComboBox позволяет выбрать из списка.
Моменты связанные с сохранением списка имён открытых файлов здесь не рассматриваются.
Пример использования:

Ниже приведён код обработчика события OnClick для кнопки. Обозначения: dlgOpen: TOpenDialog (не забудьте добавить Dialogs в секцию Uses), CBFile:TComboBox.
procedure TForm1.btnOpenDlgClick(Sender: TObject);
var st: string;
begin
// dlgOpen.FilterIndex := 1; // устанавливаем фильтр если надо
if FileExists(CBFile.Text) then // если файл введенный в ComboBox существует
begin
// настраиваем OpenDialog по нему
dlgOpen.InitialDir := ExtractFilePath(CBFile.Text);
dlgOpen.FileName := CBFile.Text;
end
else
begin
// если файл не найден, то пытаемся установить имя директории из него
dlgOpen.FileName := '';
st := CBFile.Text;
// в цикле удаляем с конца строки текст, до момента нахождения такого пути на диске
while not ((DirectoryExists(st)) or (Length(st) = 3) or (st = '')) do
st := ExtractFileDir(st);
if not DirectoryExists(st) then st := '';
// если пути такого на диске нет, то указываем в качестве начального путь к программе
if st = '' then st := ExtractFilePath(Application.ExeName);
// указываем имя начальной директории для OpenDialog
dlgOpen.InitialDir := st;
end; // if
// Открываем OpenDialog. Если нажали OK - записываем имя файла в ComboBox
if dlgOpen.Execute then
CBFile.Text := dlgOpen.FileName;
end;
Алгоритм: если нашли файл введённый "руками" в ComboBox, то открываем диалог выбора файла с выбранным этим файлом, если не нашли выбираем ближайшую существующую на диске "родительскую" директорию и открываем диалог. Если пути введённого в ComboBox на диске нет, или ComboBox.Text пустой, то в качестве начальной директории используем путь к программе.
В список ComboBox я добавляю имя нового файла в момент начала работы с файлом. Это позволяет не сохранять пользовательские "блуждания" по диску. Сохранять рекомендую в INI-файлы (не зачем реестр Windows забивать своим хламом) - запись при закрытии окна, чтения при создании.
PS: знаю, что некоторые скажут, есть же библиотеки компонентов, в которых схожие функции реализованы, например, JVCL. Но мне кажется правильнее не использовать "сторонних" компонентов в приложениях, тем более в крупных, т.к. простая перекомпиляция на новом компьютере может занять у вас массу сил и времени.