Форум: "Начинающим";
Текущий архив: 2010.03.21;
Скачать: [xml.tar.bz2];
ВнизПеренос значений переменных из одного 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]Да прописано.
Вот полный код Формы 5unit 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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.004 c