Программирование - это просто
Advertisement
Главная arrow Уроки программирования arrow Delphi - это просто! arrow Урок 8.5.2. Delphi 7: Создадим справочник товаров. Часть 2. Русские заголовки (TTable, FieldDefs).
11.08.2022 г.
Главное меню
Главная
Интернет магазин
Программные продукты
Биржевые роботы
Искусственный интеллект
Математика и информатика
1С:Предприятие
Уроки C#
Уроки Delphi
Уроки программирования
Web-программирование
Дизайн и графика
Компьютер для блондинок
Исходники
Статьи
Платный раздел
Рассказы про компьютеры
Хитрости и секреты
Системный подход
Размышления
Наука для чайников
Друзья сайта
Excel-это не сложно
Все о финансах
.
Урок 8.5.2. Delphi 7: Создадим справочник товаров. Часть 2. Русские заголовки (TTable, FieldDefs). Печать E-mail
Автор megabax   
22.10.2009 г.

Программирование баз данных в Delphi 7: Создадим справочник товаров. Часть 2. Русские заголовки (TTable, FieldDefs).

Сегодня мы продолжим создавать справочник товаров. (см. пред. урок).Если в первой части мы запрограммировали, что бы по команде меню "Справочники" -> "Товары"  у нас открывалась форма редактирования таблицы wares.db, то сегодня мы займемся самой формой редактирования таблицы базы данных, а именно, сделаем так, что бы заголовки были по русский.

И так создаем новый модуль*:

Русские заголовки (TTable, FieldDefs)

 

сохраняем его под именем StoreTypes.

В этом модуле мы разместим объявления структур, в которых будут храниться описание полей (их перевод на русский язык), а так же функция поиска соответствия английского и русского наименования поля. Вот полный текст модуля:

unit StoreTypes;

interface

type
    TFieldString=string[20];

    TFieldInfo=record
        Name:TFieldString;
        Caption:TFieldString;
    end;

    TFieldsArray=array of TFieldInfo;

function glFindFieldAsName(AFields:TFieldsArray; AName:TFieldString):TFieldString;

implementation

function glFindFieldAsName(AFields:TFieldsArray; AName:TFieldString):TFieldString;
var i:integer;
begin
  Result:='???';
  for i:=Low(AFields) to High(AFields) do if AFields[i].Name=AName then
  begin
    Result:=AFields[i].Caption;
    exit;
  end;
end;

end.

TFieldInfo - это у нас структура, где хранятся соответствия русский и английских наименований полей. Английской наименование (идентификатор) - это у нас переменная  Name - структуры TFieldInfo , а Caption - то, как название поля должно отобразиться на экране. TFieldsArray - это динамический массив, который мы заполним далее структурами TFieldInfo.  Функция glFindFieldAsName у нас ищет в массиве по заданному идентификатору русскоязычное соответствие. Поиск происходит путем тупого перебора. Если не находит, отображает "???".

Теперь пойдем дальше. И так, открываем форму через команду View Form*:

Русские заголовки (TTable, FieldDefs)

В списке формы выберем frmTableView*:

Русские заголовки (TTable, FieldDefs)

Теперь перепишем метод OpenTable класса TfrmTableView. Во первых, теперь у нас измениться его определение, добавиться новый параметр:

procedure OpenTable(ATableName:string; AFields:TFieldsArray);

Во вторых, нам еще надо добавить в раздел uses имя созданного нами модуля (выделено красным):

uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, Grids, DBGrids, DB, DBTables, ExtCtrls, DBCtrls, StoreTypes;

И, наконец, перейдем непосредственно к коду метода OpenTable :

procedure TfrmTableView.OpenTable(ATableName:string; AFields:TFieldsArray);
var i,cn:integer;
begin
    tbView.Active:=false;
    tbView.TableName:=ATableName;
    cn:=tbView.FieldDefs.Count-1;
    tbView.Active:=true;
    for i:=0 to cn do dbgView.Columns[i].Title.Caption:=glFindFieldAsName(AFields, dbgView.Columns[i].FieldName);
   Show;
end;
 

В данной процедуре, мы, кроме того, что переоткрываем таблицу и открываем форму для просмотра, еще и меняем заголовку столбцов в компоненте TDBGrid. Делаем мы это так же в цикле, перебирая все столбцы.

А вот дальше мы будем дорабатывать основной модуль программы. Для того, что бы добраться до него, открываем форму frmStoreForm и переключаемся на ее модуль, нажав "Toggle form / Unit"*

Русские заголовки (TTable, FieldDefs)

Во первых, в секцию private класса TfrmStoreForm добавим определение:

 WaresFields:TFieldsArray;

Во вторых, следует помнить о том, что если мы используем типы, переменные, процедуры, функции или что либо другое из созданного ранее модуля, то нужно добавить его имя в секцию uses. В данном случае нам надо добавить StoreTypes.

Во первых, нам надо слегка доработать процедуру CreateMDIChild, вот как она будет выглядеть теперь:

procedure TfrmStoreForm.CreateMDIChild(const Name: string; AFields:TFieldsArray);
var
     Child: TfrmTableView;
begin
    { create a new MDI child window }
    Child := TfrmTableView.Create(Application);
    Child.Caption := Name;
    if FileExists(Name) then Child.OpenTable(Name, AFields);
end;

В содержимое процедуры FileNew1Execute закомментим или удалим:

procedure TfrmStoreForm.FileNew1Execute(Sender: TObject);
begin
   //CreateMDIChild('NONAME' + IntToStr(MDIChildCount + 1));
end;

аналогичные действия совершим с процедурой acFileOpenExecute.

И, наконец, создадим обработчик события FormCreate нашей формы, в которой мы создадим массив соответствий русскийх и латинских наименований:

procedure TfrmStoreForm.FormCreate(Sender: TObject);
begin
    SetLength(WaresFields, 3);

   WaresFields[0].Name:='Id';
   WaresFields[0].Caption:='Код';

   WaresFields[1].Name:='Name';
   WaresFields[1].Caption:='Товар';

   WaresFields[2].Name:='Price';
   WaresFields[2].Caption:='Цена';
end;

Вот такую картинку мы увидим, когда запустим программу:

Русские заголовки (TTable, FieldDefs)


Скриншоты, помеченные знаком * , являются цитатами и иллюстрациями   программного продукта "Delphi", авторское право на который принадлежит "Borland Software Corporation".


 

Последнее обновление ( 06.11.2011 г. )
 
« След.   Пред. »
 
© 2022 Программирование - это просто
Joomla! - свободное программное обеспечение, распространяемое по лицензии GNU/GPL.
Русская локализация © 2005-2008 Joom.Ru - Русский Дом Joomla!
Design by Mamboteam.com | Powered by Mambobanner.de
Я принимаю Яндекс.Деньги