Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.07.2010, 19:27
sol1tary sol1tary вне форума
Прохожий
 
Регистрация: 25.07.2010
Сообщения: 2
Репутация: 10
Печаль Excel и график

Добрый вечер , дали задание по вычислительной практике в институте , суть одного из заданий :
1.Есть таблица швейцарских эфемерид( то есть координаты планет в зависимости от даты)
2.Через среду Delphi 7 нарисовать график движения Солнца и Венеры( зависимость даты от координаты) , данные брать из таблицы

Только начал программировать на делфи, поэтому не в зуб ногой в этом, пытался через ms access ,не получилось

компонент Tchart добавил на форму, а дальше что делать не знаю , помогите плз
Вложения
Тип файла: rar ephe_absol.rar (59.3 Кбайт, 0 просмотров)
Ответить с цитированием
  #2  
Старый 25.07.2010, 20:34
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,097
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Боюсь, TChart тут не поможет. Надо будет рисовать самому.
Бери TPaintBox и в нем методами канвы рисуй.
Ответить с цитированием
  #3  
Старый 25.07.2010, 21:03
windaws windaws вне форума
Начинающий
 
Регистрация: 28.08.2009
Сообщения: 116
Репутация: 10
По умолчанию

А что если попробывать написать запрос и через компонент TDBChart вывести график по данным?
Ответить с цитированием
  #4  
Старый 25.07.2010, 22:04
sol1tary sol1tary вне форума
Прохожий
 
Регистрация: 25.07.2010
Сообщения: 2
Репутация: 10
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject );
  var
      Exc, Workbook: oleVariant;
      i: integer;
      checkM, checkS: integer;
      wb : olevariant;
      savechanges: olevariant;
      x,y:integer;

begin

  Exc := CreateOleObject('Excel.Application');
  Exc.visible := true;
  wb:= Exc.Workbooks.Open[fname, 0, true];

  i:=2;
  checkM:=1;
  checkS:=1;

  while Exc.activesheet.cells.item[i, 1].value <> StartP2.Date do
       i:=i+1;
  while Exc.activesheet.cells.item[i, 1].value <> EndP2.Date do
       begin
       case checkM of
           1: Exc.activesheet.cells.item[i, 4].value := Exc.activesheet.cells.item[i, 4].value + '0';
           2: Exc.activesheet.cells.item[i, 4].value :=Exc.activesheet.cells.item[i, 4].value + '360';
           3: Exc.activesheet.cells.item[i, 4].value :=Exc.activesheet.cells.item[i, 4].value+ '720';
           4: Exc.activesheet.cells.item[i, 4].value :=Exc.activesheet.cells.item[i, 4].value+ '1080';
           5: Exc.activesheet.cells.item[i, 4].value :=Exc.activesheet.cells.item[i, 4].value+ '1440';
           6: Exc.activesheet.cells.item[i, 4].value :=Exc.activesheet.cells.item[i, 4].value+ '1800';
           end;
         x:=StrToInt(Exc.activesheet.cells.item[i, 4].value);
         y:=StrToInt(Exc.activesheet.cells.item[i, 1].value);
         Grafik.SeriesList[0].AddXY(x,y);
       If ((Exc.activesheet.cells.item[i, 4].value > '359') and (Exc.activesheet.cells.item[i, 4].value < '360' ))
       and ((Exc.activesheet.cells.item[i+1, 4].value > '0') and (Exc.activesheet.cells.item[i+1, 4].value < '1'))
       then
           checkM:= checkM+1
       else
           If ((Exc.activesheet.cells.item[i+1, 4].value > '359')and (Exc.activesheet.cells.item[i+1, 4].value < '360' ))
           and ((Exc.activesheet.cells.item[i, 4].value > '0') and (Exc.activesheet.cells.item[i, 4].value < '1'))
           then
           checkM:=checkM-1;

       case checkS of
           1: Exc.activesheet.cells.item[i, 2].value :=Exc.activesheet.cells.item[i, 2].value+0;
           2: Exc.activesheet.cells.item[i, 2].value :=Exc.activesheet.cells.item[i, 2].value;
           3: Exc.activesheet.cells.item[i, 2].value :=Exc.activesheet.cells.item[i, 2].value;
           4: Exc.activesheet.cells.item[i, 2].value :=Exc.activesheet.cells.item[i, 2].value;
           5: Exc.activesheet.cells.item[i, 2].value :=Exc.activesheet.cells.item[i, 2].value;
           6: Exc.activesheet.cells.item[i, 2].value :=Exc.activesheet.cells.item[i, 2].value;
           end;
       Grafik.SeriesList[1].AddXY(Exc.activesheet.cells.item[i, 2].value,Exc.activesheet.cells.item[i, 1].value);
       If ((Exc.activesheet.cells.item[i, 2].value > 359) and (Exc.activesheet.cells.item[i, 2].value < 360 ))
       and ((Exc.activesheet.cells.item[i+1, 2].value > 0) and (Exc.activesheet.cells.item[i+1, 2].value < 1))
       then
           checkS:= checkS+1
       else
           If ((Exc.activesheet.cells.item[i+1, 2].value > 359)and (Exc.activesheet.cells.item[i+1, 2].value < 360 ))
           and ((Exc.activesheet.cells.item[i, 2].value > 0) and (Exc.activesheet.cells.item[i, 2].value < 1))
           then
           checkS:=checkS-1;
       i:=i+1;
       end;

  //wb.close(savechanges := true);
  //exc.quit;
  //Exc.ActiveWorkbook.Close;
  //Exc.Application.Quit;
end;

по этому коду, он открывает файл эксель , потом пишет ошибку "raised exception class 'EOle error 800A01A8' и подсвечивает строку "while Exc.activesheet.cells.item[i, 1].value <> StartP2.Date do"
Ответить с цитированием
  #5  
Старый 26.07.2010, 10:13
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию

Цитата:
while Exc.activesheet.cells.item[i, 1].value <> StartP2.Date do
Если нужен доступ к ячейкам активного листа, то достаточно :

Exc.activesheet.cells[i, 1].value
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:50.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025