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

Поиск:

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


Опытный
**


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

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



Здравствуйте. У меня такой вопрос.
У меня на форме есть дерево и меню.
После нажатия на кнопочку я снимаю выделение с дерева: TreeView1.Selected.Selected:= False;.
Но мне нужно, чтобы действия при нажатии кнопочки выполнялись и при показе формы (Show).
Если в процедуру Form.Show я вставляю Button.Click, то у меня ошибка (я так понимаю, из-за снятия выделения, потому что форма еще не показалась и значит ничего не выделено). Как мне в процедуре Button.Click написать условие: если форма полностью отобразилась, то TreeView1.Selected.Selected:= False;?

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


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


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

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



 smile давай сначала - сколько всего форм, на какой снимается выделение, на какой на кнопочку нажимаешь?


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


Опытный
**


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

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



Цитата(morpheyushka @ 30.10.2008,  15:02)
smile давай сначала - сколько всего форм, на какой снимается выделение, на какой на кнопочку нажимаешь?

Походу, я суть ошибочных ситуаций плохо привожу(((
Мне нужно, чтобы работало ЭТО:
Код

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

procedure TFNotVisible.SpisokClick(Sender: TObject);
begin
  // if форма отобразилась then TreeView1.Selected.Selected:= False;
end;


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


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


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

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



а ты уверен, что на момент отображения формы в TreeView1 есть выделенные элементы?


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


Опытный
**


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

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



Цитата(morpheyushka @ 30.10.2008,  15:22)
а ты уверен, что на момент отображения формы в TreeView1 есть выделенные элементы?

Конечно, ведь если бы выделения не было, то я не стал бы его снимать=)
Вобщем, есть.
PM MAIL ICQ   Вверх
THandle
Дата 30.10.2008, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

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



Код

if Form1.Showing then
  //..

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


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


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

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



так:
Код

  if Self.Showing then
    TreeView1.Selected.Selected:= False;

а еще лучше так:
Код

  if TreeView1.CanFocus then
    TreeView1.Selected.Selected:= False;




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


Опытный
**


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

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



Цитата(THandle @ 30.10.2008,  15:24)
Код

if Form1.Showing then
  //..

С ним я сам пытался - ошибка

Добавлено через 33 секунды
Цитата(pseud @ 30.10.2008,  15:25)
а еще лучше так:
Код

  if TreeView1.CanFocus then
    TreeView1.Selected.Selected:= False;

Все равно ошибка(((
PM MAIL ICQ   Вверх
morpheyushka
Дата 30.10.2008, 14:41 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



А что за ошибка?


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


Смышленный
***


Профиль
Группа: Завсегдатай
Сообщений: 1915
Регистрация: 24.4.2006
Где: Планета Земля

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



Цитата(pseud @ 30.10.2008,  15:25)
так:
Код

  if Self.Showing then
    TreeView1.Selected.Selected:= False;

а еще лучше так:
Код

  if TreeView1.CanFocus then
    TreeView1.Selected.Selected:= False;

А чем это отличается от
Код

  if Self.Visible then
    TreeView1.Selected.Selected:= False;



--------------------
user posted image
PM MAIL WWW Skype   Вверх
pseud
Дата 30.10.2008, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



THandle, Хранитель Клуба потерял аватар.

Добавлено через 2 минуты и 58 секунд
Цитата(aktuba @  30.10.2008,  14:42 Найти цитируемый пост)
А чем это отличается от


смотри исходники, чем-то вроде отличается  smile 

а TreeView1.CanFocus так и ваще всем отличается

Добавлено через 3 минуты и 57 секунд
Цитата(Kbl4AH @  30.10.2008,  14:33 Найти цитируемый пост)
Все равно ошибка(((


morpheyushka, +1

таки да. ошибка-то в чем? где? когда?


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


Опытный
**


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

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



Вобщем, ошибка в выделенной строке, причем без разницы какое условие...

Присоединённый файл ( Кол-во скачиваний: 38 )
Присоединённый файл  Error.JPG 52,49 Kb
PM MAIL ICQ   Вверх
morpheyushka
Дата 30.10.2008, 14:56 (ссылка) |    (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Сорри за офтоп...но я "падцталом" от названия проекта - PaPoPKe smile  smile  smile 
5 балов

Добавлено через 2 минуты и 27 секунд
Цитата(Kbl4AH @  30.10.2008,  14:23 Найти цитируемый пост)
Конечно, ведь если бы выделения не было, то я не стал бы его снимать=)

Все же сомневаюсь по этому поводу...


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


Опытный
**


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

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



Цитата(morpheyushka @ 30.10.2008,  15:56)
Сорри за офтоп...но я "падцталом" от названия проекта - PaPoPKe smile  smile  smile 
5 балов

Без юмора жить, а тем более работать, - НЕЛЬЗЯ...
Я юморю аббревиатурами в названиях прог, благо пользователи в транслите плохо рубят)))
PaPoPKe - Права Пользователей Программы "Кадры"
PTaSHka - Print of Travelling SHeets
PuLPa - Перечень Льготных Профессий
WaHlAk - WareHouse Account
KoT - Копирование Таблиц и т.д.
Вот так я проги называю smile

Добавлено через 52 секунды
Цитата(morpheyushka @ 30.10.2008,  15:56)
Все же сомневаюсь по этому поводу...

Убираю условие, запускаю программу - выделение стоит на первом элементе дерева
PM MAIL ICQ   Вверх
morpheyushka
Дата 30.10.2008, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Kbl4AH @  30.10.2008,  15:03 Найти цитируемый пост)
бираю условие, запускаю программу - выделение стоит на первом элементе дерева 

Есть у меня подозрение, что это не совсем то выделение...сделай так - кинь на форму с деревом кнопочку, и по клику выдай сообщение с текстом выделенного нода. То есть появилась форма - там якобы выделен первый элемент, и ты сразу же на кнопочку жмешь...а потом тут отпишешь какую ошибку тебе выдало smile 


--------------------
user posted image
Спасибо делается вот так!!!
PM MAIL WWW   Вверх
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   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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