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

Вниз

Как из фомы 1 передать занчение параметры в форму 2?   Найти похожие ветки 

 
vegarulez ©   (2006-04-18 09:05) [0]

привет мастерам!
Есть 2 формы, и 2 юнита, которые их описывают.
В 1-ом юните описал переменную n в public и в var как стринг...
Внимание вопрос ) : как в юните 2 обратится к переменной n из юнита 1...Где её надо описать, чтоб она доступна была.


 
balepa ©   (2006-04-18 09:06) [1]

В Unite2 подключи Unit1
И код приведи где ты их там понаобъявлял


 
Anatoly Podgoretsky ©   (2006-04-18 09:09) [2]

В interface


 
vegarulez ©   (2006-04-18 09:12) [3]

2 balepa ©   Типа в uses? подключил.

uses Unit2;

2 Anatoly Podgoretsky ©  :
т.е. в интерфейсе прописать
n: string; или как??? как он будет знать что с первого Unita значение брать?
Как будет знать что это глобальная переменная, которая во всех юнитах одна будет.


 
balepa ©   (2006-04-18 09:20) [4]

В секции interface к списку модулей допиши через запятую UNIT1
Книжки читай.


 
vegarulez ©   (2006-04-18 09:33) [5]

в интерфейсе прописал

interface

uses
 SysUtils, Types, Classes, Variants, QTypes, QGraphics, QControls, QForms,
 QDialogs, QStdCtrls, QComCtrls, QExtCtrls, Unit1;

но всёравно не берёт оттуда значение переменной...
Может её ещё где-то надо прописать?


 
balepa ©   (2006-04-18 09:38) [6]

А переменную прописал в секции public класса TForm1 ?


 
vegarulez ©   (2006-04-18 09:51) [7]

да прописал

Вот листинг:

=================

unit Unit1;

interface

uses
 SysUtils, Types, Classes, QGraphics, QControls, QForms, QDialogs,
 QStdCtrls;

type
 TForm1 = class(TForm)
   Edit1: TEdit;
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
 n: string;
   { Public declarations }
 end;

var
 Form1: TForm1;
 n: string;
implementation

uses Unit2;

{$R *.xfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
n:= edit1.Text;
form2.show;
end;

end.

________________________

unit Unit2;

interface

uses
 SysUtils, Types, Classes, QGraphics, QControls, QForms, QDialogs,
 QStdCtrls, unit1;

type
 TForm2 = class(TForm)
   Label1: TLabel;
   procedure FormCreate(Sender: TObject);
 private

   { Private declarations }
 public

   { Public declarations }
 end;

var
 Form2: TForm2;

implementation

{$R *.xfm}

procedure TForm2.FormCreate(Sender: TObject);
begin
if n="a" then
label1.Caption:="OK"
else
label1.Caption:="NO";
end;

end.

=======================


 
Anatoly Podgoretsky ©   (2006-04-18 10:06) [8]

В одном случае работаешь с полем, а в другом случае с переменной.


 
Ega23 ©   (2006-04-18 10:06) [9]

Всё не так.

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   Edit1: TEdit;
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   FaString: String;
   { Private declarations }
 public
   property aString:String Read FaString Write FaString;
 end;

var
 Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
aString:=Edit1.Text;
Application.CreateForm(TForm2, Form2);
try
  Form2.aString:=aString;
  Form2.ShowModal;
finally
  Form2.Free;
  Form2:=nil;
end;

end;

end.

//*******************************************************

unit Unit2;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
 TForm2 = class(TForm)
 private
   FaString: String;
   { Private declarations }
 public
   property aString:String Read FaString Write FaString;
 end;

var
 Form2: TForm2;

implementation

{$R *.DFM}

end.

//*********************************************************

program Project1;

uses
 Forms,
 Unit1 in "Unit1.pas" {Form1},
 Unit2 in "Unit2.pas" {Form2};

{$R *.RES}

begin
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.



 
Anatoly Podgoretsky ©   (2006-04-18 10:07) [10]

Не используй одинаковые имена, если не представляешь как это работает.


 
balepa ©   (2006-04-18 10:07) [11]

Удалено модератором


 
vegarulez ©   (2006-04-18 10:11) [12]

Удалено модератором


 
balepa ©   (2006-04-18 10:27) [13]

Удалено модератором


 
Ega23 ©   (2006-04-18 10:29) [14]

Моё мнение - обоих умников в РО отправить. Дня на 3. Дабы остыли.


 
balepa ©   (2006-04-18 10:35) [15]


> Ega23 ©   (18.04.06 10:29) [14]

Он первый начал.
Не надо нас в РО.
Извините если мое высказывание кого-то это оскорбило. Я был в состоянии аффекта. Больше не буду.


 
vovnuke ©   (2006-04-18 10:43) [16]

Вот это:

> Form2.aString:=aString;

правиьней было бы написать так (в данном случае):
Form2.aString:=FaString;


 
Ega23 ©   (2006-04-18 10:50) [17]


> правиьней было бы написать так (в данном случае):
> Form2.aString:=FaString;


Докажи.


 
vovnuke ©   (2006-04-18 11:08) [18]

доступ к полям объекта осуществляентся гораздо быстрее чем к к свойствам, таким образом внутри объекта следут использовать его поля (если это возможно).


 
Ega23 ©   (2006-04-18 11:19) [19]

В данном конкретном случае - наверное я с тобой соглашусь.
Но. В данном случае тогда и не нужно property, достаточно public-переменную объявить. А обычно пишется
private
FMyProp:TMyType;
function GetFMyProp:TMyType;
procedure SetFMyProp(Value:TMyType);

public
property MyProp : TMyType Read GetFMyProp Write SetFMyProp;


А впроцедуре и функции - уже логика. И этот способ более правильный. Ибо сейчас ты не хочешь никакой логики на запись/чтение поля навешивать - вот ты и обращаешься напрямую к полям. Но завтра тебе эта логика потребуется - и придётся не только декларацию чтения-записи поля менять, а ещё и весь код класса лопатить.


 
vovnuke ©   (2006-04-18 11:23) [20]

целиком и полностью согласен, поэтому и написаны уточнения в скобках.


 
Ega23 ©   (2006-04-18 11:25) [21]


> целиком и полностью согласен, поэтому и написаны уточнения
> в скобках.


Я к тому, что я бы всё равно не стал напрямую к полю обращаться, коль скоро оно в public-секции фигурирует. Пусть чуть дольше, зато потом будет проще, если исправлять придётся.


 
Сергей М. ©   (2006-04-18 11:28) [22]


> vovnuke ©   (18.04.06 11:08) [18]
> доступ к полям объекта осуществляентся гораздо быстрее чем
> к к свойствам


Если св-во объявлено как

FSomeField: SomeType; //поле того же объекта
..
property SomeProp: SomeType read FSomeField write FSomeField;

то компилятор генерирует абсолютно идентичный код для обращений вида

Object.FSomeField := SomeValue;
Object.SomeProp := SomeValue;


 
vovnuke ©   (2006-04-18 11:33) [23]

а для кода вида:
SomeValue := FSomeProp;
SomeValue := SomeProp;
?


 
Сергей М. ©   (2006-04-18 11:39) [24]


> vovnuke ©   (18.04.06 11:33) [23]


И для него тоже.


 
Anatoly Podgoretsky ©   (2006-04-18 11:54) [25]

vovnuke ©   (18.04.06 11:08) [18]
С чего бы. Конструкция свойств для удобства программиста и защиты полей от несанкционированного доступа.


 
Ega23 ©   (2006-04-18 11:55) [26]

2 Anatoly Podgoretsky ©   (18.04.06 11:54) [25]
[12] и [13] почистить бы...


 
Anatoly Podgoretsky ©   (2006-04-18 13:02) [27]

Ega23 ©   (18.04.06 11:55) [26]
Нет нужды, есть более кардинальное решение



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

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

Наверх




Память: 0.53 MB
Время: 0.036 c
10-1118573883
SerJ23
2005-06-12 14:58
2006.05.07
определение номера абзаца


2-1145611729
inri13666
2006-04-21 13:28
2006.05.07
Помогите плиз с Сервисным приложением


2-1145508928
Nataly
2006-04-20 08:55
2006.05.07
SQL


2-1145382424
STK
2006-04-18 21:47
2006.05.07
Как скрыть в модальном окненекоторые компоненты


8-1133989577
Дебил-Дебилович-Дебилкин
2005-12-08 00:06
2006.05.07
PaintBox загрузка картинки