Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не видит глобальную переменную [D7, 2000]


Perf2k2 ©   (2006-06-06 10:28:00) 

Всем привет. Такая проблема: объявляем в unit2 (frmMain) глобальную переменную:
 
public
   global_account_id: string;
   global_account_login: string;
end;

А в unit1 (frmEnter) присваиваем ей значение и закрываем frmEnter:

  Application.CreateForm(TfrmMain, frmMain);

  frmMain.global_account_id:=DataSource1.DataSet.FieldByName('account_id').Text;
  frmMain.global_account_login:=DataSource1.DataSet.FieldByName('account_login').T ext;

  frmMain.ShowModal;

  frmEnter.Close;
  frmEnter.Release;

Потом пытаюсь вывести в статусбаре frmMain значения переменных, но в статусбаре выводится только "'ID: Login: ":

// заполняем статусбар
StatusBar1.Panels[0].Text := 'ID: ' + frmMain.global_account_id + ' Login:' + frmMain.global_account_login;


Заранее спасибо!


Perf2k2   (2006-06-06 11:21:00) [1]


> Да, правильно.


Офигеть.. Сколько же возможностей у Делфи...


Сергей М.   (2006-06-06 11:20:00) [2]


> первая исполняется когда я пытаюсь из переменной global_account_id
> прочитать значение,  вторая - когда я пытаюсь его туда запихнуть
> чтоли?
>


Да, правильно.

Только "первая" - это не функция, а непосредственно идентификатор приватного поля класса.


Perf2k2   (2006-06-06 11:17:00) [3]

Я конечно извиняюсь, но я мне хочется понять как это все работает, а не просто списАть код. Я прросто никак не пойму когда выполняются функции Fglobal_account_id  и SetFglobal_account_id. Получается, что первая исполняется когда я пытаюсь из переменной global_account_id прочитать значение,  вторая - когда я пытаюсь его туда запихнуть чтоли?


Ega23   (2006-06-06 10:58:00) [4]


> То есть, грубо говоря, нужно просто поставить это на событии
> OnShow...


Не надо так делать.


> мне понять очень сложно. Что значит с приватной процедурой
> записи?


public
  property global_account_id: string read Fglobal_account_id write SetFglobal_account_id;
  property global_account_login: string reaf Fglobal_account_login write SetFglobal_account_login;
end;


потом жмёшь Ctrl+Shift+C и у тебя добавится в класс фомы 2 поля Fglobal_account_id и второе и две private-процедуры.
А вот в этих процедурах уже и заполняй свой StatusBar:


procedure TfrmMain.SetFglobal_account_login(const Value:String);
begin
 Fglobal_account_login:=Value;
  StatusBar1.Panels[0].Text := 'ID: ' + Fglobal_account_id + ' Login:' + Fglobal_account_login;
end;

и

procedure TfrmMain.SetFglobal_account_ID(const Value:String);
begin
 Fglobal_account_ID:=Value;
  StatusBar1.Panels[0].Text := 'ID: ' + Fglobal_account_id + ' Login:' + Fglobal_account_login;
end;


Perf2k2   (2006-06-06 10:45:00) [5]


> А надо делать после.

Блин! Точно! Как это я не сообразил... То есть, грубо говоря, нужно просто поставить это на событии OnShow... Здесь понятно, спасибо.
А вот это сочетание слов:

> Я бы сделал эти переменные как public-property с приватной
> процедурой записи.

мне понять очень сложно. Что значит с приватной процедурой записи?


Ega23   (2006-06-06 10:41:00) [6]


> Это на событиие FormCreate формы frmMain (здесь же и статус).


Всё понятно. И что ты хочешь: ты  StatusBar1.Panels[0].Text заполнил ДО присвоения твоим global_account_id и global_account_login значений из набора данных.
А надо делать после. Я бы сделал эти переменные как public-property с приватной процедурой записи.


Perf2k2   (2006-06-06 10:38:00) [7]

Потом, это когда? В каком обработчике? Почему не написать это там же, перед
frmMain.ShowModal?  StatusBar1 это с какой формы?

Это на событиие FormCreate формы frmMain (здесь же и статус). Дело в том, что я вывожу лишь для того, чтобы проверить, видны ли эти переменные в данной форме, т.к. мне они будут нужны в этой форме и не в этой тоже очень часто, и не только в статусе. грубо говоря, здесь хранится инфа о пользователе, который находится в программе (после аутентификации).


Perf2k2   (2006-06-06 10:38:00) [8]

ой... у тебя StatusBar на FormCreate заполняется, что-ли?
Да, забыл сказать ((


Ega23   (2006-06-06 10:37:00) [9]


> ЭЭэ.. значения из базы берутся, что-то типа "1" и "Никита"
> соответственно.


ой... у тебя StatusBar на FormCreate заполняется, что-ли?


ЮЮ   (2006-06-06 10:35:00) [10]


> Потом пытаюсь вывести в статусбаре frmMain значения переменных


Потом, это когда? В каком обработчике? Почему не написать это там же, перед
frmMain.ShowModal?  StatusBar1 это с какой формы?


Perf2k2   (2006-06-06 10:34:00) [11]


> 1. Ты объявляешь не "глобальную" переменную, а public-поле
> класса TfrmMain. А это разные вещи.

Извиняюсь :) А как объявить глобальную. ПОмнится в ВБ именно так они объявлялись...

> 2. Чему равно значение frmMain.global_account_id и frmMain.
> global_account_login перед frmMain.ShowModal;?

ЭЭэ.. значения из базы берутся, что-то типа "1" и "Никита" соответственно.


Ega23   (2006-06-06 10:32:00) [12]


> Всем привет. Такая проблема: объявляем в unit2 (frmMain)
> глобальную переменную:


1. Ты объявляешь не "глобальную" переменную, а public-поле класса TfrmMain. А это разные вещи.
2. Чему равно значение frmMain.global_account_id и frmMain.global_account_login перед frmMain.ShowModal;?


Сергей М.   (2006-06-06 10:32:00) [13]


> глобальную переменную:
>  
> public
>    global_account_id: string;
>    global_account_login: string;
> end;


Это не "глобальные переменные".
Это публичные поля класса.


Наверх

Титульная страница Поиск, карта сайта Написать письмо