Страница 1 из 3

Визуализация работы...

Добавлено: 26 апр 2005, 10:44
DarkAngel27
Не кто не знает как можно в интерфейсе сделать визуализацию работы интерфейса в момент создания логической таблицы?
Чтобы было понятно при открытии данных в левом нижнем углу появляется статусная строка с процентнами открытия данных (к примеру при открытии накладных).

Добавлено: 26 апр 2005, 20:03
Maverick
системная хрень... с прикладухи не кодицца.

Добавлено: 27 апр 2005, 10:44
DarkAngel27
А как можно реализовать что-то подобное?

Добавлено: 27 апр 2005, 10:45
Maverick
нууу.... берешь пасовские исходники галактики....
... далее - по тексту :D

Добавлено: 27 апр 2005, 10:56
DarkAngel27
Это я понял... Тогда вопрос №2. Какое событие возникает самым первым, а какое событие последним, перед отображением браузера

Добавлено: 27 апр 2005, 11:00
Maverick
первое : cmInit
- это когда еще интерфейс не отображается на экране
последнее: cmDone - а это когда ты закрываешь интерфейс любым корректным способом (релоад компа сюда не входит)

Добавлено: 27 апр 2005, 11:26
DarkAngel27
Я имел ввиду сообщение, которое появляется последним не при закрытии интерфейса, а при отображении браузера.
Идея следующая: выводить визуализацию в cmInit, а в другом её стопить. Если конечно это реально...

Добавлено: 27 апр 2005, 12:14
Maverick
Если процесс длительный сам по себе, то визуалицация через StartNewVisual () ..NextVisual... StopVisual () еще более замедлит процесс инициализации.

Хотя идея здравая, только вот cmInit по сути, насколько я помню РТФМ, - единственное невизуальное событие перед отображением самой главной панели интерфейса, а равно и любого визуального элемента(будь то броуз или скрин), описанного в этой панели или без оной.

Добавлено: 27 апр 2005, 12:20
Maverick
тогда сие должно выглядеть примено так:

cmInit :
{

StartNewVisual ( vt..,vf...,'Title',0 );
// некие манипуляции
nextVisual;
// некие манипуляции
nextVisual;
// некие манипуляции
nextVisual;
// некие манипуляции
StopVisual ('',0);
}

Добавлено: 27 апр 2005, 13:22
DarkAngel27
Вся проблема в том что StopVisual нужно сделать в другом событии, которое возникает позже... А какое это событие я и хотел узнать

Re: Визуализация работы...

Добавлено: 27 апр 2005, 14:16
Max_Fin
DarkAngel27 писал(а):Не кто не знает как можно в интерфейсе сделать визуализацию работы интерфейса в момент создания логической таблицы?
Чтобы было понятно при открытии данных в левом нижнем углу появляется статусная строка с процентнами открытия данных (к примеру при открытии накладных).
Я так понял, что у вас в каком-то объекте интерфейса есть выбор чего-либо, который является корневым для панели броузера и при выборе происходит достаточный период задержки прежде чем произойдет обновление в броузере.
Если так то, возможно, проблема заключается в оптимизации подцепок в главной логической таблице.

Добавлено: 27 апр 2005, 14:18
Maverick
"позже" возникают только визуальные события, т.е. когда Ваш браузер УЖЕ виден.

Добавлено: 27 апр 2005, 15:38
DarkAngel27
TO Max_fin:
А что тут можно оптимизировать? Индекс в MY_TABLE есть такой f1+f2+f3. Было бы быстрее, если бы в фильтре не стояло 2 условия по nrec.
where
((
groupmc.nrec == katmc.cgroupmc
and katmc.nrec == MY_TABLE.f1
and word(Year(cur_date)) == MY_TABLE.f2
and word(Month(cur_date)) == MY_TABLE.f3
))
and katmc.isarch = word(0)
and (groupmc.nrec = comp(281474976710748)
or groupmc.nrec = comp(281474976710688))
order by katmc.name
;
TO Maverick : Спасибо за помощь

Добавлено: 27 апр 2005, 15:51
Maverick
Поясняю - Макс правильно сказал - логическая таблица - неоптимальная. сильные тормоза возникают из-за использования фильтра на всю выборку.. отсюда и тормоза... визуализация здесь не поможет - необходимо оптимизировать лог.таблу.

для начала, расскажи словами что хочешь отобразить

Ну вот!

Добавлено: 27 апр 2005, 16:05
Max_Fin
Я не знаю, конечно, как ты хочешь отображать в интерфейсе, но по тому что я сейчас вижу нужно следующее
на инит перекинуть groupmc во временную табличку и юзать именно ее в гл. логической таблице
что-то вроде это

Код: Выделить всё


...
where 
(( 
TmpGrMC.nrec == katmc.cgroupmc 
and word(0) == katmc.isarch(noindex)
and katmc.nrec == MY_TABLE.f1 
and word(Year(cur_date)) == MY_TABLE.f2 
and word(Month(cur_date)) == MY_TABLE.f3 
)) 
order by katmc.name 
; 

...

procedure InsertTmpGr;
{
  TmpGrMC.nRec := GroupMC.nRec;
  TmpGrMC.Name := GroupMC.Name;
  TmpGrMC.Kod := GroupMC.Kod;
  ....
  insert current TmpGrMC;
}
....
HandleEvent
cmInit:
{
  if GetFirst FastFirstRow GroupMC where ((comp(281474976710748) == GroupMC.nRec)) = tsOK InsertTmpGr;
  if GetFirst FastFirstRow GroupMC where ((comp(281474976710688) == GroupMC.nRec)) = tsOK InsertTmpGr;
}
...
end; //HandleEvent
Хотя честно говоря использование реальных компов тоже не правильно, хотя бы по номеру группы лучше бы было позиционироваться
например

Код: Выделить всё

  if GetFirst FastFirstRow GroupMC where ((Word(10) == GroupMC.Kod)) = tsOK InsertTmpGr;
  if GetFirst FastFirstRow GroupMC where ((Word(20) == GroupMC.Kod)) = tsOK InsertTmpGr;