Форум: "Начинающим";
Текущий архив: 2008.09.14;
Скачать: [xml.tar.bz2];
ВнизИспользование процедур Найти похожие ветки
← →
altatr © (2008-07-31 19:22) [0]Добрый день.
Можно ли такой код оформить в виде процедуры?
Как правильно это сделать?
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;
← →
Medbe}I{onok XML © (2008-07-31 19:23) [1]добавить слово procedure в самом верху
← →
Medbe}I{onok XML © (2008-07-31 19:23) [2]и еще ее имя и точку с запятой
← →
altatr © (2008-07-31 19:27) [3]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"
← →
Medbe}I{onok XML © (2008-07-31 19:29) [4]все верно.
← →
Medbe}I{onok XML © (2008-07-31 19:30) [5]лайбел это член класса. к нему только через экземпляр класса
← →
altatr © (2008-07-31 21:36) [6]Экземпляр класса можно создать?
Например для этого лейбла?
← →
Поросенок Винни-Пух © (2008-07-31 21:37) [7]например конкретно для этого лейбла экземпляр уже существует.
← →
altatr © (2008-07-31 22:29) [8]Для лейбела вот такая процедура работает:
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 22:32) [9]потому что а не меняется
← →
altatr © (2008-07-31 22:35) [10]но ведь а берет значение из Edit1
в Edit1 меняю числа а а остается прежним
← →
Поросенок Винни-Пух © (2008-07-31 22:37) [11]берет значение не а, а её локальная копия в qwert
← →
altatr © (2008-07-31 22:40) [12]ну хорошо - копия берет
а почему только один раз?
и почему такое число получается 4362080?
причем из любого числа прописанного для эдита
← →
Поросенок Винни-Пух © (2008-07-31 22:43) [13]а почему только один раз?
не один раз, а каждый раз.
← →
altatr © (2008-07-31 22:47) [14]добавил в процедуру строку
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:49) [15]твоя qwert никак не влияет на значение переменной а в TForm1.Button1Click.
Хоть миллион раз вызывай.
← →
altatr © (2008-07-31 23:04) [16]понятно...
сделала пока вот так вот:
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 23:06) [17]читать про var параметры процедур/функций
← →
Amoeba © (2008-07-31 23:07) [18]
> altatr © (31.07.08 23:04) [16]
a - это не переменная, а параметр-значение.
← →
altatr © (2008-07-31 23:37) [19]вот так!
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;
← →
altatr © (2008-08-01 08:42) [20]Всем спасибо за помощь.
Пойду применять полученные знания к большому коду.
← →
Anatoly Podgoretsky © (2008-08-01 09:26) [21]> altatr (31.07.2008 23:37:19) [19]
Label4.Caption := Form1.Edit1.Text;
← →
ЮЮ © (2008-08-01 09:43) [22]не нужна тебе здесь процедурв, сделай свой код методом формы и повыбрасывай отовсюду "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;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.09.14;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.062 c