Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Использование процедур


Страницы:   1 2

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'


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо