|
Вопрос # 4 863/ вопрос решён / |
|
Здравствуйте, Уважаемые Эксперты!
нахожусь в некотором тупике.
есть код:
но где то в глубине души я понимаю, что это "киськин бред". а как его к нормальному виду привести, ума не приложу. нашёл способ с Case of
и вроде всё устраивает, кроме того, что через ту функцию выводится только один результат, а у меня их может быть несколько, и все они должны выводиться в SG.
Приложение: Переключить в обычный режим- if L15>0 then
- begin
-
-
- if Row+1=RowCount then
- RowCount:=RowCount+1;
- Row:=Row+1;
- end;
- if L18>0 then begin
-
-
- if Row+1=RowCount then
- RowCount:=RowCount+1;
- Row:=Row+1;
- end;
- if L30>0 then begin
-
-
- if Row+1=RowCount then
- RowCount:=RowCount+1;
- Row:=Row+1;
-
- ____________________________________________________________
-
- var memory,L18,Cena:integer;
- Lamp:String;
- begin
- if StrToInt(E1.Text)>0 then
- begin
- memory:=0;
- L18:=18;
- Cena:=10;
- Lamp:='18w';
- end;
- if StrToInt(E2.Text)>0 then
- begin
- memory:=0;
- L18:=2;
- Cena:=2;
- Lamp:='111111';
- end;
- case memory of
- 0: with SG do
- begin
-
-
- if Row+1=RowCount then
- RowCount:=RowCount+1;
- Row:=Row+1;
- end;
- 1: with SG do
- begin
-
-
- if Row+1=RowCount then
- RowCount:=RowCount+1;
- Row:=Row+1;
- end;
- end;
- end;
Примечание #1 (25 декабря 2010, 21:42): решение можно сразу не писать, "пните" в нужную сторону.
 |
Вопрос задал: Ham_ele_on (статус: Посетитель)
Вопрос отправлен: 25 декабря 2010, 21:39
Состояние вопроса: решён, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 6; последнее сообщение — 26 декабря 2010, 12:36; участников в обсуждении: 3.
|
Вадим К (статус: Академик), 25 декабря 2010, 23:21 [#1]:
Посмотрите внимательно на такой кусок кода
if L18>0 then begin
Cells[0,SG.Row]:='18w(600мм)'; Cells[1,SG.Row]:=IntToStr(L18)+'шт.';
Cells[2,SG.Row]:=FloatToStr(ArElektrika[0,1])+'р.';Cells[3,SG.Row]:=FloatToStr(L18*ArElektrika[0,1])+' р.';
if Row+1=RowCount then
RowCount:=RowCount+1;
Row:=Row+1;
end;
он повторяется много раз. А это значит, что его можно вынести в процедуру.
Делаем метод класса формы приблизительно такой
procedure TForm1.DoSomth(paramL:integer; strk;string; k:integer;);
begin
if paramL>0 then begin
Cells[0,SG.Row]:=strk;
Cells[1,SG.Row]:=IntToStr(paramL)+'шт.';
Cells[2,SG.Row]:=FloatToStr(ArElektrika[0,k])+'р.';
Cells[3,SG.Row]:=FloatToStr(paramL*ArElektrika[0,k])+' р.';
if Row+1=RowCount then
RowCount:=RowCount+1;
Row:=Row+1;
end;
end;
и теперь вот тот срашный код вверху до разделительной линии можно вызывать как:
DoSomth(L15, '15w(400мм)', 0);
DoSomth(L18, '18w(600мм)', 1);
DoSomth(L30, '30w(900мм)', 2);
Конечно, я не знаю, что за массив такой ArElektrika, может нужно будет сделать для него доступ или какие то другие телодвижения, но то, что часть кода станет чище - это точно.
А когда часть кода стала проще - можно увидеть и другие однотипные куски.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Ham_ele_on (статус: Посетитель), 26 декабря 2010, 07:47 [#2]:
вариант с процедурой я пробовал, но у меня не компилируется такая вещь, ошибки на несовместимости данных string-integer, не знает, что такое Cells и Row.
. procedure AddCells(L,Cena:integer; strk:string);
begin
if L>0 then begin
Cells[0,SG.Row]:=strk;
Cells[1,SG.Row]:=IntToStr(L)+\'шт.\';
Cells[2,SG.Row]:=FloatToStr(Cena)+\'р.\';
Cells[3,SG.Row]:=FloatToStr(L*Cena)+\' р.\';
if Row+1=RowCount then
RowCount:=RowCount+1;
Row:=Row+1;
end;
end;
|
|
min@y™ (статус: Доктор наук), 26 декабря 2010, 09:42 [#3]:
Цитата (Ham_ele_on):
вариант с процедурой я пробовал, но у меня не компилируется такая вещь, ошибки на несовместимости данных string-integer, не знает, что такое Cells и Row.
Тебе ж сказали:
Цитата (Вадим К):
Делаем метод класса формы
Читай внимательнее, что умные люди говорят.
procedure TForm1.AddCells(L,Cena:integer; strk:string);
begin
if L>0 then with SG do begin
Cells[0,SG.Row]:=strk;
Cells[1,SG.Row]:=IntToStr(L)+\'шт.\';
Cells[2,SG.Row]:=FloatToStr(Cena)+\'р.\';
Cells[3,SG.Row]:=FloatToStr(L*Cena)+\' р.\';
if Row+1=RowCount then
RowCount:=RowCount+1;
Row:=Row+1;
end;
end;
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Ham_ele_on (статус: Посетитель), 26 декабря 2010, 11:54 [#4]:
и вот тут видимо оооочень большой пробел в моих знаниях. как добавить метод?
|
|
min@y™ (статус: Доктор наук), 26 декабря 2010, 12:00 [#5]:
Цитата (Ham_ele_on):
как добавить метод?
В определении типа формы после private пишешь:
//...
private
procedure AddCells(L,Cena:integer; strk:string);
public
// ...
end;
Потом жми Ctrl+Shift+C.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Ham_ele_on (статус: Посетитель), 26 декабря 2010, 12:36 [#6]:
Ага, спасибо. разобрался.
|
17 января 2011, 09:54: Статус вопроса изменён на решённый (изменил автор вопроса — Ham_ele_on)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|