Вверх ↑
Этот топик читают: Гость
Ответов: 1397
Рейтинг: 50
#1: 2007-07-31 20:24:16 ЛС | профиль | цитата
Ничего не приходит в голову как можно организовать выполнение программы с изменяющимся количеством исходных данных. В качестве примера привожу схему рассчета объема помещения. Загвоздка в том, что помещений участвующих в расчете может изменяться при разных расчетах. В приведенном мной примере взято два помещения. Для следующего расчета их может быть три, четыре или сто. Каким образом все это можно реализовать?
code_1764.txt
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
файлы: 1code_1764.txt [22.5KB] [321]
Ответов: 899
Рейтинг: 43
#2: 2007-08-01 00:13:37 ЛС | профиль | цитата
В плане комнат так
code_1765.txt

Использован нестандартный компонент TabControlEx (Delphi)

а с вычислением подумать надо

[size=-2]------ Добавлено в 23:41
Блин, а с математикой TabControlEx не дружит, постоянно такая муть выпрыгивает



[size=-2]------ Добавлено в 00:13
А вот и расчет
code_1766.txt
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
файлы: 3code_1765.txt [1.8KB] [181], Access.JPG [17.8KB] [311], code_1766.txt [2.4KB] [171]
Ответов: 1397
Рейтинг: 50
#3: 2007-08-01 07:23:16 ЛС | профиль | цитата
unalex, спасибо! То шо надо.
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 262
Рейтинг: 6
#4: 2007-08-02 09:24:09 ЛС | профиль | цитата
unalex писал(а):
Блин, а с математикой TabControlEx не дружит, постоянно такая муть выпрыгивает

а можно поподробнее? Схему, описание ошибки-глюка или действий к нему приведших. Пока не пойму при чем здесь математика. Но все можно исправить.
карма: 0

0
Ответов: 9906
Рейтинг: 351
#5: 2007-08-02 09:42:59 ЛС | профиль | цитата
Chesh писал(а):
Но все можно исправить

Тогда начинай с того, что менять парента мимо KOL - неправильно, и рано или поздно крякнет.

[size=-2]------ Добавлено в 09:42
Впрочем, и через KOL - тоже никто сладкой жизни не обещал...
карма: 9

0
Ответов: 899
Рейтинг: 43
#6: 2007-08-02 13:14:12 ЛС | профиль | цитата
Chesh писал(а):
а можно поподробнее? Схему, описание ошибки-глюка или действий к нему приведших

Проще некуда: кинь на форму TabControlEx и Math/MathParse

HiAsm 3.64b164, Delphi

Add(MainForm,2140627,21,105)
{
Left=20
Top=105
Height=219
}
Add(TabControlEx,196092,182,154)
{
Left=10
Top=15
Width=360
Bitmaps=[]
}
Add(Math,10305105,182,210)
{
}
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 1397
Рейтинг: 50
#7: 2007-08-02 19:56:20 ЛС | профиль | цитата
При попытке компилировать TabControlEx и Math/MathParse выскакивала ошибка.
Компилирование TabControlEx1_2 и Math/MathParse происходит удачно, но при закрытии программы опять ошибка как уunalex, :?
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 262
Рейтинг: 6
#8: 2007-08-03 08:15:13 ЛС | профиль | цитата
Подтверждаю. Ошибка есть. Рождается она в destructor-e THIWin.Destroy в win.pas.
destructor THIWin.Destroy;
begin
if not NoKill then begin
Split.Free;
Control.Visible := false; //for Global_Align(Parent) <<<<< в этой строке.
Control.Free;
end;
inherited;
end;
Пока я не могу ответить в чем дело. И не пойму как это связано с math. Буду посмотреть
Возможно поможет кто то из старших. Galkov?

[size=-2]------ Добавлено в 08:15
Пока выяснил, что виноват HiMathParse.
HiMath просто использует две функции из него ArcTan2 и LogN. Убираем uses HiMathParse, копируем эти функции ручками и ошибки нет.
---
Далее ...
в hiMathParse.pas, в начале пишем {$define F_P}. т.е. делаем сборку под freepascal. замечаем, что ошибка исчезла. как вывод напрашивается вопрос
uses Kol,
     {$ifndef F_P}err,{$endif}
что то в юните err.dcu вызывает ошибку?
карма: 0

0
Администрация
Ответов: 15295
Рейтинг: 1519
#9: 2007-08-03 08:33:33 ЛС | профиль | цитата
в err.dcu ошибку ничто не вызывает. Он содержит код по отлову исключений, вызываемых в программе.
карма: 27
0
Ответов: 262
Рейтинг: 6
#10: 2007-08-03 08:48:13 ЛС | профиль | цитата
Dilma, но ведь приведенная выше схема не содержит ни одной связи. т.е. код с исключениями не выполняется.
карма: 0

0
Ответов: 9906
Рейтинг: 351
#11: 2007-08-03 10:20:18 ЛС | профиль | цитата
Chesh, ну я же тебе говорил:
Galkov писал(а):
рано или поздно крякнет

Ты изменил данные о родительстве через winApi. Данные в контролах об этом ничего не знают - они имеют у себя другое дерево взаимоподчиненности.
Которое используют при уничтожении. Вполне возможно, что при каком-то стечении обстоятельств виндячий объект пытается уничтожиться дважды: сначала его винда уничтожила как реального детишку при уничтожении родителя, а потом KOL, пытаясь уничтожить контрол.

Как в реальности, и в какой последовательности это происходит, исследовать - настроения аж никакого.
Просто не надо дурить самого себя, не придется заниматься героическим преодолением трудностей.
Это философия такая: никогда не планируй себе трудностей "на потом". "На потом" их будет и без твоего планирования - выше крыши.
Реально, вместо winApi надо делать TControl.SetParent. Но даже при этом возможны проблемы: если конструктор контрола приаттачил обработчик своих нотификаций к паренту. Панели такого, правда, не делают...


А код с исключениями выполняется-то всегда. У компилятора, любимое занятие - это устроить try-finally блок при использовании "своих" динамических объектов (string) в качестве локальных переменных. Не зависимо от подключения err.pas
Мне просто думается, что err.pas просто малёхо изменил какие-то системные обработчики
Стал ходить чуть-чуть по другому - бомба и взорвалась.
А заложил-то ее - ты
карма: 9

0
11
Сообщение
...
Прикрепленные файлы
(файлы не залиты)