Подскажите пожалуйсто как пользоваться графиком Chart. И возможно ли связать StringGrid с этим графиком. Если можно то напишите хотябы примерно как это зделать!
Автор: Reptile 8.11.2006 14:25
Цитата
возможно ли связать StringGrid с этим графиком
Береш в цикле значения из StringGrid и вставляеш в
Вот пример заполнения графика: Создай Chart, добавь серию и
for i := 0 to 10 do begin Chart1.Series[0].AddXY(i,i*2,'Text',clRed); end;
Цитата
Declaration function AddXY(Const AXValue, AYValue: Double; Const AXLabel: String; AColor: TColor) : Longint; Description This function inserts a new point in the Series. The new point has X and Y values. The AXLabel parameter is optional (can be empty ''). The AColor parameter is optional (can be clTeeColor). The function returns the new point position in the Values list.
Автор: Mr.Dmitry 8.11.2006 19:59
Вот как я пытался написать
Код
Chart1.Series[0].AddXY(k,i,' ',clGreen)
где i это сумма элементов 1 столбца поля StringGrid
Вот какая ошибка появляеться
Код
[Error] Unit1.pas(43): Incompatible types: 'Double' and 'String'
Автор: Reptile 8.11.2006 22:59
Ты не правильно настроил Chart, а точнее выбрал не подходящий график. Добавь серию Line, убери 3D. Если не получится покажи код.
Автор: Mr.Dmitry 9.11.2006 1:12
Цитата(Reptile @ 8.11.2006 18:59)
Ты не правильно настроил Chart, а точнее выбрал не подходящий график. Добавь серию Line, убери 3D. Если не получится покажи код.
Даже если я пытаюсь выводить не сумму в линейном графике без 3д все равно не пашет!! ( пофигу на сумму можно хотябы графически вивыести хотябы один эелемент
вот код:
Код
for k:=1 to 10 do Chart1.Series[0].AddXY(k,Form1.StringGrid1.Cells[8,1],' ',clREd);
Так тош не катит ((
Вобщем мне нужно зделать вот что! Отобразить на этом графике как изменялись ячейки 7 и 8 столбцов поля стринг грид (тоесть увеличивылись или нет) вот!
type TForm1 = class(TForm) StringGrid1: TStringGrid; Chart1: TChart; Button1: TButton; Series1: TLineSeries; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); var k : Integer; begin for k := 1 to 7 do Chart1.Series[0].AddXY(k,StrToFloat(Form1.StringGrid1.Cells[k,1]),' ',clREd); end;
end.
Вот скрин
P.S. Дробные числа должны быть через запятую "4,231".
Автор: мисс_граффити 9.11.2006 23:22
Цитата(Reptile @ 9.11.2006 19:03)
P.S. Дробные числа должны быть через запятую "4,231".
Дробные числа должны быть через указанный в Панель инструментов->Языки и региональные стандарты разделитель. У тебя там ",", а у кого-то точка.
Кстати, при "вылазении" за пределы стринггрида была бы Access Violation Error, а не Convert Error.
График я пытался построить по примеру Reptile Вот он:
Код
var i:Integer; bez : Integer; begin Chart1.Series[0].Clear; for i := 1 to StringGrid1.RowCount-1 do begin bez := 0; bez := bez + StrToInt(StringGrid1.Cells[7,i]); // это я так понимаю сумма элементов нужного столбца Chart1.Series[0].AddXY(i,bez,'',clRed); end; end;
столбец по которому я строю график имеет тип Real.
Автор: Reptile 13.11.2006 15:09
Вообще не знаю как Ты хотел чтобы этот код работал???
for i := 1 to StringGrid1.RowCount-1 do begin bez := 0; bez := bez + StrToInt(StringGrid1.Cells[7,i]); // это я так понимаю сумма элементов нужного столбца Chart1.Series[0].AddXY(i,bez,'',clRed); end;
1.Переменную суммы нужно обнулять не в теле цыкла, иначе в bez Ты просто получаеш текущий элемент. 2.Если тип Real пиши
bez := bez + StrToFloat(StringGrid1.Cells[7,i]);
Если нужно вывести сумму элементов только одного столбца то:
Chart1.Series[0].Clear; bez := 0; for j := 1 to StringGrid1.RowCount-1 do begin bez := bez + StrToFloat(StringGrid1.Cells[7,j]);//подсчитываем сумму элементов end; Chart1.Series[0].AddXY(1,bez,' ',clRed);//Выводим один столбец с суммой
Если снова вылезет
Цитата
Project Project1.exe raised exeption Class EconvertError With Message "' is not a valid Floating value Process stoped .Use Step or run to continue
то
Цитата
Дробные числа должны быть через указанный в Панель инструментов->Языки и региональные стандарты разделитель.
Автор: volvo 13.11.2006 16:04
Цитата
Если снова вылезет
вообще-то лучше сделать вот так:
for j := 1 to StringGrid1.RowCount-1 do begin bez := bez + StrToFloat( StringReplace( StringReplace(StringGrid1.Cells[7, j], '.', DecimalSeparator, [rfReplaceAll]), ',', DecimalSeparator, [rfReplaceAll] ) // подсчитываем сумму элементов
); // Независимо от того, точка или запятая стоит в StringGrid end;
, чем заставлять пользователя вводить данные заново...
Автор: Mr.Dmitry 13.11.2006 16:30
Все равно не рабоатет (((
Project Project1.exe raised exeption Class EconvertError With Message "' is not a valid Floating value Process stoped .Use Step or run to continue
Автор: volvo 13.11.2006 16:35
Скриншот, в котором видно StringGrid с данными, выдающими этот Exception приведи... Что ты там в него понабросал, интересно?
Автор: Mr.Dmitry 13.11.2006 23:46
Цитата(volvo @ 13.11.2006 12:35)
Скриншот, в котором видно StringGrid с данными, выдающими этот Exception приведи... Что ты там в него понабросал, интересно?
Вот вся задача полностью! [attachmentid=4252]
Автор: volvo 14.11.2006 1:58
Да не интересует меня полностью проект! Я просил привести снимок экрана с теми ДАННЫМИ, которые ты вводишь, и у тебя возникает исключение. Неужели не понятно, что если я введу правильные данные, зная, какой DecimalSeparator у меня установлен, то ни о каком исключении не может быть и речи?
Ну, как хочешь... Я предложил тебе помощь - ты отказался, дело твоё...
Автор: Mr.Dmitry 14.11.2006 18:19
Цитата(volvo @ 13.11.2006 21:58)
Да не интересует меня полностью проект! Я просил привести снимок экрана с теми ДАННЫМИ, которые ты вводишь, и у тебя возникает исключение. Неужели не понятно, что если я введу правильные данные, зная, какой DecimalSeparator у меня установлен, то ни о каком исключении не может быть и речи?
Ну, как хочешь... Я предложил тебе помощь - ты отказался, дело твоё...
Просто я не смог вставить скрин! при попытки добавить не че не происходло и щас не происходит! вот я и выложил весь проект!
Вот зделал с 10 раза появилось! Сорри 1.zip ( 12.2 килобайт )
Кол-во скачиваний: 449
Автор: Reptile 14.11.2006 19:52
Сбрось мне проект на мыло.
Автор: Reptile 15.11.2006 16:52
И так скажу сразу Твой подход очень НЕ хороший. 1. Ты вызываеш
Form6.Show;
Хотя отрисовку графика навешал на Create И вообще что за???
procedure Create
Удали ее! Сделай так на событие TForm6.FormShow
var Bez:Real; j:integer; begin Chart1.Visible := true; Chart1.Series[0].Clear; bez := 0; for j := 1 to Form1.StringGrid1.RowCount-1 do begin if not(Length(Form1.StringGrid1.Cells[7,j]) = 0) then //Если ячейка не пуста bez := bez + StrToFloat(Form1.StringGrid1.Cells[7,j]);//подсчитываем сумму элементов end; Chart1.Series[0].AddXY(1,bez,' ',clRed);//Выводим один столбец с суммой
2.1. В форме 2 переменная
stoimost:integer
Как Ты хочеш занести в нее дорби??? Смени на real. 2.2 В тойже форме советую на LabeledEdit3 навешать событие
procedure TForm2.LabeledEdit3KeyPress(Sender: TObject; var Key: Char); var Not_DESIMAL : string; begin if DecimalSeparator = ',' then Not_DESIMAL := '.' else Not_DESIMAL := ',';
if Key = Not_DESIMAL then Key := DecimalSeparator; if ((Key in ['0' .. '9']))OR(Key = DecimalSeparator) then begin if (Key = DecimalSeparator) AND (Pos(DecimalSeparator,(Sender AS TLabeledEdit).Text) > 0) then begin Key := Chr(0); end; end else if (Key=Chr(VK_RETURN))OR (Key=Chr(VK_BACK)) then begin
end else Key := Chr(0); end;
Тогда пользователь не сможет вводить в это поле ничего кроме цыфр, а разделитель будет ставится автоматически такой, кокой стоит в системе пользователя. И такой же код сделай на остальные TLabeledEdit в которых не должно быть букв, напр. кол. покупок
begin if not(Key in ['0' .. '9']) then begin Key := Chr(0); end; end else if (Key=Chr(VK_RETURN))OR (Key=Chr(VK_BACK)) then begin end else Key := Chr(0); end;
3. Измени вид графика из Line на Bar и убери 3D. P.S. Само решение проблемы мне не понравилось , при первом запуске уже номер записи = 5, после ввода 1-ой записи появилась куча строк зачем??? а номер записи уже 6??? Позволяет редактировать если выбрать пустую строку и тд и тп. Но это не мое дело. Чем смог, тем помог. Работы у Тебя еще много , так что дерзай P.S.S. Сперва реши проблему с вводом чисел, а потом решай проблему сохранения в файл.
Автор: Mr.Dmitry 15.11.2006 21:24
Спасибо чел! п насчет сохронения фалов я знаю! раньше все работало а щас глюк какойто! stoimost я описал как integer ради эксперемента! все остальное учту! спасибо!