Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PowerBuilder Новый топик    Ответить
 Проблемы со скроллингом в dddw. Do not open by DialUp!  [new]
Dmitry Belousov
Member

Откуда:
Сообщений: 76
Заранее прошу прощения у уважаемого модератора за huge posting.
Просто без приведенного простейшего примера мой вопрос будет выглядеть слишком расплычато и голословно...
So, не гневись ASCRUS! Картинка с другого сайта.

На PB 6.5 при закачке в dddw достаточно большого значения > 5000
и последующего скролинга по dddw клавишами или мышью/скролбаром приложение стабильно грохает GDI в W2k.
Начинают криво перерисовываться окна приложений... Дальше - больше вплоть до полного провиса системы под холодную перезагрузку.
Проверено разными людьми на разных машинах. Кто-нибудь встречался с чем-нибудь подобным и как боролся, если встречался?



Пример окна:
$PBExportHeader$w_huge.srw

forward
global type w_huge from Window
end type
type cb_4 from commandbutton within w_huge
end type
type cb_3 from commandbutton within w_huge
end type
type em_1 from editmask within w_huge
end type
type cb_2 from commandbutton within w_huge
end type
type dw_1 from datawindow within w_huge
end type
type cb_1 from commandbutton within w_huge
end type
end forward

global type w_huge from Window
int X=1056
int Y=484
int Width=2569
int Height=1764
boolean TitleBar=true
string Title="Untitled"
long BackColor=67108864
boolean ControlMenu=true
boolean MinBox=true
boolean MaxBox=true
boolean Resizable=true
cb_4 cb_4
cb_3 cb_3
em_1 em_1
cb_2 cb_2
dw_1 dw_1
cb_1 cb_1
end type
global w_huge w_huge

on w_huge.create
this.cb_4=create cb_4
this.cb_3=create cb_3
this.em_1=create em_1
this.cb_2=create cb_2
this.dw_1=create dw_1
this.cb_1=create cb_1
this.Control[]={this.cb_4,&
this.cb_3,&
this.em_1,&
this.cb_2,&
this.dw_1,&
this.cb_1}
end on

on w_huge.destroy
destroy(this.cb_4)
destroy(this.cb_3)
destroy(this.em_1)
destroy(this.cb_2)
destroy(this.dw_1)
destroy(this.cb_1)
end on

type cb_4 from commandbutton within w_huge
int X=2025
int Y=1156
int Width=247
int Height=108
int TabOrder=40
string Text="delete"
int TextSize=-10
int Weight=400
string FaceName="Arial"
FontCharSet FontCharSet=Ansi!
FontFamily FontFamily=Swiss!
FontPitch FontPitch=Variable!
end type

event clicked;dw_1.deleterow(0)
end event

type cb_3 from commandbutton within w_huge
int X=1728
int Y=1152
int Width=247
int Height=108
int TabOrder=30
string Text="add"
int TextSize=-10
int Weight=400
string FaceName="Arial"
FontCharSet FontCharSet=Ansi!
FontFamily FontFamily=Swiss!
FontPitch FontPitch=Variable!
end type

event clicked;dw_1.insertrow(0)
end event

type em_1 from editmask within w_huge
int X=631
int Y=1168
int Width=247
int Height=100
int TabOrder=20
BorderStyle BorderStyle=StyleLowered!
string Mask="#####"
long TextColor=33554432
int TextSize=-10
int Weight=400
string FaceName="Arial"
FontCharSet FontCharSet=Ansi!
FontFamily FontFamily=Swiss!
FontPitch FontPitch=Variable!
end type

type cb_2 from commandbutton within w_huge
int X=256
int Y=1160
int Width=288
int Height=108
int TabOrder=50
string Text="Fill dddw"
int TextSize=-10
int Weight=400
string FaceName="Arial"
FontCharSet FontCharSet=Ansi!
FontFamily FontFamily=Swiss!
FontPitch FontPitch=Variable!
end type

event clicked;datawindowchild ldwc
long i,imax
decimal dmax
em_1.getdata(dmax)
imax = dmax
if dw_1.getchild('n_test',ldwc) = 1 then
ldwc.reset()
for i = 1 to imax
ldwc.insertrow(0)
ldwc.setitem(i,"name",string(i))
ldwc.setitem(i,"value",i)
next
end if
end event

type dw_1 from datawindow within w_huge
int X=160
int Y=116
int Width=2135
int Height=992
int TabOrder=10
string DataObject="dw_huge_main"
BorderStyle BorderStyle=StyleLowered!
boolean VScrollBar=true
boolean LiveScroll=true
end type

type cb_1 from commandbutton within w_huge
int X=1074
int Y=1516
int Width=247
int Height=108
int TabOrder=60
string Text="close"
int TextSize=-10
int Weight=400
string FaceName="Arial"
FontCharSet FontCharSet=Ansi!
FontFamily FontFamily=Swiss!
FontPitch FontPitch=Variable!
end type

event clicked;close(parent)
end event



Пример datawindow
$PBExportHeader$dw_huge_main.srd

release 6;
datawindow(units=0 timer_interval=0 color=16777215 processing=0 print.documentname="" print.orientation = 0 print.margin.left = 110 print.margin.right = 110 print.margin.top = 96 print.margin.bottom = 96 print.paper.source = 0 print.paper.size = 0 print.prompt=no print.buttons=no print.preview.buttons=no )
header(height=72 color="
536870912" )
summary(height=0 color="
536870912" )
footer(height=0 color="
536870912" )
detail(height=84 color="
536870912" )
table(column=(type=long updatewhereclause=no name=n_test dbname="
n_test" )
)
text(band=header alignment="
2" text="N Test"border="0" color="0" x="5" y="4" height="64" width="219" name=n_test_t font.face="Arial" font.height="-10" font.weight="400" font.family="2" font.pitch="2" font.charset="0" background.mode="1" background.color="536870912" )
column(band=detail id=1 alignment="
1" tabsequence=10 border="0" color="0" x="5" y="4" height="76" width="219" format="[general]" name=n_test dddw.name=dddw_huge dddw.displaycolumn=name dddw.datacolumn=value dddw.percentwidth=100 dddw.lines=0 dddw.limit=0 dddw.allowedit=no dddw.useasborder=yes dddw.case=any dddw.nilisnull=yes dddw.vscrollbar=yes font.face="Arial" font.height="-10" font.weight="400" font.family="2" font.pitch="2" font.charset="0" background.mode="1" background.color="536870912" )
htmltable(border="
1" cellpadding="0" cellspacing="0" generatecss="no" nowrap="yes")


Пример dddw
$PBExportHeader$dddw_huge.srd

release 6;
datawindow(units=0 timer_interval=0 color=16777215 processing=0 print.documentname="" print.orientation = 0 print.margin.left = 110 print.margin.right = 110 print.margin.top = 96 print.margin.bottom = 96 print.paper.source = 0 print.paper.size = 0 print.prompt=no print.buttons=no print.preview.buttons=no )
header(height=72 color="
536870912" )
summary(height=0 color="
536870912" )
footer(height=0 color="
536870912" )
detail(height=84 color="
536870912" )
table(column=(type=char(10) updatewhereclause=yes name=name dbname="
name" )
column=(type=long updatewhereclause=yes name=value dbname="
value" )
)
text(band=header alignment="
2" text="Name"border="0" color="0" x="5" y="4" height="64" width="274" name=name_t font.face="Arial" font.height="-10" font.weight="400" font.family="2" font.pitch="2" font.charset="0" background.mode="1" background.color="536870912" )
text(band=header alignment="
2" text="Value"border="0" color="0" x="283" y="4" height="64" width="219" name=value_t font.face="Arial" font.height="-10" font.weight="400" font.family="2" font.pitch="2" font.charset="0" background.mode="1" background.color="536870912" )
column(band=detail id=1 alignment="
0" tabsequence=10 border="0" color="0" x="5" y="4" height="76" width="274" format="[general]" name=name edit.limit=0 edit.case=any edit.autoselect=yes edit.autohscroll=yes font.face="Arial" font.height="-10" font.weight="400" font.family="2" font.pitch="2" font.charset="0" background.mode="1" background.color="536870912" )
column(band=detail id=2 alignment="
1" tabsequence=20 border="0" color="0" x="283" y="4" height="76" width="219" format="[general]" name=value edit.limit=0 edit.case=any edit.autoselect=yes edit.autohscroll=yes font.face="Arial" font.height="-10" font.weight="400" font.family="2" font.pitch="2" font.charset="0" background.mode="1" background.color="536870912" )
htmltable(border="
1" cellpadding="0" cellspacing="0" generatecss="no" nowrap="yes")
3 мар 04, 21:56    [562479]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы со скроллингом в dddw. Do not open by DialUp!  [new]
Филипп
Member

Откуда: Boston, MA, USA (c 1989 ) б. Москва
Сообщений: 1880
Больше чем 60 строк в dddw - дурной юзер интерфейс.
Какой юзер будет скролать через 5К строк?
Какова цель этого упражнения?
3 мар 04, 23:13    [562516]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы со скроллингом в dddw. Do not open by DialUp!  [new]
Dmitry Belousov
Member

Откуда:
Сообщений: 76
Какой юзер будет скролать через 5К строк? 

Какова цель этого упражнения?
Филипп, мне было бы очень интересно выслушать ваше мнение по сути заданного вопроса. Что касается вашей реплики, то могу пояснить следующее:
  • Почему, кто и когда выбрал такое решение - не знаю. При том объеме системы с которым приходится иметь дело нашей малочисленной команде на такие вопросы не всегда удаётся найти ответ. Факт в том, что в настоящий момент это system critical piece of codes.
  • Насколько я понимаю, пользователи никогда не выбирают из него записи поиском. Почему им там позволено скроллироваться, признаться, не вникал.
  • 4 мар 04, 01:46    [562588]     Ответить | Цитировать Сообщить модератору
     Re: Проблемы со скроллингом в dddw. Do not open by DialUp!  [new]
    Филипп
    Member

    Откуда: Boston, MA, USA (c 1989 ) б. Москва
    Сообщений: 1880
    По сути вопроса я уже всё сказал.
    Теперь не по сути. Всё содержится в вашем вопросе. Под WIN2K трудно runout of GDI handles, но возможно. Возможно, что и PB 6.5 leakает GDI handles.

    Вместо того, чтобы гордо говорить типа не вникал, лучше вникнуть и исправить, в особенности с учётом того, что PB 6.5 ВООБЩЕ не поддержанный продукт.
    4 мар 04, 02:42    [562599]     Ответить | Цитировать Сообщить модератору
     Re: Проблемы со скроллингом в dddw. Do not open by DialUp!  [new]
    Dmitry Belousov
    Member

    Откуда:
    Сообщений: 76
    2Филипп
    Превод ответа в наезд совершенно, IMHO, напрасен. Если ни с чем подобным не встечались то так и скажите. "Гордиться" или наоборот посыпать себе голову пеплом здесь не к чему - сотни PBL которые в разное время писали разные люди... Решать каждую подобную проблему перепроектированием (иначе говоря - "вникать") означает прекратить текущую разработку. Вопрос как раз в этом и состоял - можно ли закрыть тему локально или требуются глобальные изменения - изменения алгоритмов, версии PB, etc... Не очень понимаю, что вас задело, но, в любом случае, обидеть вас я не стремился...

    2All На Pb 8.0 + Nt4 вышеприведенный пример работает на ура. Соотв. вопрос либо в версии билдера, либо в 6.5 + W2k. Буду благодарен за любые конструктивные идеи.

    BTW,на маленьких dddw (rowcount() < 30) ситуация тоже воспроизводится, только после более долгого скроллинга.
    4 мар 04, 11:42    [563163]     Ответить | Цитировать Сообщить модератору
     Re: Проблемы со скроллингом в dddw. Do not open by DialUp!  [new]
    Ikar
    Member

    Откуда: Москва
    Сообщений: 928
    2 Dmitry Belousov:
    Сталкивались с такой проблемой. РВ6.5 на w2k. При скролле не только dddw, но и просто dw (grid) были ситуации от GPF приложения, до "зависания" и самоперезагрузки системы. В чем причина конкретно - так и не поняли. Проблему решали множественными экспериментами по изменению набора Shared-ов от РВ. В конечном итоге получили "конгламерат" ил версий 6.0, 6.5 и 6.5fix... Сейчас пререшли на РВ8.0.3 и проблема не вернулась.
    ---
    С уважением, IKAR
    ikarhomecenter@narod.ru
    IkarHomeCenter
    4 мар 04, 12:32    [563314]     Ответить | Цитировать Сообщить модератору
     Re: Проблемы со скроллингом в dddw. Do not open by DialUp!  [new]
    Dmitry Belousov
    Member

    Откуда:
    Сообщений: 76
    2Ikar Спасибо!
    В конечном итоге получили "конгламерат" ил версий 6.0, 6.5 и 6.5fix...
    Правильно я вас понял, что речь идёт об ошибке PB 6.5?
    4 мар 04, 13:06    [563447]     Ответить | Цитировать Сообщить модератору
     Re: Проблемы со скроллингом в dddw. Do not open by DialUp!  [new]
    Ikar
    Member

    Откуда: Москва
    Сообщений: 928
    2 Dmitry Belousov:
    Ну, утверждать это "официально" я не берусь, но мы пришли именно к такому мнению...
    ---
    С уважением, IKAR
    ikarhomecenter@narod.ru
    IkarHomeCenter
    4 мар 04, 15:03    [563851]     Ответить | Цитировать Сообщить модератору
     Re: Проблемы со скроллингом в dddw. Do not open by DialUp!  [new]
    Филипп
    Member

    Откуда: Boston, MA, USA (c 1989 ) б. Москва
    Сообщений: 1880
    А никакого перевода в наезд и не было.
    Просто
    автор
    в настоящий момент это system critical piece of codes
    и
    автор
    не вникал
    в одном абзаце звучит эээ..., подозрительно.
    4 мар 04, 18:36    [564386]     Ответить | Цитировать Сообщить модератору
     Re: Проблемы со скроллингом в dddw. Do not open by DialUp!  [new]
    Dmitry Belousov
    Member

    Откуда:
    Сообщений: 76
    2Филипп
    Немного передергиваете, батенька - про system critical и про "не вникал" это несколько из разных огородов было... Не важно. Не имею желания пререкаться. Предприму, если вы не возражаете, ещё одну попытку обратиться к вашим знаниям, а не к характеру. :-)
    Предположим, что вышеописанную проблему требуется решить не прибегая к перепроектированию или к миграции версии. Чтобы вы посоветовали для поиска причины проблемы или её обхода?
    4 мар 04, 19:54    [564497]     Ответить | Цитировать Сообщить модератору
     Re: Проблемы со скроллингом в dddw. Do not open by DialUp!  [new]
    Филипп
    Member

    Откуда: Boston, MA, USA (c 1989 ) б. Москва
    Сообщений: 1880
    Посоветовать нечего. Не прибегая к перепроектированию или к миграции версии вы проблему не решите.
    Где то в PBVM, в рутинах делающих графику, есть код, который leakaет GDI handles, типа GetDC(...) есть, а ReleaseDC(...) нет.
    4 мар 04, 21:17    [564555]     Ответить | Цитировать Сообщить модератору
     Re: Проблемы со скроллингом в dddw. Do not open by DialUp!  [new]
    Dmitry Belousov
    Member

    Откуда:
    Сообщений: 76
    2Филипп
    Спасибо!
    4 мар 04, 21:39    [564561]     Ответить | Цитировать Сообщить модератору
     Re: Проблемы со скроллингом в dddw. Do not open by DialUp!  [new]
    Локшин Марк
    Member

    Откуда: Воронеж
    Сообщений: 3154
    to Dmitry Belousov
    Я вот что подумал по поводу вашей проблемы. Если это у вас действительно
    автор
    system critical piece of codes

    то, возможно, вам следует обратить внимание на событие pbm_dwndropdown. А именно - не позволять выводить внутреннее окно PowerBuilder'а для DDDW, а написать свое и выводить его вместо стандартного окна DDDW. Если это для вас действительно такая большая проблема, то один день потраченный на разработку такого окна (а ведь правда, что у вас все DataWindow в проекте имеют общего предка :) ?) не покажется для вас обременительным. Ко всему прочему вы сможете расширить функциональность стандартного DDDW (к примеру - фильтрация по первым введенным буквам, что бывает весьма удобно, особенно при вашем случае большого количества строк в DDDW).
    4 мар 04, 21:50    [564572]     Ответить | Цитировать Сообщить модератору
     Re: Проблемы со скроллингом в dddw. Do not open by DialUp!  [new]
    Dmitry Belousov
    Member

    Откуда:
    Сообщений: 76
    2Локшин Марк
    Была такая идея... Но пока решили воздержаться. В любом случае, спасибо за идею. Будем думать.

    BTW, кроме упомянутых вами дополнительных профитов от переопределения dddw, весьма удобно редактировать "на лету" простые справочники (этакий drilldown lite) и весьма прикольно получаются dddwtreeview.
    4 мар 04, 22:27    [564594]     Ответить | Цитировать Сообщить модератору
    Все форумы / PowerBuilder Ответить