А сейчас мы попробуем состряпать форму в стиле "Мастера форм" MS Access. В этом нам очень помогут компоненты с вкладки Data Controls, а именно TDBEdit, TDBComboBox, TDbCheckBox, TDBNavigator. Пара минут упражнений с мышью, и имеем следующее:
Теперь переходим к начинке системы. Бросаем объект TDataSource туда же. Выбираем все уже брошенные компоненты (кроме само собой TDataSource), и ставим их DataSource = DataSource1. Просто оценивая ситуацию поверхностным взглядом, ясно, что чего-то не хватает... А, нужно еще обозначить, к каким полям таблицы имеет все это безобразие отношение. Так как design-time таблицу мы подключить по ясным причинам (разные формы) не можем, то самым наглым и вульгарным образом впечатываем в свойства DataField компонентов имена соответствующих полей.
Я реализовал свой вьювер в виде MDI-приложения, как это было заметно на предыдущих скриншотах. Напомню, что для MDI приложения одно окно (главное) должно иметь FormStyle = fsMDIForm, а все остальные принадлежащие клиентской области этого окна окна должны иметь FormStyle = fsMDIChild. Я настоятельно рекомендую все формы, кроме главной, создавать динамически (еще раз напомню, что это достигается путем мышиных махинаций на вкладке Forms меню Project->Options). У меня функция создания окон выглядит так:
TForm* TTextMain::AddChild(String fName,String caption) { TForm* child = NULL; if(fName=="BOOKLIST") child = new TBookList(this); if(fName=="EDITBOOK") child = new TEditBook(this); if(!child) { child = new TTextView(this); try { ((TTextView*)child)->Output->Lines->LoadFromFile(fName); } catch(...) { delete child; return 0; } } Pages->Tabs->AddObject(caption,child); Pages->TabIndex = Pages->Tabs->Count - 1; child->Caption = caption; child->Tag = Pages->Tabs->Count - 1; return child; }
Объясню суть. В программе-просмотрщике окна подразделяются на несколько типов - список книг (TDBGrid), редактор элементов таблицы (созданный только что) и в следующем шаге мы еще напишем список истории чтения. Соответственно fName - это имя файла с текстом книги. Если fName - некоторое предопределенное значение ("BOOKLIST" например), то создается вариант окна на эту тему, иначе открывается файл с книгой. Компонент TTabControl* Pages - некий суррогат панели задач, предоставляет быстрый доступ к окнам. Описанием его и редактора займемся в следующем шаге.
Если все делалось правильно, то должна получится такого рода формочка: