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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.07.2008, 17:06   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию Опять про гистограммму

Как мне сделать так чтобы StringGrid получал данные из Edit-а? При построении графика я хочу чтобы данные были получены из Edit-а. Или знает кто нибудь как сделать чтобы также StringGrid получал данные для построения из Label? Менять программу я не хочу. Хочу порсто сделать чтобы доанные были автоматически получены из Label или Edit. Заранее спасибо)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 14.07.2008, 11:00   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Например так:
Код:
StringGrid.Cell[0,0]:=Edit1.text
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.07.2008, 11:09   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Про Edit я понял. Спасибо). А как сделать чтобы из Label получал? И куда нужно прописать процедуру которую Вы написали выше?)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 14.07.2008, 11:16   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
как сделать чтобы из Label получал?
Код:
StringGrid.Cell[0,0]:=Label.caption
Цитата:
И куда нужно прописать процедуру которую Вы написали выше?)
Понятия не имею куда ты ее прописать хочешь.

И вообще
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.07.2008, 08:33   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Добрый день!) Это код программы, которая рисует гистограмму:
Код:
////////////////////////////////////////////////////////////////////////////////////////////////////////////
const
 NR = 4; //кол-во строк в таблице
var
k:integer;
  n:array[1..NR] of real; //значения категорий
  p:array[1..NR] of real; //процент категорий в общей сумме
  h:array[1..NR] of integer; //высота столбиков диаграммы

  //цвет столбиков диаграммы
  BarColor:array[1..4] of TColor = (clRed,clGreen,clBlue,clYellow);

  //ввод и обработка, если данные есть, то Obr = True
function Obr: Boolean;
var
 sum:real; //сумма категорий
 m:integer; //номер категорий, имеющей максимальное значение
 i:integer;
begin
 obr:=False;
   for i:=1 to NR do
    begin
     try n[i]:=StrToFloat(Form1.StringGrid1.Cells[1,i]);
     except
       on EConvertError do
       begin
        ShowMessage('Надо ввести данные во все' + #13 +
        'ячейки второй колонки');
        exit;
       end;
     end;
    end;
      sum:=0;
      for i:=1 to NR do
       sum:=sum + n[i];

      for i:=1 to NR do
       p[i]:=n[i] / sum;

      m:=1;
      for i:=2 to NR do
       if n[i] > n[m] then m:=i;

      for i:=1 to NR do
       h[i]:=Round((Form1.Image1.Height - 20)*n[i]/n[m]);
        obr:=true;
end;

procedure diagr;
const
 WR = 25; //ширина столбика
 DR = 10; //расстояние между столбиками
var
 x,y:integer; //левый нижний угол столбика
 i:integer;
begin
 with Form1.Image1 do
 begin
  x:=10;
  y:=Height;
  Canvas.Brush.Color:=clWindow;
  Canvas.Rectangle(0,0,Width,Height);
    for i:=1 to 4 do
    begin
     Canvas.Brush.Color:=BarColor[i];
     Canvas.Rectangle(x,y,x+WR,y-h[i]);
     Canvas.Brush.Color:=clWindow;
     Canvas.TextOut(x,y-h[i]-15,FloatToStrF(p[i]*100,ffGeneral,3,2)+'%');
     x:=x + WR + DR;
    end;

    x:=x+20;
    y:=20;
    for i:=1 to 4 do
    begin
     Canvas.Brush.Color:=barColor[i];
     Canvas.Rectangle(x,y,x+25,y+14);
     Canvas.Brush.Color:=clWindow;
     Canvas.TextOut(x+WR+10,y,Form1.StringGrid1.Cells[0,i]);
     y:=y+20;
    end;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   Font.Color:=clGreen;
   StringGrid1.Cells[0,0]:='Название';
   StringGrid1.Cells[1,0]:='Количество';
   StringGrid1.Width:=StringGrid1.ColWidths[0]+StringGrid1.ColWidths[1]+5;
   StringGrid1.Width:=StringGrid1.ColWidths[0]+StringGrid1.ColWidths[1]+5;

end;

procedure TForm1.Button158Click(Sender: TObject);
begin
  if Obr
    then diagr;
end;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

она рисует ее по данным, вводимым вручную в StringGrid.
А это процедура, с помощью которой можно сделать так чтобы гистограмма брала данные ид Label и строила по ним гистограмму:

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

StringGrid.Cell[0,0]:=Label.caption;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Моя цель: сделать так, чтобы формула рассчитала и выдала
ответ (это уже сделано) в Label, из которого бы StringGrid получив данные строил гистограмму, чтобы пользователь не вводил эти же данные вручную. Только вот я не знаю куда именно вставить эту процедуру., чтобы сработало((. Подскажите пожалуйста?) Работа а то приостановилась у меня.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось Stilet; 15.07.2008 в 09:39.
artemavd вне форума Ответить с цитированием
Старый 15.07.2008, 08:46   #6
Манжосов Денис :)
Участник клуба
 
Регистрация: 29.01.2008
Сообщений: 1,039
По умолчанию

Прости, но я не совсем вообще понял вопрос, (но это я) а воообще могу только кое-что исправить:

Надо по другому писать:
Код:
 procedure TForm1.FormCreate(Sender: TObject);
begin
 Font.Color:=clGreen;
  with StringGrid1 do
   begin
    Cells[0,0]:='Название';
    Cells[1,0]:='Количество';
    Width:=StringGrid1.ColWidths[0]+StringGrid1.ColWidths[1]+5;
    Width:=StringGrid1.ColWidths[0]+StringGrid1.ColWidths[1]+5;
   end;
end;
На подобии этого также остальное исправить.

А какую именно процедуру?

Последний раз редактировалось Stilet; 15.07.2008 в 09:39.
Манжосов Денис :) вне форума Ответить с цитированием
Старый 15.07.2008, 08:58   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Хорошо, я поясню ситуацию). Имеется таблица StrigGrid. Она состоит из двух столбцов. Первый это "Категория оценок", второй это "Количество". И первый и второй столбец состоит из четырех строк. В строки первого столбца вводятся названия оценок (пятерки, четверки и так далее), в строки второго столбца вводятся их количество. Но это вводится все вручную, а хочу чтобы когда пользователь закончит рассчет для каждого ученика индивидуально и после этого нажал на кнопку "Итого" (т.е для класса), то в StringGrid-е уже должны появиться данные из четырех разных Label-ов, т.е. в строки второго слобца и по ним уже должна строиться гистограмма. Вот мне и надо, чтобы эти данные уже сразу сами появились в StringGrid-е, чтобы их не вводит заново. А для этого мне надо вставить эту процедуру StringGrid.Cell[0,0]:=Label.caption; в тот код который я написал выше. А я не знаю куда имеенно((
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 15.07.2008, 09:11   #8
Манжосов Денис :)
Участник клуба
 
Регистрация: 29.01.2008
Сообщений: 1,039
По умолчанию

procedure TForm1.Button1Click(Sender: TObject);
begin

StringGrid1.Cells[2,1] := Label1.Caption;
StringGrid1.Cells[2,2] := Label1.Caption;
.....
StringGrid1.Cells[n,n] := LabelN.Caption;

end;

Ну так правильно или я опять не понял?

Последний раз редактировалось Манжосов Денис :); 15.07.2008 в 09:38.
Манжосов Денис :) вне форума Ответить с цитированием
Старый 15.07.2008, 10:15   #9
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Вроде правильно ты понял). Мне это надо просто в событие кнопки вставить и все? Я правильно понял, что [2,1] - 2 - это второй столбец, 1 - это номер первой строки; [2,2] - 2 - это второй столбец, 2 - это номер второй строки и так далее?). Если правильно, то он получит данные из Label-ла и построит по ним?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 15.07.2008, 10:22   #10
Манжосов Денис :)
Участник клуба
 
Регистрация: 29.01.2008
Сообщений: 1,039
По умолчанию

Ты ведь знаешь как выглядит Таблица? Там же первые ячейки черные, значит ведём отсчет от них. [0,0] - это первая ячейка, [2,2] - 3 столбец, 3 -номер третей строки. Построить должен правильно. Да, вставить в процедуру кнопки.
У тебя же там ещё есть две процедуры:
diagr, orb;
Ну тут дополни:

procedure TForm1.Button1Click(Sender: TObject);
begin

StringGrid1.Cells[2,1] := Label1.Caption;
StringGrid1.Cells[2,2] := Label1.Caption;
diagr;
orb;

end;

Последний раз редактировалось Манжосов Денис :); 15.07.2008 в 10:27.
Манжосов Денис :) вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
И опять мэйлы.. Опять... Pusher PHP 6 28.06.2008 03:08
И опять LookupComboBox Alex_666 БД в Delphi 1 02.06.2008 10:22
И опять boolean. dimple Помощь студентам 4 04.05.2008 14:03
Опять Chart BigBB Помощь студентам 32 29.04.2008 22:41