Форум: "Основная";
Текущий архив: 2002.12.05;
Скачать: [xml.tar.bz2];
ВнизЕсть ли ошибка в моём коде? Найти похожие ветки
← →
^Sanya (2002-11-24 10:41) [0]Дело в том, что эта функция процентов на 99 должна давать сбой :(
Наверное здесь уместно внедрять указатели, но как???
Данная функция ищет и возвращает дочернюю форму типаTfrmMDIchildBaseNav
в MDI-приложении:
function GetBaseNavForm: TfrmMDIchildBaseNav;
var
i: Integer;
begin
Result := nil;
if frmMDIparent.MDIChildCount > 0 then
for i := 0 to frmMDIparent.MDIChildCount-1 do
if (frmMDIparent.MDIChildren[i] is TfrmMDIchildBaseNav) and
(frmMDIparent.MDIChildren[i] <> nil) then
begin
Result := (frmMDIparent.MDIChildren[i] as TfrmMDIchildBaseNav);
Exit;
end;
end;
← →
Anatoly Podgoretsky (2002-11-24 10:48) [1]Почему должна?
Ну если очень нужно, то делай это через
if Random(100)=99 then генерируй ошибку
← →
^Sanya (2002-11-24 13:16) [2]Неужели я что-то написал, и Anatoly Podgoretsky счёл это верным???
Кстати, ремарка насчёт Вашего Random"а....:
if Random(100) < 100 then raise.....
Почему вы не можете просто конструктивно помочь человеку?
Я ещё многого не знаю, учусь же...
2All: значит никакой ошибки нет?
← →
Anatoly Podgoretsky (2002-11-24 13:25) [3]Ну ты сам просил сделать ошибку с вероятностью 99
А так вот например глобальная переменная frmMDIparent с неизвестным состоянием, четкий источник для ошибки. Если это не учитывать то ошибки нет.
← →
Matolch (2002-11-24 13:32) [4]А мне просто интересно - for с обрывом - это нормально? Я, как правило, использую что-то типа while или repeat, Inc(I). Цикл for, вроде попроще.
← →
^Sanya (2002-11-24 13:52) [5]
> Anatoly Podgoretsky © (24.11.02 13:25)
Теперь спасибо, будем думать дальше..
← →
Matolch (2002-11-24 14:11) [6]> ^Sanya © Слушай, а у тебя правда ошивка возникает*, или вообще почему она должна давать сбой, по твоему?
← →
^Sanya (2002-11-24 14:24) [7]Просто иногда я уничтожаюдочернюю форму, а MDIChildCount не изменяется...
Щас разбираюсь...
Большая (по крайней мере для меня) программа, труднова-то ошибочку отловить...
"Access Violation"...
:(
Но в любом случае отловлю, в Delphi у меня всё задуманное всегда получалось:)
← →
Matolch (2002-11-24 14:28) [8]Ну, удачи, дружище
← →
TTCustomDelphiMaster (2002-11-24 14:28) [9]begin
Result := nil;
if frmMDIparent.MDIChildCount > 0 then // Это лишнее
if frmMDIparent <> nil then // Ато может быть не лишним, а может и не быть
for i := 0 to frmMDIparent.MDIChildCount-1 do
if (frmMDIparent.MDIChildren[i] is TfrmMDIchildBaseNav) and
(frmMDIparent.MDIChildren[i] <> nil) then // Здесь второе условие нужно поставить вперед или выкинуть
begin
Result := (frmMDIparent.MDIChildren[i] as TfrmMDIchildBaseNav);
Exit;
end;
end;
← →
Matolch (2002-11-24 14:38) [10]
> TTCustomDelphiMaster ©
> // Здесь второе условие нужно поставить вперед или выкинуть
← →
Anatoly Podgoretsky (2002-11-24 14:39) [11]Главная проблема в том что это глобальная переменная frmMDIparent, со всеми возможными неприятностями, надо просто это сделать методом, но и это возможно полностью не устранит проблему, но для анализа недостаточно информации.
← →
^Sanya (2002-11-24 15:45) [12]Изменил кое-какой код(который, к сожалению сюда никак не влезет)
и всё теперь без глюков.
Поясню:
MDI:
есть Проводник Таблиц(TfrmMDIchildBaseNav), есть Возможность удаления таблиц.
После удачного удаления таблицы, Проводник Таблиц нужно обновить.
Я хотел это сделать, пересоздавая окно ПТ.
Но такой вариант являлся не самым оптимальным и довольно глючным(от моих корявых рук, наверное).
Теперь ПТ я не пересоздаю, а просто его методом очищаю/читаю нужные данные...
ЗЫ: Когдавозникает ошибка "корявом",т.е. неоптимальном коде, я его не оптимизирую, пока не выявлю ошибку...
Пока я учусь, я часто специально иду на риск, чтобы лучше познать среду.
Надо ли так поступать, зная, что код с ошибкой заведомо "корявый"???
← →
VaS (2002-11-24 17:14) [13]Можно написать короче и прозрачнее:
function GetBaseNavForm: TfrmMDIchildBaseNav;
var
i: integer;
begin
Result:=nil;
if frmMDIparent <> nil then with frmMDIparent do
for i:=0 to MDIChildCount-1 do
if MDIChildren[i] is TfrmMDIchildBaseNav and
begin
Result:=TfrmMDIchildBaseNav(MDIChildren[i]);
break;
end;
end;
← →
PaRL (2002-11-24 23:03) [14]
> if MDIChildren[i] is TfrmMDIchildBaseNav and
> begin
???
← →
^Sanya (2002-11-25 00:38) [15]
> PaRL © (24.11.02 23:03)
Попробуйте догадаться, что имел ввиду
> VaS © (24.11.02 17:14)
:)))
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.12.05;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.023 c