Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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:= "&#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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.062 c
15-1216662669
Пробегал2....
2008-07-21 21:51
2008.09.14
HTML-элемент "checkbox"


2-1217575300
DeeNamid
2008-08-01 11:21
2008.09.14
Пинг


15-1216734281
VirEx
2008-07-22 17:44
2008.09.14
Дизайн детей (не дали договорить)


15-1216798715
axis_of_evil
2008-07-23 11:38
2008.09.14
на моей памяти этот вопрос задавали раз 5, но ..


2-1217714068
KilkennyCat
2008-08-03 01:54
2008.09.14
Где рисуется бордер компонента?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский