Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
8-14697
Ал
2002-08-19 15:54
2002.12.05
OpenGL


1-14610
PaRL
2002-11-23 09:55
2002.12.05
Бред какой-то


6-14711
Slava V.
2002-10-09 11:34
2002.12.05
Как проверить свободен порт или нет?


3-14446
Alex_Sudakov
2002-11-15 13:44
2002.12.05
SQLDMO


1-14544
artgamer
2002-11-26 16:43
2002.12.05
Помогите разобраться!!!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский