Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2014, 17:19   #1
Лиза.А
 
Регистрация: 12.05.2014
Сообщений: 3
По умолчанию Программа "Таблица Менделеева" с помощью бд Aссess

Добрый день, нужна помощь
Нужно сделать программу "Таблица Менделеева" с помощью бд Aссess. Суть программы в том, чтобы она выводила информацию о каждом химическом элементе. Внешний вид программы должен быть как сама таблица Менделеева. У меня есть кое-какие соображения, а вот с Access-ом не представляю как сделать. Может у кого-нибудь есть идеи?
Лиза.А вне форума Ответить с цитированием
Старый 12.05.2014, 17:30   #2
Dark_Spirit
Форумчанин
 
Аватар для Dark_Spirit
 
Регистрация: 05.02.2009
Сообщений: 324
По умолчанию

как одна из идей:
1. в бд Aссess созхдайте таблицу и заполните её данными о химических елементах;
2. в программе попробуйте использовать грид, чтобы отобразить таблицу Менделеева.
Тяжело быть бестолковым.....
Dark_Spirit вне форума Ответить с цитированием
Старый 12.05.2014, 17:46   #3
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Дмитрий Иванович. фик знает сколько лет назад. закономерность в хаосе нашел. а вы не можете понять её...
совсем плохо
eval вне форума Ответить с цитированием
Старый 13.05.2014, 15:52   #4
superedward
Форумчанин
 
Аватар для superedward
 
Регистрация: 27.11.2012
Сообщений: 190
По умолчанию

Классический вид таблицы Менделеева будет очень трудоемко построить из БД в гриде. Лучше имхо поискать другой вид таблицы, более подходящий для реализации в гриде.
superedward вне форума Ответить с цитированием
Старый 13.05.2014, 17:12   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

В StringGrid, например, еще как можно. На примере одной ячейки и массива рекордов. В реальности вместо него информацию из базы брать
Код:
type TElementInfo = record
     Weight: Real;
     Col,Row,Number,Count: Smallint;
     Designation,Name: String;
     Electr: array of Byte;
     end;
var Infos: array of TElementInfo;

procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
begin
  for i:=0 to StringGrid.RowCount-1 do StringGrid.RowHeights[i]:=90;
  for i:=0 to StringGrid.ColCount-1 do StringGrid.ColWidths[i]:=90;
  StringGrid.Font.Name:='Arial';
  SetLength(Infos,1);
  Infos[0].Col:=0;
  Infos[0].Row:=0;
  Infos[0].Number:=79;
  Infos[0].Designation:='Au';
  Infos[0].Name:='золото';
  Infos[0].Weight:=196.9665;
  Infos[0].Count:=6;
  SetLength(Infos[0].Electr,6);
  Infos[0].Electr[0]:=2;
  Infos[0].Electr[1]:=8;
  Infos[0].Electr[2]:=18;
  Infos[0].Electr[3]:=32;
  Infos[0].Electr[4]:=18;
  Infos[0].Electr[5]:=1;
end;

procedure TForm1.StringGridDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var i,j: Integer;
    s: String;
    r: TRect;
    t: TSize;
begin
  for i:=Low(Infos) to High(Infos) do
    if (Infos[i].Col=ACol) and (Infos[i].Row=ARow) then begin
      StringGrid.Canvas.Font.Size:=6;
      t:=StringGrid.Canvas.TextExtent('99');
      for j:=0 to Infos[i].Count-1 do begin
        s:=IntToStr(Infos[i].Electr[j]);
        r:=Types.Rect(Rect.Left+2,Rect.Bottom-(j+1)*t.cy,Rect.Left+2+t.cx,Rect.Bottom-j*t.cy);
        DrawText(StringGrid.Canvas.Handle,PChar(s),Length(s),r,DT_RIGHT);
      end;
      StringGrid.Canvas.Font.Size:=10;
      StringGrid.Canvas.TextOut(Rect.Left+20,Rect.Top+2,IntToStr(Infos[i].Number));
      StringGrid.Canvas.Font.Size:=12;
      r:=Types.Rect(Rect.Right-60,Rect.Top+16,Rect.Right,Rect.Top+16+StringGrid.Canvas.TextHeight('9'));
      DrawText(StringGrid.Canvas.Handle,PChar(Infos[i].Designation),Length(Infos[i].Designation),r,DT_CENTER);
      StringGrid.Canvas.Font.Size:=8;
      r:=Types.Rect(Rect.Right-60,r.Bottom,Rect.Right,r.Bottom+StringGrid.Canvas.TextHeight('9'));
      s:=FormatFloat('#0.####',Infos[i].Weight);
      DrawText(StringGrid.Canvas.Handle,PChar(s),Length(s),r,DT_CENTER);
      r:=Types.Rect(Rect.Left+20,Rect.Bottom-StringGrid.Canvas.TextHeight('9'),Rect.Right-8,Rect.Bottom);
      DrawText(StringGrid.Canvas.Handle,PChar(Infos[i].Name),Length(Infos[i].Name),r,DT_RIGHT);
    end;
end;
Изображения
Тип файла: png Безымянный.PNG (5.9 Кб, 123 просмотров)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 13.05.2014, 17:41   #6
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

так оно и у Менделеева в гриде, чего тут еще выдумывать
eval вне форума Ответить с цитированием
Старый 13.05.2014, 19:01   #7
Лиза.А
 
Регистрация: 12.05.2014
Сообщений: 3
По умолчанию

http://rghost.ru/55129784
С помощью DBGrid сделать попробовала, вот что получилось. А как дальше?

Последний раз редактировалось Лиза.А; 13.05.2014 в 19:12.
Лиза.А вне форума Ответить с цитированием
Старый 13.05.2014, 19:06   #8
Лиза.А
 
Регистрация: 12.05.2014
Сообщений: 3
По умолчанию

а можно как-нибудь попроще?) я не так хорошо разбираюсь в Delphi)
а как с помощью StringGrid сделать так, как у вас на изображении?
Лиза.А вне форума Ответить с цитированием
Старый 13.05.2014, 19:31   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
а как с помощью StringGrid сделать так, как у вас на изображении?
А что выложено в #5? Если там не заметен способ отрисовки грида с таблицей Менделеева, то не стоит даже начинать этим заниматься Лучше сразу в фриланс за денежку
http://programmersforum.ru/forumdisplay.php?f=29
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Постоянно слетает галочка "автоматически" в "Параметры Excel", "Формулы", "Вычисления в книге" Alexsandrr Microsoft Office Excel 4 19.10.2013 14:22
Паскаль.Программа "Верификация", "Кака бригадиру разделить заработанные деньги?".Сложные Valik102 Паскаль, Turbo Pascal, PascalABC.NET 3 23.06.2009 09:11
Паскаль. 2 задачи (Программа "Верификация","КАК БРИГАДИРУ РАЗДЕЛИТЬ ЗАРОБОТАННЫЕ ДЕНЬГИ") Valik102 Помощь студентам 3 20.05.2009 20:42
если пользователь наберет какой-то другой символ не "y" или "n" и нажмет enter, программа проигнорирует skobets Общие вопросы C/C++ 2 03.06.2008 06:51