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

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

Перенос значений переменных из одного Unit на доугой [D7, XP]


lexii ©   (2010-01-15 13:08:00) 

Привет!!! Получаю значение на одной 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;


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

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


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

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


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

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

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


lexii   (2010-01-15 14:15:00) [4]


> 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:14:00) [5]

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


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

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.


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

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

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

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

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


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


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

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


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

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


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


> а если добавить строку :
> 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 13:49:00) [11]

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

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

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


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

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


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

глобальная.
вот код для 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.


stas   (2010-01-15 13:26:00) [14]

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


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

Да прописано.
Вот полный код Формы 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:15:00) [16]

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


Наверх

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