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

Да прописано.
Вот полный код Формы 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.004 c
2-1263977765
Неважно
2010-01-20 11:56
2010.03.21
CriticalSection


6-1214898330
OberonAR
2008-07-01 11:45
2010.03.21
WebBrowser и загрузка файла


4-1217942070
Rafa
2008-08-05 17:14
2010.03.21
Программирование устройства через COM-port


15-1262056626
товарищ икс
2009-12-29 06:17
2010.03.21
Младший бит на php


15-1262571775
uw
2010-01-04 05:22
2010.03.21
Что и требовалось доказать





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский