Гость
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как лучше запомнить текущие настройки DW ? / 13 сообщений из 13, страница 1 из 1
27.02.2004, 14:40
    #32424322
Вовик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше запомнить текущие настройки DW ?
Проблема такая : с одной программой работают разные пользователи.
У всех - свои предпочтения. Многие dw построены по типу grid , т.е. можно
менять порядок колонок , их ширину.
Как сохранить сделанные пользователем изменения в визуальном
представлении dw , чтобы потом их можно было "активировать"
при следующем запуске программы?
...
Рейтинг: 0 / 0
27.02.2004, 14:59
    #32424388
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше запомнить текущие настройки DW ?
Что-то типа того:
Код: plaintext
1.
2.
3.
4.
5.
6.
string s
//запоминаем
s = dw_1.Describe( "DataWindow.Syntax" )

//...восстанавливаем

dw_1.create(s)
...
Рейтинг: 0 / 0
27.02.2004, 15:07
    #32424419
guest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше запомнить текущие настройки DW ?
Список всех объектов - Describe("Datawindow.Objects")
У каждой колонки есть .X .Width и .Visible
Порядок можно определить отсортировав по .X
Или раскрутив DataWindow.Table.GridColumns в массив.
Применить параметры -
отключили отрисовку,
выставили всем .Visible=0
В нужном порядке выставляем каждой visible и выставляем ширину и делаем
SetPosition(column,'',True) /* это bringToFront на самом деле */

2 Марк: метод грубой силы не всегда подходит.
Что будет с этим сохраненным синтаксисом, если я добавляю, удаляю, перекрашиваю и т.п. колонки в dw???
Каждый раз при апгрейде выносить настройки пользователя?
Ну тогда это никакого смысла не имеет - у меня они и недели не пролежат ;-)

От инженеров Sybase насколько я помню Вы требовали гораздо более тщательного подхода к разработке ;-) ;-)
...
Рейтинг: 0 / 0
27.02.2004, 15:10
    #32424431
Вовик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше запомнить текущие настройки DW ?
Спасибо за совет.
Я в раздумьях , ведь есть еще GetFullState/SetFullState.
Что лучше использовать : Datawindow.Syntax или вышеуказанные функции ?

И еще : может , можно напрямую "подменять" определения dw в pbd?
...
Рейтинг: 0 / 0
27.02.2004, 15:23
    #32424461
guest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше запомнить текущие настройки DW ?
Еще раз намекаю:
как насчет несовместимости "сохраненного" синтаксиса и измененных версий DW? сомневаюсь что grid рисуется раз и навсегда и больше изменениям не подлежит.

PBD имхо - не вариант. Зачем придумывать себе приключения, когда можно обойтись стандартными Describe/Modify?
...
Рейтинг: 0 / 0
27.02.2004, 15:28
    #32424477
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше запомнить текущие настройки DW ?
ВовикЯ в раздумьях , ведь есть еще GetFullState/SetFullState.
Что лучше использовать : Datawindow.Syntax или вышеуказанные функции ?
Если просто сохранить/восстановить, то лучше вышеуказанные функции.
GuestЧто будет с этим сохраненным синтаксисом, если я добавляю, удаляю, перекрашиваю и т.п. колонки в dw???
Каждый раз при апгрейде выносить настройки пользователя?
Ну тогда это никакого смысла не имеет - у меня они и недели не пролежат ;-)
Что-то вы слишком часто меняете свои DataWindow. Удалять настройки все-же будет необходимо только у тех DataWindow, которые поменялись.
GuestОт инженеров Sybase насколько я помню Вы требовали гораздо более тщательного подхода к разработке ;-) ;-)
Я почему-то подумал, что спрашивают как быстрее запомнить, а не как лучше. А так, ваш метод более верный, и даже более того, именно его я и использую :) . А еще, при таком подходе, можно свойства прямо из программы менять, а не в DataWindow Painter'е (если написать немного кода). Полезно бывает.
...
Рейтинг: 0 / 0
27.02.2004, 15:28
    #32424482
Вовик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше запомнить текущие настройки DW ?
Еще раз спасибо.
Склоняюсь к варианту Describe/Modify.

Я только не совсем понял, Describe("Datawindow.Objects")
выдает все объекты со всеми их свойствами?
...
Рейтинг: 0 / 0
27.02.2004, 15:33
    #32424496
Вовик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше запомнить текущие настройки DW ?
Локшин МаркА еще, при таком подходе, можно свойства прямо из программы менять, а не в DataWindow Painter'е (если написать немного кода). Полезно бывает.
А нельзя поподробнее , когда это может быть полезно?
...
Рейтинг: 0 / 0
27.02.2004, 15:38
    #32424514
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше запомнить текущие настройки DW ?
ВовикЯ только не совсем понял, Describe("Datawindow.Objects")
выдает все объекты со всеми их свойствами?
Нет, это только список наименований разделенный символом табуляции.
ВовикА нельзя поподробнее , когда это может быть полезно?
Ну, допустим, если кто-то хочет видеть зеленые заголовки, а кто-то синие.
...
Рейтинг: 0 / 0
27.02.2004, 15:47
    #32424541
Вовик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше запомнить текущие настройки DW ?
Так все же вопрос : куда оптимальнее сохранять настойки
1) в отдельный файл на диске
2) в pbd
3) в базу
...
Рейтинг: 0 / 0
27.02.2004, 16:08
    #32424596
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше запомнить текущие настройки DW ?
авторТак все же вопрос : куда оптимальнее сохранять настойки
1) в отдельный файл на диске
2) в pbd
3) в базу
Я делалю так: сохраняю все в базу, но у меня имеется возможность загрузить/выгрузить эти настройки в файл (чтобы можно было передавать, при необходимости, между филиалами). Зато при сохранении в базу они никуда не денутся.
...
Рейтинг: 0 / 0
27.02.2004, 17:12
    #32424750
Вовик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше запомнить текущие настройки DW ?
Такое размышление у меня возникло :
можно ли как-то сравнить определение dw в pbd и текущее состояние
dw у пользователя на экране , чтобы за один раз получить
Modify - строку , которую нужно сохранить в качестве настроек ?
...
Рейтинг: 0 / 0
01.03.2004, 15:53
    #32426602
Вовик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше запомнить текущие настройки DW ?
Всем выражаю огромную благодарность.
Вот , сделал работающий вариант ( с PFC ) . Настройки GRID сохраняются
в Ini-файл пользователя.

Функция сохранения настроек ( вызывается из Destructor )
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
public function integer uf_save_grid_settings ();
int li_cnt,li_tot,li_rc
string ls_x,ls_width,ls_inifile,ls_value,ls_objects[],ls_rc
n_cst_string linv_string

// if grid style datawindow was not passed, then return
if this.object.datawindow.processing <>  "1 " then return - 1 
if ib_SaveLayout = false then return - 1 

ls_inifile = gnv_App.of_GetUserIniFile()
//создаем файл , если его не было
integer li_FileNum
li_FileNum = FileOpen(ls_inifile,LineMode!,Write!)
FileClose(li_FileNum)
//
// loop thru the objects on this datawindow.  For each column, text, and
// computed field, if it is visible, then save the x coordinate and width
// into the app ini file with the following settings:
//
//      section = dataobject
//      key = object name
//      value = x coordinate,width
//
ls_rc = this.Describe( "Datawindow.objects" )
li_tot = linv_string.of_parsetoarray(ls_rc, "~t" ,ls_objects)

FOR li_cnt =  1  to li_tot
  if this.Describe(ls_objects[li_cnt] +  ".visible" ) <>  "1 " then CONTINUE
  ls_rc = Lower(this.Describe(ls_objects[li_cnt] +  ".type" ))
  CHOOSE CASE ls_rc
    CASE  "column"  /*,"text"*/ , "compute" 
      ls_x = this.Describe(ls_objects[li_cnt] +  ".x" )
      ls_width = this.Describe(ls_objects[li_cnt] +  ".width" )
      ls_value = ls_x +  ","  + ls_width
		li_rc = &
SetProfileString(ls_inifile,this.dataobject,ls_objects[li_cnt],ls_value)
      if li_rc = - 1  then
        MessageBox( "SetProfileString" , "Could not save column"  + &
+  " information." ,Information!,Ok!)
      MessageBox( "dataobject" ,this.dataobject)
		MessageBox( "inifile" ,ls_inifile)
		MessageBox( "object" ,ls_objects[li_cnt])
		MessageBox( "inifile" ,ls_value)
        li_cnt = li_tot
      end if
   END CHOOSE
NEXT
return  1 

end function


Функция восстановления настроек ( вызывается из Constructor )
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
public function integer uf_apply_grid_settings ();
int li_cnt,li_tot,li_pos,li_length
string ls_x,ls_width,ls_inifile,ls_value,ls_mod,ls_rc,ls_objects[]
string ls_obj,ls_invis
n_cst_inifile linv_ini
//для сортировки по x
datastore lds 
long ll_row , ll_rows , ll_cnt

ls_inifile = gnv_App.of_GetUserIniFile()

// if grid style datawindow was not passed, then return
if this.object.datawindow.processing <>  "1 " then return - 1 
if ib_SaveLayout = false then return - 1 

// get all the keys for the dataobject.  each key is the object name on the
// datawindow if the object is visible, then adjust the x coordinate and 
// width to the setting in the ini file
//
// the settings are stored in the app ini file with the following settings:
//
//      section = dataobject
//      key = column name
//      value = x coordinate,width
li_tot = linv_ini.of_GetKeys(ls_inifile,this.dataobject,ls_objects)
choose case li_tot
  case - 1 
    MessageBox( "GetKeys" , "File error. (-1 )",Information!,Ok!)
    return - 1 
  case - 2 
    //MessageBox( "GetKeys" , "INI file does not exist. (-2 )",Information!,Ok!)
    return - 1 
end choose

//создаем datastore: имя,x,w
lds = create datastore
lds.Create('release 5; datawindow() table(column=(type=' + & 
 'char(100) name=nm dbname="dummy1" ) column=(type=' + & 
  'number name=x dbname="dummy2" ) column=(type=' + & 
				'char(100) name=w dbname="dummy3" ))')

ls_mod =  ""
ls_invis = "  "
FOR li_cnt = 1  to li_tot
  ls_obj = ls_objects[li_cnt]
  if this.Describe(ls_obj + ".visible ") <> "  1  " then CONTINUE
  ls_value = ProfileString(ls_inifile,this.dataobject,ls_objects[li_cnt],"  ")
  
  // if no value found, do nothing
  if ls_value = "  " then CONTINUE
  li_pos = Pos(ls_value," , ")
  if li_pos <= 0  then CONTINUE
  ls_x = Left(ls_value,li_pos -  1 )
  li_length = Len(ls_value) - li_pos
  ls_width = Mid(ls_value,li_pos +  1 ,li_length)
  ls_invis = ls_invis + ls_obj + ".visible='0'  "
  ls_mod = ls_mod + ls_obj + " .x= " + ls_x + "   " + ls_obj &
+ " .width= " + ls_width + "   "

//запоминаем в datastore
ll_row = lds.InsertRow(0 )
lds.SetItem(ll_row,'nm',ls_obj)
lds.SetItem(ll_row,'x', Integer( ls_x ) )
lds.SetItem(ll_row,'w',ls_width)
NEXT

//скрываем все
ls_rc = this.Modify(ls_invis)

//сортируем lds по x
lds.SetSort("x A ")
lds.Sort()

//отображаем в нужном порядке и меняем ширину
ll_rows = lds.RowCount()
FOR ll_cnt = 1  to ll_rows
 ls_obj = lds.GetItemString(ll_cnt,'nm')
 ls_width = lds.GetItemString(ll_cnt,'w')
 ls_mod = ls_obj + ".visible='1'  "
 ls_mod = ls_mod + ls_obj + " .width= " + ls_width + "  "
 ls_rc = this.Modify(ls_mod)
 //SetPosition(ls_obj,'',True)
NEXT	

destroy lds

return  1 

end function
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как лучше запомнить текущие настройки DW ? / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]