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

Вниз

Не видит глобальную переменную   Найти похожие ветки 

 
Perf2k2 ©   (2006-06-06 10:28) [0]

Всем привет. Такая проблема: объявляем в 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;


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


 
Ega23 ©   (2006-06-06 10:32) [1]


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


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


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


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


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


 
Perf2k2 ©   (2006-06-06 10:34) [3]


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

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

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

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


 
ЮЮ ©   (2006-06-06 10:35) [4]


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


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


 
Ega23 ©   (2006-06-06 10:37) [5]


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


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


 
Perf2k2 ©   (2006-06-06 10:38) [6]

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

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


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

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


 
Ega23 ©   (2006-06-06 10:41) [8]


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


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


 
Perf2k2 ©   (2006-06-06 10:45) [9]


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

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

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

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


 
Ega23 ©   (2006-06-06 10:58) [10]


> То есть, грубо говоря, нужно просто поставить это на событии
> 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 11:17) [11]

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


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


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


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

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


 
Perf2k2 ©   (2006-06-06 11:21) [13]


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


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



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

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

Наверх




Память: 0.5 MB
Время: 0.038 c
1-1147792675
TStas
2006-05-16 19:17
2006.06.25
Рисование на канве другого приложения


2-1149350435
allrussia
2006-06-03 20:00
2006.06.25
Создание и использование своего юнита с процедурами и функциями


3-1146332166
Express
2006-04-29 21:36
2006.06.25
ADOCommand – как перейти на следующую запись???


6-1140176269
MegaVolt
2006-02-17 14:37
2006.06.25
Как обработать исключения которые генерит TIdFTP?


2-1149674994
ksenia
2006-06-07 14:09
2006.06.25
реестр