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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Повторное срабатывание OnShow 
V
    Опции темы
Reptile
Дата 15.8.2007, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 30.9.2006
Где: Украина, Первомай ск

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



Здравствуйте уважаемые форумчане. 
Описание ситуации: при нажатии на кнопку должна появится фома выбора(так называемый select) создаю ее динамически диалоговой, там грид на котором данные.
Проблема в том что когда закрываю форму выбора она исчезает потом она снова появляется( срабатывает событие OnShow) и через доли секунды закрывается окончательно. Логика программы не меняется, но на вид это не очень хорошо выглядит. Как этого можно избежать?

PM MAIL   Вверх
Rennigth
Дата 15.8.2007, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

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



Reptile, Телепаты на другом сайте. Приведи код как ты показываешь форму и желательно обработчики OnDestoy/OnHide самой формы.


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Reptile
Дата 15.8.2007, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 30.9.2006
Где: Украина, Первомай ск

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



Rennigth, простите.
Код

constructor TfSelect.CreateIt(Owner:TWinControl;ttType_par:TTableType;md:Integer=0;opn:Integer=0;param:Integer=0;param2:Integer=0);
begin
 try
  inherited Create(Owner);
  ///////////// инициализация пременных
  ROW_NUM := 0;
  if not dbTranSeleect.Active then
   dbTranSeleect.StartTransaction;
  if not dbTranDelete.Active then
   dbTranDelete.StartTransaction;
  FLAG_CLOSE := False;
  id_edit    := 0;
  start_date := DateToStr(Date-1);
  end_date   := DateToStr(Date);
  isUpdate := False;
  isDelete := False;
  isInsert := False;
  isLookUp := False;
  lblSelect.Caption := '';
  find := False;
  //////////////////////////////////////////////////////////////////////////////
  mode      := md;
  id_param  := param;
  FSelect   := False;
  id_param2 := param2;
  find := False;
  //--

  queryLookUp := TIBQuery.Create(Self);
  //--
  queryLookUp.DataBase    := dtModule.dbConnection;
  queryLookUp.Transaction := dbTranSeleect;
  dtSource.DataSet        := queryLookUp; //mtQrSelect;

  //--
  dbGrid.DataSource := dtSource;
  //--
   TREE_VAL := 0;
    LookUp();

  except
    sShowMessage('Ошибка инициализации окна');
    Exit;
  end;
  //--
   if mode = 0 then
   begin
    setWindowSize(Self,ttType);// установка размеров окна
    setColSizingNew(@dbGrid,ttType);// установка размеров полей грида
    bClose.Left := pBottom.Width - bClose.Width - 5;
    Show;
   end
   else
   begin
     setColSizingNew(@dbGrid,ttType);// установка размеров окна
     bClose.Left := pBottom.Width - bClose.Width - 5;
     FormStyle   := fsNormal;
     Position    := poDesktopCenter;
     BorderStyle := bsDialog;
     Position    := poScreenCenter;
     ShowModal;
   end;
   //--
end;




procedure TfSelect.FormClose(Sender: TObject; var Action: TCloseAction);
var
 err : String;
begin
 try
 if not (dbGrid.DataSource.DataSet.Active) then
 begin
  Action := caFree;
  Exit;
 end;

 saveColSizingNew(@dbGrid,ttType);
 if mode = 0 then
 begin
  saveWindowSize(Self,ttType);
 end
 else
 begin
  if (dbGrid.DataSource.DataSet.RecNo > 0)AND(FSelect) then
  begin
    Owner.Tag := dbGrid.Columns[0].Field.AsInteger;
    case ttType of
       ttCustomers_Schets,
       ttGroupTemplate,
       ttTemplateDogovor,
       ttFirmSchets,
       ttMoveSklad,
       ttTarifPlan:
       (Owner as TWinControl).SetTextBuf(PChar(dbGrid.Columns[1].Field.AsString));
      ttBanks:
       (Owner as TWinControl).SetTextBuf(PChar(dbGrid.Columns[2].Field.AsString));
      ttEmployee:
       (Owner as TWinControl).SetTextBuf(PChar(dbGrid.Columns[3].Field.AsString));
      ttKassa:
        (Owner as TWinControl).SetTextBuf(PChar(dbGrid.Columns[1].Field.AsString));
      ttPlanSchetov:
        (Owner as TWinControl).SetTextBuf(PChar(dbGrid.Columns[1].Field.AsString));
      ttHome:
        (Owner as TWinControl).SetTextBuf(PChar(dbGrid.Columns[3].Field.AsString+', '+
                         dbGrid.Columns[4].Field.AsString+', '+
                         dbGrid.Columns[2].Field.AsString));
      ttBigBords:
        (Owner as TWinControl).SetTextBuf(PChar(dbGrid.Columns[2].Field.AsString+'/'+
                         dbGrid.Columns[3].Field.AsString+'/'+
                         dbGrid.Columns[4].Field.AsString));
      else
       (Owner as TWinControl).SetTextBuf(PChar(dbGrid.Columns[2].Field.AsString));
    end;
  end;
 end;
 //////////////////////////////////////
 saveColSizingNew(@dbGrid,ttType);
 //////////////////////////////////////
 dbTranSeleect.Commit;
 queryLookUp.Free;
 Action := caFree;
 except
  on E : Exception do
  begin
   err := getException(E.Message);
   if (Length(err) > 2) then
    sMessageDlg(err,mtError,[mbOk],1)
   else
    TfError.CreateIt(E.Message);
   E := nil;
   Exit;
  end;
 end;
end;

OnDestroy события нет, я использую  Action := caFree; в onClose.
PM MAIL   Вверх
Rennigth
Дата 15.8.2007, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

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



Reptile, 
А форму саму как создаешь? Меня настараживает вызов ShowModal в методе CreateIt.
CreateIt это конструктор?


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Reptile
Дата 15.8.2007, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 30.9.2006
Где: Украина, Первомай ск

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



Да, CreateIt  это конструктор. Чем настораживает ShowModal, если в переменной mode значение 0, то форма создается как fsMDIChild, иначе делаю ее диалоговой. 
Повторюсь: все работает нормально, но после закрытия она появляется снова и исчезает, поставил брэк поин и оказалось что OnShowe срабатывает после закрытия, но никак не могу словить с какого места,  CreateIt  срабатывает единожды, значит копать нужно в FormClose.
Цитата(Rennigth @  15.8.2007,  12:52 Найти цитируемый пост)
А форму саму как создаешь?

В CreateIt   и создаю, в onShow только выборка из базы.

PM MAIL   Вверх
Rennigth
Дата 15.8.2007, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

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



Reptile, 
Цитата(Reptile @  15.8.2007,  13:17 Найти цитируемый пост)
OnShowe срабатывает после закрытия

Стэк ничего не показывает?

Плюс покажи место кто создает эту форму. 

Т.е. где вызывается что-то типа:

Код

  SomeVar := TfSelect.CreateIt(Self);

Код

или Application.CreateForm(SomeVar, TfSelect);



--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
bems
Дата 15.8.2007, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

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



я правильно понял что неявный вызов деструктора вложен в конструктор?

Добавлено через 5 минут и 39 секунд
нет. я не провильно понял  smile 


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Reptile
Дата 15.8.2007, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 30.9.2006
Где: Украина, Первомай ск

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



Цитата(Rennigth @  15.8.2007,  13:38 Найти цитируемый пост)
Стэк ничего не показывает?

А как проверить?

Цитата(Rennigth @  15.8.2007,  13:38 Найти цитируемый пост)
Плюс покажи место кто создает эту форму. 

Код

TfSelect.CreateIt(eCustomer,ttCustomers,1);

Это в другой форме.
eCustomer - это эдит

Цитата(bems @  15.8.2007,  13:39 Найти цитируемый пост)
я правильно понял что неявный вызов деструктора вложен в конструктор?

не совсем, скорее неявный вызов деструктора вложен в OnClose
Я уже и пробовал через деструктор так:
Код

destructor TfSelect.DestroyIt(Owner:TWinControl);
begin
  inherited fSelect.Destroy;
end;

Результат тот же, может ли это быть из-за использования alphaskins?

Это сообщение отредактировал(а) Reptile - 15.8.2007, 13:49
PM MAIL   Вверх
Rennigth
Дата 15.8.2007, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

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



Цитата(Reptile @  15.8.2007,  13:48 Найти цитируемый пост)
А как проверить?

ALT+CTRL+S




--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Reptile
Дата 15.8.2007, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 30.9.2006
Где: Украина, Первомай ск

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



Цитата(Rennigth @  15.8.2007,  13:59 Найти цитируемый пост)
ALT+CTRL+S

Это когда нажимать? Во время выполнения ничего не произошло. 
После выполнения выскочило окошко с сообщением Process is not accessible

PM MAIL   Вверх
Rennigth
Дата 15.8.2007, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

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



Цитата(Reptile @  15.8.2007,  14:06 Найти цитируемый пост)
Это когда нажимать?

На бряке в OnShow.



--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Reptile
Дата 15.8.2007, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 30.9.2006
Где: Украина, Первомай ск

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



вот это 
Код

TfSelect.FormShow(???)
TfSelect.CreateIt(???,ttCustomers,1,0,0,0)
TfAbonents.bSelCustomerClick(???)
vExpress

а вот это при не нужном(лишнем срабатывании) отображении
Код

TfSelect.FormShow(???)
TfAbonents.bSelCustomerClick(???)
vExpress

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


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

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



Reptile, Кстати. Ради эксперемента отключи оптимизацию проекта. Долго объяснять зачем, но просто попробуй. Был в шестерке по крайней мере один неприятный глючек.

Добавлено через 1 минуту и 12 секунд
Reptile, 
Покажи весь метод bSelCustomerClick


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
bems
Дата 15.8.2007, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

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



visible в дизайнтайме убери  smile

Добавлено через 1 минуту и 12 секунд
вот такой я телепат smile 


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Reptile
Дата 15.8.2007, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 30.9.2006
Где: Украина, Первомай ск

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



Цитата(Rennigth @  15.8.2007,  14:14 Найти цитируемый пост)
Покажи весь метод bSelCustomerClick

Я его уже показывал. Там кроме 
Код

TfSelect.CreateIt(eCustomer,ttCustomers,1);

ничего нет.
Отключил, теперь там 
Код

TfSelect.FormShow($373938C)
TfSelect.CreateIt($1B6192C,ttCustomers,1,0,0,0)
TfAbonents.bSelCustomerClick(???)
vExpress

и
Код

TfSelect.FormShow($373938C)
TfAbonents.bSelCustomerClick(???)
vExpress


Добавлено через 1 минуту и 43 секунды
Цитата(bems @  15.8.2007,  14:34 Найти цитируемый пост)
visible в дизайнтайме убери

не могу пишет 
-
Код

Cannot hide an MDI Child Form.


Добавлено через 6 минут и 25 секунд
bems, спасибо помогло, но теперь при создании, форма создается в одном месте, а потом перемещается туда куда нужно, но это я исправлю спасибо. Но из-за чего всетаки это происходит?
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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