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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Try..Finally..End, ГДЕ ОШИБКА?! 
:(
    Опции темы
aktuba
Дата 21.12.2006, 05:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



В программе есть такой код:

Код

procedure TfrmMain.LoadEditor;
var
    lData: PDataNode;
  path: WideString;
begin
    Editor.BeginUpdate;
//  try
    Editor.Clear;
    lData := VTree.GetNodeData(VTree.FocusedNode);
    if not Assigned(lData) then Exit;
    path := lData^.Data[tbc.TabIndex].Path;
    if (path <> '') and FileExists(path) then
      begin
        EditorCurTextStyleChanged(nil);
        EditorCurParaStyleChanged(nil);
        Editor.LoadRVF(path);
        Editor.Format;
        lData^.ActiveTab := tbc.TabIndex;
      end;
    Editor.ReadOnly := lData^.Lock;
//  finally
    Editor.EndUpdate;
    Editor.SetFocus;
//  end;
end;


Все работает, НО если раскомментировать Try..Finally..End, то в строке 
Код

lData := VTree.GetNodeData(VTree.FocusedNode);
 выскакивает ошибка. Что-то связанное с попыткой получить доступ к свойству Focused у невидимого компонента. 

Для справки: Editor - TRichViewEdit, VTree - TVirtualStringTree.

В чем здесь проблема, не подскажите??? smile 


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


Опытный
**


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

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




Цитата

доступ к свойству Focused у невидимого компонента
Вообще-то, фокус может иметь только видимое окно. Может в этом дело.
PM MAIL   Вверх
aktuba
Дата 21.12.2006, 08:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Но без Try..Finally..End работает!!! Да и нет там такого. Там есть FocusedNode - узел, выделенный в данный момент в дереве.


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


Опытный
**


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

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



Может он в данный момент не выделен?
PM MAIL   Вверх
MetalFan
Дата 21.12.2006, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


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

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



Editor.SetFocus;
заменить на 
if Editor.CanFocus then
  Editor.SetFocus;


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Snowy
Дата 21.12.2006, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Дело явно не в try..finally
Копай в другую сторону smile
PM MAIL   Вверх
Nicholas_S
Дата 21.12.2006, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



aktuba, ты запускаешь приложение из среды Delphi или само по себе?
В первом случае вполне возможно появление ошибки.
Попробуй запустить файлом.


--------------------
...все в мире относительно
PM   Вверх
aktuba
Дата 21.12.2006, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Тутанхамец
Цитата

Может он в данный момент не выделен? 


Значит он равен nil. Это нормальная ситуация. Повторяю - ошибка происходит ТОЛЬКО тогда, когда в коде есть Try..Finally..End. 

MetalFan
Цитата

Editor.SetFocus;
заменить на 
if Editor.CanFocus then
  Editor.SetFocus; 


Metal, ну посмотри в какой строке ошибка =))))

Snowy - в какую??? пока просто исключил из этого кода Try..Finally..End. Точнее закоментировалал.

Nicholas_S - ошибка происходит когда запускаю приложение из среды. Почему, в этом случае, такая ошибка возможна? 


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


Аццкий Сотона
****


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

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



Цитата

выскакивает ошибка. Что-то связанное с попыткой получить доступ к свойству Focused у невидимого компонента

какой вопрос, такой ответ)
напиши ТЕКСТ ошибки.

назначены обработчики OnFocusChanging/Change ?


Это сообщение отредактировал(а) MetalFan - 21.12.2006, 23:16


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Nicholas_S
Дата 21.12.2006, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



aktuba, 
Цитата

ошибка происходит когда запускаю приложение из среды.

Т.е. когда файлом, то все окей?


--------------------
...все в мире относительно
PM   Вверх
aktuba
Дата 21.12.2006, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



MetalFan - я даже написал в какой строке происходит ошибка.

Nicholas_S - да, когда файлом - все Ok.


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


Опытный
**


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

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



aktuba, значит все ок, так и должно быть.
Когда запускаешь в среде Delphi, секции try-except/finally при возникновении исключения выкидывают в среду разработки, чтобы программист - то есть ты - знал, где произошло исключение.
Но вот почему без них у тебя работает, интересно.
Можешь кинуть код полностью сюда, посмотрю.


--------------------
...все в мире относительно
PM   Вверх
Тутанхамец
Дата 23.12.2006, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Значит он равен nil. Это нормальная ситуация. 


Ну да. Я это и имел в виду. 
PM MAIL   Вверх
MetalFan
Дата 23.12.2006, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


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

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



СЕМЕН СЕМЕНЫЧ!!!
ну емое!!!!
куда я глядел!

перечеитал еще раз представленный вначале код!

ЕЩЕ РАЗ рекомендую заменить
 Editor.SetFocus
на if Editor.Canfocus then
  Editor.SetFocus
или вообще убрать его в блок try..finally

ибо в случае try..finally..end
при ЛЮБОМ исключении, а так же при Exit ОБЯЗАТЕЛЬНО неявно выполнится код после finally....
поставь бряк,  увидишь ;)

з.ы. ЧИТАЕМ ХЕЛП
 If an exception is raised during execution of statementList1, 
control is transferred to statementList2; 
once statementList2 finishes executing, the exception is re-raised. 
If a call to the Exit, Break, or Continue procedure causes control to leave 
statementList1, statementList2 is automatically executed. 
Thus the finally clause is always executed, 
regardless of how the try clause terminates.


Это сообщение отредактировал(а) MetalFan - 23.12.2006, 19:50


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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