C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 14 - Изменение значений полей / BDE / Borland C++

Шаг 14 - Изменение значений полей

А сейчас мы попробуем состряпать форму в стиле "Мастера форм" MS Access. В этом нам очень помогут компоненты с вкладки Data Controls, а именно TDBEdit, TDBComboBox, TDbCheckBox, TDBNavigator. Пара минут упражнений с мышью, и имеем следующее:

14_1.gif (5217 b)

Теперь переходим к начинке системы. Бросаем объект 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 - некий суррогат панели задач, предоставляет быстрый доступ к окнам. Описанием его и редактора займемся в следующем шаге.

Если все делалось правильно, то должна получится такого рода формочка:

14_2.gif (9962 b)


| |
Автор Аванесов Самвел.
[AD]