Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание форм по средствам конструктора, Вылазит баг аргументов конструктора 
:(
    Опции темы
kts
Дата 1.6.2006, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 1.6.2006

Репутация: нет
Всего: нет



Доброе время суток.

Код

constructor TfSelect.CreateIt(Owner:TComponent;con:MySQL;ses_id:Integer;tp:TTableType;param:Integer=0);
begin

 inherited Create(Owner);
 conn := con;
 id_sess   := ses_id;
 id_param  := param; 
 ttType    := tp;
 flag := False;
 fclose := False;

 if (Owner.ClassName = 'TEdit')OR(Owner.ClassName = 'TSpeedButton') then begin
  flag := True;
  Position := poMainFormCenter; 
  FormStyle   := fsNormal;
  BorderStyle := bsDialog;

  ShowModal;
 end else begin
  FormStyle   := fsMDIChild;
  BorderStyle := bsSizeable;  
  Show;
 end;

 lblTime.Caption := 'Âðåìÿ: '+TimeToStr(Time);
end;


Owner - владелец формы
con      - идентификатор соединения к Мускулу
ses_id - АйДи сесии
tp        - ТИП ОКНА (ВАЖНО) 
param - дополнитиленый параметр

Есть приложение, MDI, есть, как бы форма шаблон, в которую по средствам конструктора передаются параметры, которые и определяют будущую начинку форму.

Если работать только с одним окном - то проблемма и не видна. Если же Открыть еще одну форму (форму шаблон), то первой открытой (при активации) передается параметр (определяющию начинку) второй! Как бы странно! 
По идеи должен создаваться отдельный экземпляр формы - НО ЭТО НЕ ПРОИСХОДИТ. 
Как быть? Еслит кто сталкивался  - помогите разобраться! 
PM MAIL   Вверх
Snowy
Дата 1.6.2006, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Эээээ. Не понятно.
Три раза прочитал, так и не понял, что и как.
Выкладывай код, как создаёшь.
А то не понятно что делаешь, и где что не так. 
PM MAIL   Вверх
kts
Дата 1.6.2006, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 1.6.2006

Репутация: нет
Всего: нет



Ну значит так!
У меня есть форма шаблон! Что на ней? 
На ней есть ГРИД, и кнопочки (создать,редактировать,удалить ... ну и чисто сервисные - печать, период и т.п.). При создании данной формы, в аргументах конструктора передаю параметры форме. Так вот, основной параметр - это tp:TTableType. Что это? Это есть тип заполнения грида, т.е. если брать на примере-то допустим справочник ВАЛЮТЫ --- Я передаю туды след. строку:
Код

 ttType := ttValuts;
 TfSelect.CreateIt(fMain,conn,0,ttType);
  

Тип TTableType - я объявил как 

Код

type
 TTableType = (ttBanks,ttEden,ttValuts ....)



...
Далее, при onShow формы шаблона я вызываю функцию перерисовки/заполнения грида. 
Код

procedure update_grid(type_update:TTableType;grid:pGrid;mysqlrec:MYSQL;dtStart:TDateTime=0;dtEnd:TDateTime=0;id:Integer=0;val:Integer=0);
var
 i,j : Integer;
 ....
begin

  case type_update of
   ttSystemUser:
    begin
      grid.ColCount := 5;
      grid.ColWidths[0] := -1;

      grid.Cells[1,0] := '';
      grid.Cells[2,0] := 'Группа';
      grid.Cells[3,0] := 'логин';
      grid.Cells[4,0] := 'Сотрудник';


      getWindowIntoFile(type_update,grid);


      query_To_MySQL := 'SELECT u.id,"",g.descr,u.login,s.fio FROM users AS u, users_groups AS g,sotrud AS s '+
                        ' WHERE g.id=u.id_group AND s.id=u.id_sotrud';



ТАК ВОТ! ПРОБЛЕММА В ТОМ, ЧТО ДОПУСТИМ Я ОТКРЫВАЮ СПРАВОЧНИК "ВАЛЮТЫ", ПОТОМ ОТКРЫВАЮ ЕЩЕ ОДНО ОКНО, ДОПУСТИМ СПРАВОЧНИК СОТРУДНИКИ... (ЗАМЕТИМ, ЧТО сотрудников открыл вторым... ). ТЕПЕРЬ ЕСЛИ ПЕРЕЙТИ НА ОКНО КОТОРОЕ БЫЛО ОТКРЫТО ПЕРВОЕ-ТИПА ВАЛЮТЫ --- ПРИ РЕДАКТИРОВАНИИ ОНО ОТКРОЕТ ПУСТУЮ ФОРМУ ДЛЯ СОТРУДНИКОВ, А ГРИД ПЕРЕРИСУЕТСЯ СОГЛАСНО ТОМУ, ЯКОБЫ ЭТО ЕСТЬ ОКНО СОТРУДНИКОВ.

ЕСЛИ ЕЩЕ НЕ ПОНЯТНО 241609420 - объясню.
 
PM MAIL   Вверх
Snowy
Дата 1.6.2006, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(kts @  1.6.2006,  21:36 Найти цитируемый пост)
ТАК ВОТ! ПРОБЛЕММА В ТОМ
Не нужно так кричать.
На лицо эффект в том, что какая-то из переменных является общей/глобальной, а не свойством формы. 
PM MAIL   Вверх
kts
Дата 1.6.2006, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 1.6.2006

Репутация: нет
Всего: нет



Цитата

На лицо эффект в том, что какая-то из переменных является общей/глобальной, а не свойством формы.  


НУ как же переменная может быть глобальной, когда она объявлена внутри модуля (не в разделе ПАБЛИК) и используется только там.

Были сомнения по поводу конструкции
Код

 ttType := ttValuts;
 TfSelect.CreateIt(fMain,conn,0,ttType);


ttType-явлеется глобальной на уровне главной родительской формы.
Даже если поменял на:
Код

TfSelect.CreateIt(fMain,conn,0,ttValuts);


Ничего не поменялось smile ! 
smile 

 
PM MAIL   Вверх
Mechanic
Дата 1.6.2006, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 5.5.2006
Где: Kharkov, Ukraine

Репутация: 6
Всего: 7



А когда вызываешь update_grid(), то что передаешь ей в type_update?

Если в самом деле ttType, тогда нужно смотреть, какой именно ttType ты изменяешь вот здесь
Цитата(kts @  1.6.2006,  21:36 Найти цитируемый пост)
 ttType := ttValuts;
 TfSelect.CreateIt(fMain,conn,0,ttType);


Если перед этим стоит with, то может быть, что изменяется именно ttType другой формы.

Для уменьшения влияния этой ошибки предлагаю убрать TfSelect.ttType в Protected секцию.

Похоже, тут собака порылась..

Добавлено @ 23:08 
Цитата(kts @  1.6.2006,  22:49 Найти цитируемый пост)
НУ как же переменная может быть глобальной, когда она объявлена внутри модуля (не в разделе ПАБЛИК) и используется только там.

 smile 

Только как поле формы её нужно объявлять!
Посуди сам, модуль один, в нем переменная тоже одна, а форм много! Как думаешь, какое значение будет в одной переменной, когда несколько конструкторов туда запишут разные значения?
Верно. Именно последнее!  smile  
--------------------
Tell me the extensions of the files You backup and I'll tell You who You are..  ©Mch  
PM   Вверх
kts
Дата 1.6.2006, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 1.6.2006

Репутация: нет
Всего: нет



Спасибо!!!
Именно так и нужно было действовать... Все заработало.

Цитата

Для уменьшения влияния этой ошибки предлагаю убрать TfSelect.ttType в Protected секцию.


Код

 protected
    ttType,ttTypeBack  : TTableType;


Благодарен за помощь! 
PM MAIL   Вверх
Mechanic
Дата 1.6.2006, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 5.5.2006
Где: Kharkov, Ukraine

Репутация: 6
Всего: 7



Ещё повезло, что не приведенный кусок кода был восстановлен телепатическими свойствами кой-кого из снежных.. smile  Иначе бы было всё намного дольше. 
--------------------
Tell me the extensions of the files You backup and I'll tell You who You are..  ©Mch  
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1288 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.