Текущий архив: 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.48 MB
Время: 0.01 c