Форум: "Начинающим";
Текущий архив: 2006.05.07;
Скачать: [xml.tar.bz2];
ВнизКак из фомы 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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.018 c