Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.013 c
2-1145255059
Kosyak
2006-04-17 10:24
2006.05.07
произвольное изменение числа


4-1139945594
Volf_555
2006-02-14 22:33
2006.05.07
Как свернуть/развернуть все MDI-окна в моём приложении?


1-1144056323
Gear
2006-04-03 13:25
2006.05.07
функция StrToDate и формат времени.


6-1137665555
sicilla
2006-01-19 13:12
2006.05.07
Скрыть иконку в tray


1-1143993365
TStas
2006-04-02 19:56
2006.05.07
Можно ли в экзешник собрать несколько файлов:





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