![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Использование процедур
altatr © (2008-07-31 19:22:00)Добрый день.
Можно ли такой код оформить в виде процедуры?
Как правильно это сделать?
var
s,v,p,vhod: real;
begin
Label4.Caption:='0';
s:=0;
p:=0;
vhod := 0;
with form1.Query1 do begin
Close;
SQL.Clear;
SQL.Add('SELECT NLCH, YMCODE, DBIN, PAY, RITOG, SITOG');
SQL.Add('FROM ":Plat:h.dbf"');
SQL.Add('WHERE');
SQL.Add('(NLCH = "'+ Table2.FieldByName('NLCH').AsString +'") ');
SQL.Add('ORDER BY YMCODE');
Open;
end;
Query1.first;
while (Query1.FieldByName ('YMCODE').asString Edit12.Text) do begin
vhod:=Query1.FieldByName('pay').asFloat;
s:=s + Query1.FieldByName('PAY').asFloat;
Query1.Next;
end ;
v:=Query1.FieldByName('DBIN').AsFloat;
Edit6.Text:=FloatToStr(v);
Edit1.Text:= FloatToStr(Query1.FieldByName('DBIN').AsFloat + Query1.FieldByName('SITOG').AsFloat);
with form1.Query2 do begin
Close;
SQL.Clear;
SQL.Add('SELECT NLCH, ITOG, OPLAT');
SQL.Add('FROM ":Plat:pay'+IntTostr(StrToInt(Edit12.Text)-1)+'.dbf"');
SQL.Add('WHERE');
SQL.Add('(NLCH = "'+ Table2.FieldByName('NLCH').AsString +'") ');
Open;
end;
if Query2.RecordCount 0 then Edit9.Text:= FloatToStr(Query2.FieldByName('ITOG').AsFloat - Query2.FieldByName('OPLAT').AsFloat) else Edit9.Text:='0';
Table3.First;
while (Table2.FieldByName ('CODH').asString Table3.FieldByName ('CODH').asString) and (table3.Eof true) do table3.Next;
Table5.First;
while (DBGrid1.Fields[0].AsString Table5.FieldByName ('NLCH').asString) and (table5.Eof true) do table5.Next;
if (vhod = 0) and (v > 0) then p:=round(v*30.5*0.03)/100;
Edit2.Text:=FloatToStr(s);
Edit7.Text:= Table5.FieldByName('D5').AsString;
Edit8.Text:= FloatToStr(Table5.FieldByName('D6').AsFloat + Table5.FieldByName('D10').AsFloat);
Edit5.Text:= Table5.FieldByName('D7').AsString;
Label13.Caption:= 'Çàïèñü ' + IntToStr(Table2.RecNo) + ' èç ' + IntToStr(Table2.RecordCount);
Edit4.Text:=FloatToStr(p);
end;
ЮЮ (2008-08-01 09:43:00) [1]не нужна тебе здесь процедурв, сделай свой код методом формы и повыбрасывай отовсюду 'Form1.', ибо как регулярная процедура она не иммеет никакого смысла и нет от неё никакой пользы.
procedure TForm1.qwert(out a:integer);
begin
a:=StrToInt( Edit1.Text);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
a:integer ;
begin
qwert(a);
Label4.Caption:=IntToStr(a);
end;
Anatoly Podgoretsky (2008-08-01 09:26:00) [2]> altatr (31.07.2008 23:37:19) [19]
Label4.Caption := Form1.Edit1.Text;
altatr (2008-08-01 08:42:00) [3]Всем спасибо за помощь.
Пойду применять полученные знания к большому коду.
altatr (2008-07-31 23:37:00) [4]вот так!
procedure qwert(out a:integer);
begin
a:=StrToInt(Form1.Edit1.Text);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
a:integer ;
begin
qwert(a);
Label4.Caption:=IntToStr(a);
end;
Amoeba (2008-07-31 23:07:00) [5]
> altatr © (31.07.08 23:04) [16]
a- это не переменная, а параметр-значение.
Поросенок Винни-Пух (2008-07-31 23:06:00) [6]читать про var параметры процедур/функций
altatr (2008-07-31 23:04:00) [7]понятно...
сделала пока вот так вот:
procedure qwert(a:integer);
begin
a:=StrToInt(Form1.Edit1.Text);
form1.label1.Caption:=inttostr(a);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
a:integer ;
begin
qwert(a);
Label4.Caption:=label1.Caption;
end;
а как можно из кверта переменную а выдрать и присвоить ее значение комунибудь?
Поросенок Винни-Пух (2008-07-31 22:49:00) [8]твоя qwert никак не влияет на значение переменной а в TForm1.Button1Click.
Хоть миллион раз вызывай.
altatr (2008-07-31 22:47:00) [9]добавил в процедуру строку
procedure qwert(a:integer);
begin
a:=StrToInt(Form1.Edit1.Text);
form1.label1.Caption:=inttostr(a);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
a:integer ;
begin
qwert(a);
Label4.Caption:=IntToStr(a);
end;
лейбел1 показывает все правильно
а четвертый лейбл эту же хрень
получается а неправильно преобразовывается
Поросенок Винни-Пух (2008-07-31 22:43:00) [10]а почему только один раз?
не один раз, а каждый раз.
altatr (2008-07-31 22:40:00) [11]ну хорошо - копия берет
а почему только один раз?
и почему такое число получается 4362080?
причем из любого числа прописанного для эдита
Поросенок Винни-Пух (2008-07-31 22:37:00) [12]берет значение не а, а её локальная копия в qwert
altatr (2008-07-31 22:35:00) [13]но ведь а берет значение из Edit1
в Edit1 меняю числа а а остается прежним
Поросенок Винни-Пух (2008-07-31 22:32:00) [14]потому что а не меняется
altatr (2008-07-31 22:29:00) [15]Для лейбела вот такая процедура работает:
procedure qwert;
begin
Form1.Label4.Caption:='0';
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
qwert;
end;
а почему для вот здесь:
procedure qwert(a:integer);
begin
a:=StrToInt(Form1.Edit1.Text);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
a:integer ;
begin
qwert(a);
Label4.Caption:=IntToStr(a);
end;
получается одно и тоже число: 4362080
Поросенок Винни-Пух (2008-07-31 21:37:00) [16]например конкретно для этого лейбла экземпляр уже существует.
altatr (2008-07-31 21:36:00) [17]Экземпляр класса можно создать?
Например для этого лейбла?
Medbe}I{onok XML (2008-07-31 19:30:00) [18]лайбел это член класса. к нему только через экземпляр класса
Medbe}I{onok XML (2008-07-31 19:29:00) [19]все верно.
altatr (2008-07-31 19:27:00) [20]procedure poisk;
var
s,v,p,vhod: real;
begin
Table2.Next;
Label4.Caption:='0';
s:=0;
p:=0;
vhod := 0;
with form1.Query1 do begin
Close;
SQL.Clear;
SQL.Add('SELECT NLCH, YMCODE, DBIN, PAY, RITOG, SITOG');
SQL.Add('FROM ":Plat:h.dbf"');
SQL.Add('WHERE');
SQL.Add('(NLCH = "'+ Table2.FieldByName('NLCH').AsString +'") ');
SQL.Add('ORDER BY YMCODE');
Open;
end;
Query1.first;
while (Query1.FieldByName ('YMCODE').asString Edit12.Text) do begin
vhod:=Query1.FieldByName('pay').asFloat;
s:=s + Query1.FieldByName('PAY').asFloat;
Query1.Next;
end ;
v:=Query1.FieldByName('DBIN').AsFloat;
Edit6.Text:=FloatToStr(v);
Edit1.Text:= FloatToStr(Query1.FieldByName('DBIN').AsFloat + Query1.FieldByName('SITOG').AsFloat);
with form1.Query2 do begin
Close;
SQL.Clear;
SQL.Add('SELECT NLCH, ITOG, OPLAT');
SQL.Add('FROM ":Plat:pay'+IntTostr(StrToInt(Edit12.Text)-1)+'.dbf"');
SQL.Add('WHERE');
SQL.Add('(NLCH = "'+ Table2.FieldByName('NLCH').AsString +'") ');
Open;
end;
if Query2.RecordCount 0 then Edit9.Text:= FloatToStr(Query2.FieldByName('ITOG').AsFloat - Query2.FieldByName('OPLAT').AsFloat) else Edit9.Text:='0';
Table3.First;
while (Table2.FieldByName ('CODH').asString Table3.FieldByName ('CODH').asString) and (table3.Eof true) do table3.Next;
Table5.First;
while (DBGrid1.Fields[0].AsString Table5.FieldByName ('NLCH').asString) and (table5.Eof true) do table5.Next;
if (vhod = 0) and (v > 0) then p:=round(v*30.5*0.03)/100;
Edit2.Text:=FloatToStr(s);
Edit7.Text:= Table5.FieldByName('D5').AsString;
Edit8.Text:= FloatToStr(Table5.FieldByName('D6').AsFloat + Table5.FieldByName('D10').AsFloat);
Edit5.Text:= Table5.FieldByName('D7').AsString;
Label13.Caption:= 'Çàïèñü ' + IntToStr(Table2.RecNo) + ' èç ' + IntToStr(Table2.RecordCount);
Edit4.Text:=FloatToStr(p);
end;
Ругается: [Error] Unit1.pas(123): Undeclared identifier: 'Label4'