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

Вниз

Перенос значений переменных из одного Unit на доугой   Найти похожие ветки 

 
lexii   (2010-01-15 13:08) [0]

Привет!!! Получаю значение на одной TForm и нужно это значение перенести на другую TForm, но ни чего не получается. Подскажите как поправить мой код.
Вот мой код
Вызываю форму

procedure TForm1.Button2Click(Sender: TObject);
begin
form5.Show;
end;

вызванная форма

procedure TForm5.FormShow(Sender: TObject);
begin
s:=unit1.Pras;
for i:=1 to 16 do
begin
if s<StrToFloat(StringGrid1.Cells[1,i]) then begin
r:=StrToFloat(StringGrid1.Cells[1,i]);
label1.Caption:=FloatToStr(r);
break;
end;
end;
PostMessage(Handle, WM_CLOSE, 0, 0);
end;


 
stas ©   (2010-01-15 13:15) [1]

и где ошибка?
в модуле с 5-й формой unit1 прописан в uses?


 
lexii   (2010-01-15 13:21) [2]

Да прописано.
Вот полный код Формы 5
unit Unit5;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, Grids, StdCtrls;

type
 TForm5 = class(TForm)
   StringGrid1: TStringGrid;
   Label1: TLabel;
   Label2: TLabel;
   procedure FormShow(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form5: TForm5;
 
 implementation

uses Unit1;

{$R *.dfm}

procedure TForm5.FormShow(Sender: TObject);
var
s,r:real;i:integer;
begin
s:=unit1.Pras;
for i:=1 to 10 do
begin
if s<StrToFloat(StringGrid1.Cells[1,i]) then begin
r:=StrToFloat(StringGrid1.Cells[1,i]);
label1.Caption:=FloatToStr(r);
break;
end;
end;
label2.Caption:="123";
//PostMessage(Handle, WM_CLOSE, 0, 0);
end;
end.

а если строку s:=unit1.Pras; заменить на s:=1.2; то все работает


 
stas ©   (2010-01-15 13:26) [3]

А в Unit1 Pras это глобальная переменная или поле формы если поле формы , то нужно - Form1.Pras


 
lexii   (2010-01-15 13:39) [4]

глобальная.
вот код для unit1

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ComCtrls,Math, Menus;

type
 TForm1 = class(TForm)
   Button1: TButton;

procedure Button2Click(Sender: TObject);
private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 KPD,Pvih,Pras,Pdv:real;
i:integer;
implementation

uses Unit2, Unit4, Unit5, Unit6, Unit7;

{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
begin
form5.Show;
end;
end.


 
Медвежонок Пятачок ©   (2010-01-15 13:46) [5]

а может стоит уже прочитать что-нибудь про параметры процедур и функций и про вред глобальных переменных?


 
Медвежонок Пятачок ©   (2010-01-15 13:49) [6]

а если строку s:=unit1.Pras; заменить на s:=1.2; то все работает

а если добавить строку :
ShowMessage(FloatToStr("Вот что там сейчас реально находится: " + unit1.Pras));

то все станет более понятным


 
lexii   (2010-01-15 13:55) [7]


> а если добавить строку :
> ShowMessage(FloatToStr("Вот что там сейчас реально находится:
>  " + unit1.Pras));

там находится нужное число. а вот в цикле
for i:=1 to 10 do
begin
if s<StrToFloat(StringGrid1.Cells[1,i]) then begin
r:=StrToFloat(StringGrid1.Cells[1,i]);
label1.Caption:=FloatToStr(r);
break;
end;
end;

r=0 всегда получается


 
Медвежонок Пятачок ©   (2010-01-15 14:05) [8]

а f5 перед циклом и пошаговая триссировка с наблюдением значений в ячейках что дает?


 
lexii   (2010-01-15 14:09) [9]


> триссировка с наблюдением значений в ячейках что дает?
>

а как посмотреть занчения в ячейках при пошаговой?


 
Медвежонок Пятачок ©   (2010-01-15 14:10) [10]

r останется равным нулю, например если не сработает иф.

ты говоришь, что
а если строку s:=unit1.Pras; заменить на s:=1.2; то все работает

и тут же говоришь, что
там находится нужное число. а вот в цикле

чудеса-то только в решете бывают. В программах их нет.


 
Игорь Шевченко ©   (2010-01-15 14:14) [11]

Опять спамишь ? Думаешь, разные ники помогут ?


 
Медвежонок Пятачок ©   (2010-01-15 14:14) [12]

procedure TForm5.FormShow(Sender: TObject);
var s,r:real;i:integer;
begin
s:=unit1.Pras;
ShowMessage(FloatToStr(s));
for i:=1 to 10 do
 begin
  ShowMessage(Format("в ячейке %d лежит: %s ",[i,StringGrid1.Cells[1,i]]));
 if s<StrToFloat(StringGrid1.Cells[1,i]) then
   begin
     ShowMessage("я попал внутрь ифа");
     r:=StrToFloat(StringGrid1.Cells[1,i]);
     label1.Caption:=FloatToStr(r);
     break;
   end;
 end;
label2.Caption:="123";
end;

end.


 
lexii   (2010-01-15 14:15) [13]


> r останется равным нулю, например если не сработает иф.

А почему может  не срабатывает if? Условие s<StrToFloat(StringGrid1.Cells[1,i]) 100% выполняется при i=7.

> а если строку s:=unit1.Pras; заменить на s:=1.2; то все
> работает

если s:= любое число (например s:=2.4) то все нормально работает


 
Медвежонок Пятачок ©   (2010-01-15 14:16) [14]

А почему может  не срабатывает if? Условие s<StrToFloat(StringGrid1.Cells[1,i]) 100% выполняется при i=7.

кто сказал, что оно выпоняется?


 
Медвежонок Пятачок ©   (2010-01-15 14:17) [15]

оно и выполняется как положено.
но раз внутрь блока не заходит, значит s не меньше, а больше или равно


 
lexii   (2010-01-15 14:24) [16]

Все спасибо. Я сам виноват,признаю. Просто забыл число поделить на 1000



Страницы: 1 вся ветка

Текущий архив: 2010.03.21;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.011 c
2-1263813721
Анна
2010-01-18 14:22
2010.03.21
TTreeView с Check Boxes


1-1243255012
TStas
2009-05-25 16:36
2010.03.21
Как удалить файл в корзину?


2-1263888390
lewka
2010-01-19 11:06
2010.03.21
Взоимодействие программы Компас и Delphi


2-1263806738
Alex_h
2010-01-18 12:25
2010.03.21
Отчет Rave. Как разместить TDataMemo?


15-1262283412
Чечако
2009-12-31 21:16
2010.03.21
Как программировать в Делфи?