Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.10.2011, 18:48
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
Восклицание Тупая проблема - переменная не передаётся!

Здравствуйте!
Столкнулся с тупейшей проблемой не могу решить уже два дня -есть главное окно программы MDIForm, из него по нажатию батона создаётся новое окно MDIChild:
Код:
begin
//   Fx:=Formx.Create(self);
   Fx:=Formx.Create(Application);
   Fx.Varx:=1;
   Fx.Show;
end;
В создаваемом окне есть переменная
Код:
public
    Varx: Integer; // variant, boolean
на событие OnCreate/OnShow стоит код настройки отображения окна в соответствии с Varx вида:
Код:
if Varx=1 then begin 
 ..... настройки формы
end;
Проблема в том, что если стоит проверка "if..." нихрена форма не настраивается!!, если же строку с проверкой "if..." закомментить - сразу всё работает нормально!! То есть переменная почему-то не была определена!

Ещё в этой форме в некоторых случаях вылетает ошибка:
Цитата:
:7c812afb kernel32.RaiseException + 0x52
:00406d68 NotifyNonDelphiException + $1C
:7c90327a ntdll.RtlConvertUlongToLargeInteger + 0x3c
:7c90e48a ntdll.KiUserExceptionDispatcher + 0xe
:00544e33 TCustomForm.DoCreate + $37
:00544a77 TCustomForm.AfterConstruction + $17
:00544a46 TCustomForm.Create + $1A6
Посмотрел CallStack и CPU - ничего явно указывающего на ошибку нет.

Что за баг и как его исправить??? Пишите все предположения - проверю!

Последний раз редактировалось delphicoding, 05.10.2011 в 18:50.
Ответить с цитированием
  #2  
Старый 05.10.2011, 19:19
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Событие OnCreate выполняется до того, как ты передашь переменную. Можно конструктор класса формы свой написать, в него передавать и значение твоей переменной.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #3  
Старый 05.10.2011, 23:59
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
По умолчанию

OnShow тоже пробовал - баг одинаковый.
Звучит стрёмно.
Ответить с цитированием
  #4  
Старый 06.10.2011, 00:01
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

А почему не сделать VarX глобальной? Как вариант.
Или зачем ее инициализировать в событии OnCreate? Может только в OnShow?
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
  #5  
Старый 06.10.2011, 00:05
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
По умолчанию

Глобальной нельзя, тк таких окон может быть создано много и каждое со своим параметром VarX - поэтому расположить переменную можно только в самой форме.
Писал же, что пробовал и OnCreate и OnShow.
Ответить с цитированием
  #6  
Старый 06.10.2011, 16:45
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Есть еще события формы...
http://www.delphisources.ru/pages/fa...rm_events.html
OnCreate
OnShow
OnPaint
OnActivate
OnResize
OnPaint
OnCloseQuery
OnClose
OnDeactivate
OnHide
OnDestroy
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
  #7  
Старый 06.10.2011, 17:18
Аватар для Viajero
Viajero Viajero вне форума
Активный
 
Регистрация: 14.06.2011
Адрес: РБ
Сообщения: 214
Версия Delphi: Delphi 7 FB 2.5
Репутация: 5849
По умолчанию

Код:
GlobalVarx:=1;
   Fx:=Formx.Create(Application);
   Fx.Varx:=1;
.........................
TFormx.FormCreate(Sender: TObject);
begin
Varx:=GlobalVarx;
.........................
__________________
- Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА!
Ответить с цитированием
  #8  
Старый 06.10.2011, 19:56
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
По умолчанию

Цитата:
Есть еще события формы...
OnCreate
OnShow
OnPaint
OnActivate
Пробовал все очищать.
Цитата:
Viajero
?
Ответить с цитированием
  #9  
Старый 06.10.2011, 20:16
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Говорю, передай как аргумент конструктора. Внутрях конструктора присвоишь значение какой-нибудь приватной переменной, а ее в свою очередь запользуешь на своем ФормКриэйт.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #10  
Старый 07.10.2011, 12:54
Аватар для Viajero
Viajero Viajero вне форума
Активный
 
Регистрация: 14.06.2011
Адрес: РБ
Сообщения: 214
Версия Delphi: Delphi 7 FB 2.5
Репутация: 5849
По умолчанию

Цитата:
Сообщение от delphicoding
Глобальной нельзя, тк таких окон может быть создано много и каждое со своим параметром VarX - поэтому расположить переменную можно только в самой форме.
Что мешает сделать и параметр, и глобальную переменную и через неё присваивать параметр (см мой пост выше). Этот способ я применял в своих программах, хотя способ, указанный M.A.D.M.A.N. теоретически более правильный.
Способов туева ... , не понимаю в чём проблема?
__________________
- Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА!

Последний раз редактировалось Viajero, 07.10.2011 в 13:02.
Ответить с цитированием
  #11  
Старый 07.10.2011, 18:15
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Viajero
... не понимаю в чём проблема?
Ответ кроется в названии темы.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #12  
Старый 08.10.2011, 10:30
WinDriver WinDriver вне форума
Прохожий
 
Регистрация: 06.05.2009
Сообщения: 8
Репутация: 10
По умолчанию

Код:
...
Tformx = class(TForm)
...
private
...
  FVarX: Integer;
...
public
...
  constructor Create(Owner: TComponent; Varx: Integer);
...
end;

implementation

constructor TFormx.Create;
begin
  FVarx:= varx;
  inherited Create(Owner);
end;

и после этого юзать Fvarx в своём классе.
Ответить с цитированием
  #13  
Старый 08.10.2011, 11:38
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
По умолчанию

Цитата:
Что мешает сделать и параметр, и глобальную переменную и через неё присваивать параметр (см мой пост выше). Этот способ я применял в своих программах, хотя способ, указанный M.A.D.M.A.N. теоретически более правильный.
Способов туева ... , не понимаю в чём проблема?
Ответ настолько прост, что даже неудобного вам, профи, его объяснять... а именно: согласно правилам Delphi - всё должно работать и просто с переменной.
Ответить с цитированием
  #14  
Старый 17.08.2012, 17:53
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
Восклицание

Ребята, делфи пользуюсь давно, но как продвинутый пользователь. Недавно столкнулся с задачей сделать MDI DLL, программа была написана без модулей.. Скачал в интернете пример MDI DLL окна, прочитал данную тему, но ничего толком не понял в каком месте объявлять переменные, чтобы они были доступны двусторонне.. Стоит задача передать переменные из главной формы, чтобы изменить их и уже при закрытии MDI формы изменённые значения использовать в главной форме, помогите пожалуйста! Чувствую, моиз знаний недостаточно для этого, нервничать уже начал (
Если кому не сложно - измените пример по ссылке, пожалуйста! Нужно передать и принять в главной форме несколько переменных. Огромное спасибо заранее тому, кто поможет! Вот здесь скачал пример MDI DLL
Ответить с цитированием
  #15  
Старый 17.08.2012, 19:00
ChinYan ChinYan вне форума
Тыкаю клавиши
 
Регистрация: 13.07.2009
Сообщения: 804
Версия Delphi:
Репутация: 48633
По умолчанию

Вы на дату сообщений смотрели? Новую тему создавайте
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:12.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025