Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.06.25;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.011 c
2-1149437413
alex007
2006-06-04 20:10
2006.06.25
Создание компонентов на форме в запущенном приложении


3-1146659528
mochoni
2006-05-03 16:32
2006.06.25
Занесение файлов в SqlServ


15-1149150033
RA
2006-06-01 12:20
2006.06.25
Перезд в столицу? (Киев)


15-1149120248
vidiv
2006-06-01 04:04
2006.06.25
Раздел математики


15-1149143398
Игорь Шевченко
2006-06-01 10:29
2006.06.25
Offtopic: Ищется квартира в Москве на предмет снять :)





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