|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
05.10.2011, 18:48 | #1 | |
Заблокирован
Регистрация: 04.07.2011
Сообщений: 261
|
Тупая проблема - переменная не передаётся!
Здравствуйте!
Столкнулся с тупейшей проблемой не могу решить уже два дня -есть главное окно программы MDIForm, из него по нажатию батона создаётся новое окно MDIChild: Код:
Код:
Код:
Ещё в этой форме в некоторых случаях вылетает ошибка: Цитата:
Что за баг и как его исправить??? Пишите все предположения - проверю! |
|
05.10.2011, 20:54 | #2 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Ваше OnCreate отрабатывает раньше чем в Varx что-то присваивается. OnShow позже
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
05.10.2011, 21:56 | #3 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,528
|
для этого были придуманы свойства (property)
Код:
Код:
программа — запись алгоритма на языке понятном транслятору
|
05.10.2011, 23:58 | #4 | ||
Заблокирован
Регистрация: 04.07.2011
Сообщений: 261
|
Цитата:
Цитата:
|
||
06.10.2011, 10:18 | #5 | |||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,528
|
в свойствах главное возможность выполнить какие-то действия (SetVarX, GetVarX) в тот момент когда внешняя программа выполняет простое присваивание (чтение) переменной.
И использование вне класса одного идентификатора VarxX вместо двух (GetVarX, SetVarX) formX.varX:=r; // formX.setVarX(r); r:=FormX.VarX; // r:=FormX.GetVarX; а переменноой FvarX вообще может и не быть. Все вместе называется сокрытие деталей реализации. Цитата:
Цитата:
а пользователю класса без разницы в написании formX.varX в любом случае. Но при этом(одна переменная) проблемы то работает то нет. Цитата:
1.программист один раз пишет простой короткий класс( одна переменная). и заставляет писать много раз одинаковый код (для правильного использования данной переменной) многих других программистов, использующих его "простой" класс. 2. программист один раз пишет простой длинный класс(одно свойство) и все программисты много раз просто используют это свойство.
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 06.10.2011 в 10:39. |
|||
06.10.2011, 12:39 | #6 |
Заблокирован
Регистрация: 04.07.2011
Сообщений: 261
|
Огромное спасибо за объяснение и метод - действительно так стало работать!!! :D
Хотя я так и не понял почему же не работало просто с переменной - согласно правилам делфи - тоже должно было бы работать... И одно уточнение в строке property varx: integer read Fvarx write SetVarx; так ли нужно "read Fvarx"? логически оно вообще не нужно, можно ведь просто: property varx: integer write SetVarx; можно ли так делать и для чего нужно "read Fvarx"?! |
06.10.2011, 13:04 | #7 | |||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,528
|
Цитата:
r:=formX.varX; // прочитать (узнать это значение ВНЕ модуля). аналогично можно не писать write блок (если не требуется изменять значение ИЗВНЕ). formX.varX:=r; Цитата:
showMessage('FormX.VarX:=1'); showMessage('formX.OnCreate'); Код:
Цитата:
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 06.10.2011 в 13:17. |
|||
06.10.2011, 13:15 | #8 | |
Заблокирован
Регистрация: 04.07.2011
Сообщений: 261
|
За объяснение ещё раз спасибище!
А вот с последним абзацем не согласен, тк: Цитата:
Ну и типы окна пробовал все 3 варианта (MDIChild, Normal, StayOnTop) - всегда одинаковый баг. Так что с последним не согласен - должно было работать с переменной, почему не работало - мне кажется при Create формы возникает некий баг не из-за моего написанного кода, а в невизуальных компонентах (связи с БД или других вспомогательных) и из-за этого бага возникают остальные баги... почему заработало с Вашим вариантом объясняется довольно просто - property активный элемент, который при изменении сам пробивается к исполнению, а назначение переменной извне - видимо действие более пассивное и не срабатывало... или же при создании форма где-то циклится и не доходит даже до создания переменной Varx... что-то такое... Последний раз редактировалось delphicoding; 06.10.2011 в 13:18. |
|
06.10.2011, 13:36 | #9 | |||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,528
|
Цитата:
на самом деле Onshow НИКАК не связан с visible:=true/False Цитата:
Цитата:
Код:
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 06.10.2011 в 13:53. |
|||
06.10.2011, 14:26 | #10 | |
Заблокирован
Регистрация: 04.07.2011
Сообщений: 261
|
Цитата:
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Тупая ошибка ...Duplicate resource(s): [Error] | Romer9999 | Общие вопросы Delphi | 5 | 02.08.2011 15:21 |
Переменная в C# | bead | C# (си шарп) | 8 | 01.05.2011 12:32 |
переменная char | genrix | Общие вопросы C/C++ | 9 | 20.02.2011 18:23 |
переменная в Excel | serror514 | Microsoft Office Excel | 5 | 11.10.2010 13:15 |
тупая Виста и браузеры. | Чип с Вальдеза | Операционные системы общие вопросы | 5 | 23.02.2009 00:54 |