Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 25655
Рейтинг: 2085
#31: 2008-11-03 11:41:27 ЛС | профиль | цитата
Dilma писал(а):
Т.е. примерно такая схема получится

Я так и подумал, что через GlobalVar.

Dilma, а нельзя ли предусмотреть задержку перед выполнением каждой дочерней схемы и событие окончания перебора, потому, что в стандартной схеме это реализовать можно.

Если я правильно понял, то перебор осуществляется здесь, значит как-то вот так


#pas
procedure THIPolymorphMulti.doWork;
var i:integer;
dt:TData;
begin
for i := 0 to FChilds.Count-1 do
begin
sleep(_prop_Delay);
dt := Data;
_hi_onEvent(THiPoliEdit(FChilds.Items[i]).Works[Index], dt);
end;
_hi_onEvent(_event_onEndWork);
end;



------------ Дoбавленo:


Да, еще один момент -- при попытке сделать копию ссылки на на Polymorph (по Ctrl-V) вылетает ошибка и блокирует дальнейшую работу. Если это дело не предусмотрено, то надо бы заблокировать.
карма: 19

1
Голосовали:Konst
Администрация
Ответов: 15278
Рейтинг: 1514
#32: 2008-11-03 12:18:31 ЛС | профиль | цитата
nesco писал(а):
Я так и подумал, что через GlobalVar.

это не GlobalVar Важное отличие в том, что данные поля доступны только из базового класса и его потомка. Кроме того они создаются для каждого экземпляра класса.

nesco писал(а):
нельзя ли предусмотреть задержку перед выполнением каждой дочерней схемы

это еще зачем

nesco писал(а):
и событие окончания перебора

окончание перебора это возврат управления после вызова соответствующего метода. Поэтому доделывать тут ничего не требуется
------------ Дoбавленo:

nesco писал(а):
Если это дело не предусмотрено

со ссылками разберемся попозже
карма: 26
0
Разработчик
Ответов: 25655
Рейтинг: 2085
#33: 2008-11-03 12:33:05 ЛС | профиль | цитата
Dilma писал(а):
это еще зачем

А если мне необходимо по циклу организовать обращение к PolyMorphy и после каждого обращения к наследнику организовать заверешение всей очереди событий внешних оконных процедур и асинхронных методов
Да, кстати, а как оно поведет себя при наличии асинхронных потоков внутри схем
карма: 19

0
Администрация
Ответов: 15278
Рейтинг: 1514
#34: 2008-11-03 12:43:11 ЛС | профиль | цитата
nesco писал(а):
А если мне необходимо по циклу организовать обращение к PolyMorphy и после каждого обращения к наследнику организовать заверешение всей очереди событий внешних оконных процедур и асинхронных методов

не понимаю, чем как от этого может sleep спасать поэтому хотелось бы демонстрацию проблемы

nesco писал(а):
Да, кстати, а как оно поведет себя при наличии асинхронных потоков внутри схем

ну наверно как схему спроектируют так и поведет
карма: 26
0
Разработчик
Ответов: 25655
Рейтинг: 2085
#35: 2008-11-03 13:27:02 ЛС | профиль | цитата
Dilma писал(а):
не понимаю, чем как от этого может sleep спасать

Сейчас не могу на скорую руку нарисоваь необходимую схему, мне надо попробовать законченный компонент затолкать в свою прогу, тогда я смогу что-то сказать.
карма: 19

0
Ответов: 2125
Рейтинг: 159
#36: 2008-11-03 14:42:22 ЛС | профиль | цитата
Dilma писал(а):
интерфейс которых полностью идентичен и определяется интерфейсом базового контейнера с именем base

Раз уж мы сюда ещё и наследование прикручиваем, то одноуровневое наследование - это не совсем правильно. Лучше уж тогда полноценное дерево классов отображать, где-нибудь справа, что-ли. А базовый класс - сделать главным элементом схемы, и автоматом добавлять его точки, т.е. в списке точек у наследника будут только новые. И обозвать тогда уж всё это дело классом.
карма: 1

0
Ответов: 3655
Рейтинг: 69
#37: 2008-11-03 14:44:08 ЛС | профиль | цитата
Dilma писал(а):
при вставке куда? закладка где? миниатюры чего?

Вообщем подробно так.
Устанавливаем на рабочий стол мультик.
При этом появляется ещё одна вкладка

карма: 0

0
Ответов: 2125
Рейтинг: 159
#38: 2008-11-03 14:46:33 ЛС | профиль | цитата
Dilma писал(а):
если в качестве текущей ничего не задано, то любое doWork дублируется на все схемы контейнера

А если мне одну точку нужно только для выбранного (по ##select) вызывать, а другую - для всех? Может лучше сделать специальное значение для ##select, типа - для всех? Или точку ##select_all?
карма: 1

0
Ответов: 3655
Рейтинг: 69
#39: 2008-11-03 15:05:42 ЛС | профиль | цитата
Вообщем подробно так.
Устанавливаем на рабочий стол мультик.
При этом появляется ещё одна вкладка

После клика на вкладке

при клике на иконке видим схему мультика
карма: 0

0
файлы: 2145648.jpg [14.1KB] [274], 143949.jpg [15.1KB] [312]
Ответов: 870
Рейтинг: 12
#40: 2009-01-10 16:57:38 ЛС | профиль | цитата
tsdima - опять со своим ооп ...
Не опять а снова !
Может вспоним хорошо забытое старое ?

В порядке важности (ИМХО разумеется)
Наследование
Указатель
"Пустой элимент "
Зы
Рад что идеи днамической колекции разных схем живы .
Как я писапл когда-то что-то подбное напрашивается из основных идей ООП
Раньше просто небыло достаточно средсв для реализации
Зы Зы
С опозданием поздравляю хайасместеров с новым годом
карма: 1

0
Администрация
Ответов: 15278
Рейтинг: 1514
#41: 2009-01-11 01:30:20 ЛС | профиль | цитата
tsdima писал(а):
Раз уж мы сюда ещё и наследование прикручиваем, то одноуровневое наследование - это не совсем правильно. Лучше уж тогда полноценное дерево классов отображать, где-нибудь справа, что-ли. А базовый класс - сделать главным элементом схемы, и автоматом добавлять его точки, т.е. в списке точек у наследника будут только новые

единственная проблема в реализации таких идей состоит только в том, чтобы очередной раз вывернуть кодогенератор пакета так, чтобы это стало возможно... С поддержкой в среде как раз таки проблем обычно нет.

Вячеслав писал(а):
Вообщем подробно так.
Устанавливаем на рабочий стол мультик.
При этом появляется ещё одна вкладка

да это не плохая идея.

Думаю теперь, когда у всех стоит 173 версия и можно "пощупать" на практике то, о чем тут идет речь мы продолжим разработки в этом направление после окончания работ над комплексом элементов для печати документации.
карма: 26
0
Ответов: 3655
Рейтинг: 69
#42: 2009-01-11 02:32:49 ЛС | профиль | цитата
Dilma писал(а):
мы продолжим разработки в этом направление после окончания работ над комплексом элементов для печати документации.

Окей.
карма: 0

0
Разработчик
Ответов: 25655
Рейтинг: 2085
#43: 2009-01-19 00:01:18 ЛС | профиль | цитата
Dilma, а у меня ошибку компилятора выдает в любой схеме с полиморфом, даже в такой



Add(MainForm,2953706,252,133)
{
}
Add(PolymorphMulti,323605,252,182)
{
Childrens=#3:001|3:002|3:003|3:004|
Selected="base"
}
BEGIN_SDK
Add(PoliEdit,13983968,21,21)
{
}
END_SDK
BEGIN_SDK
Add(PoliEdit,8894689,21,21)
{
}
END_SDK
BEGIN_SDK
Add(PoliEdit,10225780,21,21)
{
}
END_SDK
BEGIN_SDK
Add(PoliEdit,364292,21,21)
{
}
END_SDK
BEGIN_SDK
Add(PoliEdit,383836,21,21)
{
}
END_SDK


Ошибка вот такая


D:\HiAsm_Archives\HiAsm_b173\Elements\delphi\code\Project3.dpr(115) Error: Incompatible types: 'PControl' and 'Pointer'

D:\HiAsm_Archives\HiAsm_b173\Elements\delphi\code\Project3.dpr(116) Error: Incompatible types: 'PControl' and 'Pointer'

D:\HiAsm_Archives\HiAsm_b173\Elements\delphi\code\Project3.dpr(117) Error: Incompatible types: 'PControl' and 'Pointer'

карма: 19

0
Разработчик
Ответов: 25655
Рейтинг: 2085
#44: 2009-01-20 12:28:13 ЛС | профиль | цитата
Вот эта схема куда-то потеряла select



Add(MainForm,2953706,161,147)
{
link(onCreate,11418012:doEnum,[])
}
Add(PolymorphMulti,9047449,343,161)
{
Childrens=#3:001|3:002|3:003|3:004|3:005|
Selected="005"
link(Out,3546237:doText,[])
}
BEGIN_SDK
Add(PoliEdit,7769199,21,21)
{
WorkCount=#59:##Add=Создает дочерний контейнер по указанному имени класса|8:##select|
EventCount=#3:Out|
VarCount=#7:##count|
Width=468
Height=291
Point(##select)
Point(##count)
}
END_SDK
BEGIN_SDK
Add(PoliEdit,10876785,21,21)
{
WorkCount=#59:##Add=Создает дочерний контейнер по указанному имени класса|8:##select|
EventCount=#3:Out|
VarCount=#7:##count|
Width=468
Height=291
Point(##select)
Point(##count)
link(##select,10876785:Out,[(255,34)(255,27)])
}
END_SDK
BEGIN_SDK
Add(PoliEdit,14896954,21,21)
{
WorkCount=#59:##Add=Создает дочерний контейнер по указанному имени класса|8:##select|
EventCount=#3:Out|
VarCount=#7:##count|
Width=468
Height=291
Point(##select)
Point(##count)
link(##select,14896954:Out,[(255,34)(255,27)])
}
END_SDK
BEGIN_SDK
Add(PoliEdit,13506238,21,21)
{
WorkCount=#59:##Add=Создает дочерний контейнер по указанному имени класса|8:##select|
EventCount=#3:Out|
VarCount=#7:##count|
Width=468
Height=291
Point(##select)
Point(##count)
link(##select,13506238:Out,[(255,34)(255,27)])
}
END_SDK
BEGIN_SDK
Add(PoliEdit,2662196,21,21)
{
WorkCount=#59:##Add=Создает дочерний контейнер по указанному имени класса|8:##select|
EventCount=#3:Out|
VarCount=#7:##count|
Width=468
Height=291
Point(##select)
Point(##count)
link(##select,2662196:Out,[(255,34)(255,27)])
}
END_SDK
BEGIN_SDK
Add(PoliEdit,14813174,21,21)
{
WorkCount=#59:##Add=Создает дочерний контейнер по указанному имени класса|8:##select|
EventCount=#3:Out|
VarCount=#7:##count|
Width=468
Height=291
Point(##select)
Point(##count)
link(##select,14813174:Out,[(255,34)(255,27)])
}
END_SDK
Add(StrList,1874948,224,91)
{
Strings=#3:001|3:002|3:003|3:004|3:005|
}
Add(ArrayEnum,11418012,238,161)
{
link(onItem,9047449:##Add,[])
link(Array,1874948:Array,[])
}
Add(Button,5572794,161,238)
{
Left=30
Top=25
Data=String(base)
link(onClick,13879505:doTimer,[])
}
Add(Timer,13879505,210,238)
{
Enable=1
link(onTimer,1459143:doNext,[])
}
Add(Counter,1459143,266,238)
{
Max=5
link(onNext,9047449:##select,[(314,244)(314,174)])
}
Add(Edit,3546237,413,161)
{
Left=110
Top=25
Width=105
Text=""
}



C:\HiAsm_b174\Elements\delphi\code.\hiMainForm_8DFBD78.pas(199) Error: Undeclared identifier: 'select'

карма: 19

0
Администрация
Ответов: 15278
Рейтинг: 1514
#45: 2009-01-20 14:07:48 ЛС | профиль | цитата
его там и нет, потому что в PolymorphMulti отсутствует такое понятие как текущая схема.

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