Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PowerBuilder Новый топик    Ответить
 текущий DataWindow  [new]
AlibekD
Member

Откуда:
Сообщений: 37
Как можно определить текущую DW?
28 янв 09, 14:34    [6748255]     Ответить | Цитировать Сообщить модератору
 Re: текущий DataWindow  [new]
Dmitry..
Guest
getFocus() ?
28 янв 09, 14:37    [6748279]     Ответить | Цитировать Сообщить модератору
 Re: текущий DataWindow  [new]
AlibekD
Member

Откуда:
Сообщений: 37
В окне 2 DW. В меню добавил вкладки вставку, удаление записей.
Теперь не могу определить для какой DW это событие.
Может есть событие типа post DW, там бы я записал в глобальную переменную название DW,
и при выборки в меню "Вставка","Удаление" подставлял бы из гл. пер. значение,
Подскажите как это зделать?
28 янв 09, 14:40    [6748314]     Ответить | Цитировать Сообщить модератору
 Re: текущий DataWindow  [new]
PL99
Member

Откуда: Moscow
Сообщений: 1367
AlibekD
В окне 2 DW. В меню добавил вкладки вставку, удаление записей.
Теперь не могу определить для какой DW это событие.
Может есть событие типа post DW, там бы я записал в глобальную переменную название DW,
и при выборки в меню "Вставка","Удаление" подставлял бы из гл. пер. значение,
Подскажите как это зделать?

Примерный ход решения вот такой:
//В окне
//1. Объявление инстанс-переменной 
datawindow idw_current

//2. Событие окна, которое вызывается из меню - ue_myevent();
if isValid(idw_current) then
	idw_current.triggerevent ("ue_myevent")
end if

//В обоих DW
//3. event getfocus;
idw_current = this

// В каждом DW
//4. event ue_myevent();
MessageBox("", "DW_1")

//5. event ue_myevent();
MessageBox("", "DW_2")

При необходимости можно сбрасывать переменную idw_current в событии LoseFocus каждого DW.
28 янв 09, 15:09    [6748595]     Ответить | Цитировать Сообщить модератору
 Re: текущий DataWindow  [new]
Dmitry..
Guest
если ты програмно не можешь разобраться, то пользователь и подавно запутается...
упрощай интерфейс.

то-что ты написал сделать можно, но это нехорошо.. имхо.
--объявляешь инстанс переменную в окне
datawindow idw_current

--создаешь событие в окне например для удаления строки "ue_row_delete"
if isValid(idw_current) then ...

--на событии getfocus в каждом датавиндов ставишь 
idw_current=this

--в менюшке ставишь
parentwindow.triggerevent("ue_row_delete")
28 янв 09, 15:16    [6748647]     Ответить | Цитировать Сообщить модератору
 Re: текущий DataWindow  [new]
AlibekD
Member

Откуда:
Сообщений: 37
Всем спасибо, получилось
29 янв 09, 06:50    [6751336]     Ответить | Цитировать Сообщить модератору
 Re: текущий DataWindow  [new]
AlibekD
Member

Откуда:
Сообщений: 37
а вот при использовании Query, ошибки

idw_current.inv_querymode.of_SetEnabled(TRUE)

Error C0019: Incompatible property inv_querymode for type datawindow
29 янв 09, 07:35    [6751361]     Ответить | Цитировать Сообщить модератору
 Re: текущий DataWindow  [new]
Dmitry..
Guest
переменную idw_current можешь обьявить такого-же типа как и твои датавиндов (если они одного типа).
29 янв 09, 11:51    [6752343]     Ответить | Цитировать Сообщить модератору
 Re: текущий DataWindow  [new]
AIS
Member

Откуда:
Сообщений: 1695
Всё, что выше сказано правильно, но этого мало. Надо задействоать ещё и другие события, например:
- окно получило/потеряло фокус;
- взаимодествия пользователя с меню;
- клавиатурные переходы и т.д.
И конечно управлять доступом к пунктам меню у каждого окна.

Занимался той же проблемой и все равно при длительном тестировании выплывает событие когда нет синхронизации между доступом к пункту меню и DW в фокусе. :(
Может есть какой-то ещё общий способ решения такой задачи либо правило? Ведь это касается не только DW, а любого элемента окна и его синхронизации с меню этого окна.

А кстати, как визуально показывать какое DW в фокусе? Есть какие-то правила или удачный опыт?
29 янв 09, 12:50    [6752900]     Ответить | Цитировать Сообщить модератору
 Re: текущий DataWindow  [new]
Dmitry..
Guest
самое простое - менять у датавиндов border
--
зачем обрабатывать другие события не понятно.
меню работает с конкретным окном.
активное датавиндов в конкретном окне - одно.
так-что если у вас переменная idw_current обьявлена в окне то не вижу никаких проблем.
getfocus должно хватать.
29 янв 09, 13:59    [6753467]     Ответить | Цитировать Сообщить модератору
 Re: текущий DataWindow  [new]
AIS
Member

Откуда:
Сообщений: 1695
Dmitry..

зачем обрабатывать другие события не понятно.

Например, переход от DW к DW через другой элемент окна. Пункт меню "Печать DW" должен это отловить. Значит надо задействовать событие потери фокуса DW. Но при этом сразу возникает вопрос:
А как поведет себя пункт меню при переходе от DW к DW напрямую? Всегда ли сохранится очередность событий?
Можно ещё пофантазировать, т.к. думаю что всё же не всё так просто.

А вообще мысль ранее возникла другая: это визуально показывать не какой элемент окна в данный момент в фокусе (т.к. нет необходимости печатать кнопки и т.п. и сканировать фокусы), а именно какой элемент сейчас готов к печати (и пусть у него даже нет фокуса).
Кто что по этому поводу думает?
29 янв 09, 14:46    [6753839]     Ответить | Цитировать Сообщить модератору
 Re: текущий DataWindow  [new]
AIS
Member

Откуда:
Сообщений: 1695
И ещё... Креатив прет не по детски. :)
Бог с ним с "Печатью DW". Фокус сохраняется, но меняется содержимое DW (типа добавили или удалили) и пункт меню должен отреагировать. И шо? Мы в фокусе, а "обстоятельства" изменились. К примеру, нам уже и нечего печатать. А по серьёзному, надо управлять кнопками "Добавить", "Удалить" и т.д. и на всё предыдущее "Заказкик" уже отзывается "неприятными словами".
Хорошо если мы в Одессе.
29 янв 09, 23:10    [6756137]     Ответить | Цитировать Сообщить модератору
Все форумы / PowerBuilder Ответить