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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как написать условие "форма показалась"? 
V
    Опции темы
Kbl4AH
Дата 30.10.2008, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(morpheyushka @ 30.10.2008,  16:13)
Есть у меня подозрение, что это не совсем то выделение...сделай так - кинь на форму с деревом кнопочку, и по клику выдай сообщение с текстом выделенного нода. То есть появилась форма - там якобы выделен первый элемент, и ты сразу же на кнопочку жмешь...а потом тут отпишешь какую ошибку тебе выдало smile

вбил в кнопочку 
Код

Caption:= cxTreeView1.Selected.Text;

форма появилась - сразу нажал на кнопочку - заголовок формы стал '1-й элемент списка' smile 
Это при заккоментированном Button.Click в процедуре Form.Show...
А если Button.Click в процедуре Form.Show оставить, то прежняя ошибка...
Я так понимаю, что это из-за того, что форма еще не отобразилась, а я уже лезу к выделенному элементу...
Наверное, нужно использовать другое событие (когда форма полностью видна вместе с выделениями дерева)... Я не знаю какое smile 

Это сообщение отредактировал(а) Kbl4AH - 30.10.2008, 15:25
PM MAIL ICQ   Вверх
pseud
Дата 30.10.2008, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

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



все элементрано, у тебя
Код

TreeView1.Selected = nil

вот ты и имеешь AV при обращении к свойству nil
Код

TreeView1.Selected.Selected


Добавлено через 1 минуту и 32 секунды
делай раз:
делаешь у своего cxTreeView1.TabOrder = 0 (ну и всем его Parent'ам тоже).


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Kbl4AH
Дата 30.10.2008, 15:32 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(pseud @ 30.10.2008,  16:27)
делаешь у своего cxTreeView1.TabOrder = 0 (ну и всем его Parent'ам тоже).

Зачем это?

Все оказалось проще... Я заменил процедуру FormShow на FormPaint  и ошибки не стало smile 

Это сообщение отредактировал(а) Kbl4AH - 30.10.2008, 15:32
PM MAIL ICQ   Вверх
morpheyushka
Дата 30.10.2008, 15:39 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зеленый человек
**


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

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



а ты знаешь что это будет происходить каждый раз, когда форма перерисовывается...а теперь представь ситуацию - пользователь выбрал нужный узел и начинает с ним работать - например менять какие то данные, а тут ему по аське анекдот прислали...понятно, что анекдот - это привилегированное событие - и он откроет окно сообщений, прочитает, а потом обратно в программу, а тут твой FormPaint опять отработает (если было перекрытие форм)...и выделенный элемент пропадет!!!
если тебе это не грозит, то можешь оставить как сделал, если грозит то сделай так:
Код

procedure TFNotVisible.FormShow(Sender: TObject);
begin
  Spisok.Click;
end;
procedure TFNotVisible.SpisokClick(Sender: TObject);
begin
  TreeView1.SetFocus;
  if TreeView1.Selected.Selected then TreeView1.Selected.Selected:= False;
end;



--------------------
user posted image
Спасибо делается вот так!!!
PM MAIL WWW   Вверх
Kbl4AH
Дата 30.10.2008, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



morpheyushka, пасиб, давно бы так, твое решение лучше=)

Тока все равно как-то немного не так...
Не нравится то, что зачем фокус принудительно ставить, если он все равно на дереве окажется???

Это сообщение отредактировал(а) Kbl4AH - 30.10.2008, 15:46
PM MAIL ICQ   Вверх
morpheyushka
Дата 30.10.2008, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зеленый человек
**


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

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



Ну извини, что мозги попудрили немного smile 


--------------------
user posted image
Спасибо делается вот так!!!
PM MAIL WWW   Вверх
pseud
Дата 30.10.2008, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

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



morpheyushka
Kbl4AH
лучше все таки проверить TreeView1.Selected т.к. ведь в дереве может быть пусто.
и тогда дальнейшее обращение к свойствам вызовет AV
рекомендую так:
Код

procedure TFNotVisible.FormShow(Sender: TObject);
begin
  SpisokClick(Spisok);
end;

procedure TFNotVisible.SpisokClick(Sender: TObject);
begin
  TreeView1.SetFocus; // при необходимости
  if TreeView1.Selected <> nil then 
  begin
    //...
  end;
end;




--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Kbl4AH
Дата 30.10.2008, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Нет, все не так...
Сто пудово  всегда выделяется первый элемент дерева (хотя, на момент FormShow - TreeView1.Selected в самом деле = nil)... Просто выделение происходит после того, как произошло событие FormShow...
Какое событие следует за FormShow?

Это сообщение отредактировал(а) Kbl4AH - 30.10.2008, 15:53
PM MAIL ICQ   Вверх
morpheyushka
Дата 30.10.2008, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зеленый человек
**


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

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



Цитата(DelphiWorld)
Рождение 
OnCreate -> OnShow -> OnActivate -> OnPaint -> OnResize -> OnPaint ... 

Уничтожение 
... OnCloseQuery -> OnClose -> OnDeactivate -> OnHide -> OnDestroy 




--------------------
user posted image
Спасибо делается вот так!!!
PM MAIL WWW   Вверх
pseud
Дата 30.10.2008, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

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



Цитата(Kbl4AH @  30.10.2008,  15:50 Найти цитируемый пост)
Какое событие следует за FormShow?


Цитата(Kbl4AH @  30.10.2008,  15:50 Найти цитируемый пост)
Просто выделение происходит после того, как произошло событие FormShow...


вот ты нам и расскажи так в каком же событии происходит обновление инфы в дереве?






--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Kbl4AH
Дата 30.10.2008, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



morpheyushka, на момент OnActivate элемент дерева тоже еще не успевает выделиться...
А в момент OnPaint ты говоришь, что не целесообразно...

То есть, все-таки лучше остановиться на принудительной остановке фокуса или как?
PM MAIL ICQ   Вверх
pseud
Дата 30.10.2008, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

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



или это не ты ее там обновляешь?  smile 


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
Kbl4AH
Дата 30.10.2008, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(pseud @ 30.10.2008,  16:59)
вот ты нам и расскажи так в каком же событии происходит обновление инфы в дереве?

Я пока еще такого сложного не знаю smile 
PM MAIL ICQ   Вверх
morpheyushka
Дата 30.10.2008, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зеленый человек
**


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

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



Цитата(Kbl4AH @  30.10.2008,  15:50 Найти цитируемый пост)
Какое событие следует за FormShow?

FormActivate

я выше написал все, что касается формы)

Добавлено через 1 минуту и 58 секунд
Если там 100% будут данные, то можно остановиться на моем примере, если могут и не быть, то во избежание AV нужно сделать еще проверку
Код

if TreeView1.Selected <> nil then



--------------------
user posted image
Спасибо делается вот так!!!
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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