Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.09.14;
Скачать: CL | DM;

Вниз

Использование процедур   Найти похожие ветки 

 
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:= "&#199;&#224;&#239;&#232;&#241;&#252; " + IntToStr(Table2.RecNo) + " &#232;&#231; " + 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:= "&#199;&#224;&#239;&#232;&#241;&#252; " + IntToStr(Table2.RecNo) + " &#232;&#231; " + 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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.021 c
3-1204532945
Ega23
2008-03-03 11:29
2008.09.14
Добавить разом много записей.


4-1196339588
sergen
2007-11-29 15:33
2008.09.14
Нужен help


6-1193084081
Oleg
2007-10-23 00:14
2008.09.14
Проблема с работой сервера (TWSocket) в сервисе


15-1216662669
Пробегал2....
2008-07-21 21:51
2008.09.14
HTML-элемент "checkbox"


2-1217453505
Alex_Storm
2008-07-31 01:31
2008.09.14
Добавить строки в ListViev