Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.05;
Скачать: CL | DM;

Вниз

Есть ли ошибка в моём коде?   Найти похожие ветки 

 
^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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.012 c
1-14593
AArmageddon
2002-11-24 12:52
2002.12.05
общая


3-14432
Youri
2002-11-18 11:07
2002.12.05
Как сохранить позицию курсора в DBGrid?


8-14686
sachem
2002-08-14 17:47
2002.12.05
Как можно нарисовать Характеристику mp3 файла?


1-14492
Daken
2002-11-26 07:15
2002.12.05
Помогите вытащить символ


14-14819
Карлсон
2002-11-15 20:14
2002.12.05
звездный дождь.