On-line: гостей 2. Всего: 2 [подробнее..]
АвторСообщение
Vlad04
постоянный участник


Пост N: 420
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 19.12.13 18:16. Заголовок: TsBrowse в Минигуи (продолжение)


TsBrows определяется в виде строки ПАРМЕТРОВ объекта и их значений
К примеру

 цитата:

DEFINE TBROWSE oBrw2 ;
AT 60,450 ;
ALIAS cAlias ;
OF Form1 ;
WIDTH 330 ;
HEIGHT 340 ;
FONT "Verdana" ;
SIZE 9 ;
ON DBLCLICK CopyRec();
ON GOTFOCUS fModelo_Hab(2) ;
AUTOFILTER ;
CELLED EDIT;
VALUE nRec;
GRID


Здесь я собрал параметры из разных tBrows
Можно или нет и какие парметры заменить
выражением ( и каким) ?
oBrw2:....
oBrw2:....



Спасибо: 0 
Профиль
Ответов - 300 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]


Vlad04
постоянный участник


Пост N: 572
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 18.05.16 20:36. Заголовок: не может это отслед..



 цитата:
не может это отследить и остаться на той записи, которую редактировали ?



Должен, наверно. В консольном Клиппере , а затем в Харборе Бровз с этой задачей справлялся отлично.
В той редакции, которой я пользовался и пользуюсь было так:

 цитата:

XNEWKEY := IF( EMPTY(INDEXKEY()), NIL, &(INDEXKEY()) )
IF .NOT. (XNEWKEY == XOLDKEY)
Ob:REFRESHALL()
while ( !oB:stabilize() ) ; end

DO WHILE &(INDEXKEY()) > XNEWKEY .AND. .NOT. Ob:HITTOP()
ob:UP()
while ( !oB:stabilize() ) ; end
ENDDO
ENDIF




Спасибо: 0 
Профиль
Haz
администратор




Пост N: 971
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 18.05.16 22:43. Заголовок: Vlad04 пишет: И мож..


Vlad04 пишет:

 цитата:
И можно в общем случае как-то избавиться от указания номера колонки ?


можно не использовать внешнее редактирование и все будет норм. Или использовать и самому заботиться о прорисовке теми методами которые есть в TS ( а их там полно ) или написать свои

Спасибо: 0 
Профиль
Vlad04
постоянный участник


Пост N: 573
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 19.05.16 06:22. Заголовок: можно не использова..



 цитата:
можно не использовать внешнее редактирование и все будет норм


Это в каком примере ?

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 972
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 19.05.16 09:44. Заголовок: В частности в это м ..


В частности в этом примере о котором спич редактирование внешнее.
Отсюда и все потуги вернуться на нужную запись после него.
Или о чем вопрос?

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 973
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 20.05.16 15:25. Заголовок: Andrey пишет: Присо..


Andrey пишет:

 цитата:
Присоединяюсь обеими руками !!!
Зачем для простой таблицы приходиться указывать обработку при смене значений индекса ?
Сам Tsbоrwse не может это отследить и остаться на той записи, которую редактировали ?



Руки можно опустить и выдохнуть
Проверил на тестовом примере , при in-line редактировании значения поля которое входит в индексное выражение , не только Recno() остается той записи которую редактировали, но и сортировка в бровсе выполняется правильно и курсор встает куда надо , вне зависимости увеличили индексный ключ или уменьшили.

Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 4943
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.05.16 15:45. Заголовок: Haz пишет: Проверил..


Haz пишет:

 цитата:
Проверил на тестовом примере



Давай тест. Будем смотреть его. Может я что-то неправильно делаю...
У меня в бровсе частенько курсор переходит непонятно куда.
Я делаю редактирование полей в карточке, в бровсе не делаю.


Спасибо: 0 
Профиль
Haz
администратор




Пост N: 974
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 20.05.16 15:49. Заголовок: Andrey пишет: Давай..


Andrey пишет:

 цитата:
Давай тест. Будем смотреть его


А чего там смотреть - тест пустой как барабан
 

#include "minigui.ch"
#include "tsbrowse.ch"

MEMVAR oBrw_1

FUNCTION Main()
LOCAL cDbf := GetStartupFolder() + '\Test.dbf'
LOCAL i := 0
LOCAL aStr := {}

REQUEST DBFCDX , DBFFPT

SET CENTURY ON
SET DELETED ON
RDDSETDEFAULT('DBFCDX')



IF ! File( cDbf )
AAdd( aStr, { 'FX', 'N', 10, 2 } )

DbCreate( cDbf, aStr )
cAlias := cFileNoExt(cDbf)
USE (cDbf) SHARED ALIAS (cAlias) NEW

if ! File( "test.cdx")
INDEX ON FIELD->FX TAG FX
endif

FOR i := 1 TO 100
Test->(dbAppend())
TEST->FX := i
END
ELSE

cAlias := cFileNoExt(cDbf)
USE (cDbf) SHARED ALIAS (cAlias) NEW

END

Test->(OrdSetfocus(1))

DEFINE WINDOW Form_0 ;
At 0, 0 ;
WIDTH 600 ;
HEIGHT 400 ;
TITLE 'TsBrowse sample: Order' ;
MAIN ;
NOMAXIMIZE ;
NOSIZE



ON KEY ESCAPE ACTION ThisWindow.Release

END WINDOW



CreateBrowse( "oBrw_1", 'Form_0', 30, 2, Form_0.Width-10, Form_0.Height-60, 'TEST' )


oBrw_1:aColumns[1]:cHeading := "Number"
oBrw_1:SetColSize(1, 500)
oBrw_1:aColumns[1]:nAlign := DT_LEFT
oBrw_1:aColumns[1]:lEdit := TRUE
oBrw_1:aColumns[1]:nEditMove := DT_DONT_MOVE



Form_0.Center
Form_0.Activate

RETURN Nil


FUNCTION CreateBrowse( cBrw, cParent, nRow, nCol, nWidth, nHeight, cAlias )
LOCAL i

PUBLIC &cBrw

DEFINE TBROWSE &cBrw ;
AT nRow, nCol ;
ALIAS cAlias ;
OF &cParent ;
WIDTH nWidth ;
HEIGHT nHeight ;
COLORS { CLR_BLACK, CLR_BLUE } ;
FONT "MS Sans Serif" ;
SIZE 8


:SetAppendMode( .F. )
:SetDeleteMode( .F. )

:lNoHScroll := .T.
:lCellBrw := .T.
:nSelWidth := 16

END TBROWSE

LoadFields( cBrw, cParent )

&cBrw:nHeightCell += 6
&cBrw:nHeightHead += 14
&cBrw:nWheelLines := 1
&cBrw:lNoChangeOrd := TRUE

&cBrw:SetColor( { 16 }, { RGB( 43, 149, 168 )}) // SyperHeader backcolor
&cBrw:SetColor( { 3 }, { RGB( 255, 255, 255 )}) // Header font color
&cBrw:SetColor( { 4 }, { { || { RGB( 43, 149, 168 ), RGB( 0, 54, 94 )}}}) // Header backcolor
&cBrw:SetColor( { 17 }, { RGB( 255, 255, 255 )}) // Font color in SyperHeader
&cBrw:SetColor( { 6 }, { { || { RGB( 255, 255, 74 ), RGB( 240, 240, 0 )}}}) // Cursor backcolor
&cBrw:SetColor( { 12 }, { { || { RGB( 128, 128, 128 ), RGB( 250, 250, 250 )}}}) // Inactive cursor backcolor
&cBrw:SetColor( { 2 }, { { || RGB( 230, 240, 255 )}}) // Grid backcolor
&cBrw:SetColor( { 1 }, { { || RGB( 0, 0, 0 )}}) // Text color in grid
&cBrw:SetColor( { 5 }, { { || RGB( 0, 0, 255 )}}) // Text color of cursor in grid
&cBrw:SetColor( { 11 }, { { || RGB( 0, 0, 0 )}}) // Text color of inactive cursor in grid

&cBrw:nClrLine := COLOR_GRID

&cBrw:ResetVScroll()

RETURN Nil






Спасибо: 0 
Профиль
Haz
администратор




Пост N: 975
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 20.05.16 15:54. Заголовок: Andrey пишет: Я дел..


Andrey пишет:

 цитата:
Я делаю редактирование полей в карточке, в бровсе не делаю.


я и так и так делаю, правда есть одно но - работаю с ADS через SQL и управляющий индекс всегда нулевой.
Но для скорости выполнения запросов индексы есть практически по всем полям

Спасибо: 0 
Профиль
Vlad04
постоянный участник


Пост N: 574
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 21.05.16 18:10. Заголовок: В реалии во многих с..


В реалии во многих случаях сложно обойтись без внешнего редактирования.

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 980
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 21.05.16 18:14. Заголовок: Vlad04 пишет: В реа..


Vlad04 пишет:

 цитата:
В реалии во многих случаях сложно обойтись без внешнего редактирования.


ну так если УВЕРЕНЫ В ТОМ ЧТО RecNo() НЕ ПОМЕНЯЛОСЬ
во многих случаях достаточно
::UpStable()
::Refresh( T )


Спасибо: 0 
Профиль
Vlad04
постоянный участник


Пост N: 575
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 25.05.16 12:36. Заголовок: Успокаивает, то, что..


Успокаивает, то, что в что в стандартных задачах, все работает как надо (почти) . Значит, будет работать и вне стандартных.
Алгоритм, примерно, ясен:
1) - Перед редактированием определяем, колонку, которую редактируем, индексный ключ и запоминаем их в переменных
2)- После редактирования определяем новый ключ и после его сравнения с исходным организуем движение курсора по бровсу.



Спасибо: 0 
Профиль
Haz
администратор




Пост N: 984
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 25.05.16 12:49. Заголовок: Не надо никуда двига..


Не надо никуда двигаться по бровсе и не надо ничего запоминать.
При нормальной организации внешнего редактирования ячейки текущая запись не меняется и

 цитата:
Алгоритм, примерно, ясен:


Вызов_внешнего_редактирования()
oBrw:UpStable()
oBrw:Refresh( .T. )
все
Скрытый текст



Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 987
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.05.16 12:56. Заголовок: Игорь с какой целью..


Игорь с какой целью в примерах есть
 
DEFINE WINDOW Form_1 ;
AT 0,0 ;
WIDTH 600 ;
HEIGHT 40 ;
CHILD ;
NOSYSMENU ;
NOCAPTION


END WINDOW

что ты этим хотел сказать ?

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 985
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 26.05.16 13:15. Заголовок: SergKis пишет: что ..


SergKis пишет:

 цитата:
что ты этим хотел сказать ?


Делал просто на базе другого примера и не весь мусор вычистил
Полезной нагрузки Form_1 не несет.
Весь пример делался ради трех строк
 
oBrw_1:Upstable()
oBrw_1:Refresh(.T.)
oBrw_1:ResetVScroll()


PS. вычистил мусор из примеров, спасибо за наводку. т.к. сам примеры свои же и не смотрю


Спасибо: 0 
Профиль
SergKis
постоянный участник




Пост N: 988
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.05.16 13:52. Заголовок: Haz пишет:не весь му..


Haz пишет:
 цитата:
не весь мусор вычистил


Ясненько, а то подумал, что ты хотел еще, что то показать, но забыл

Спасибо: 0 
Профиль
Vlad04
постоянный участник


Пост N: 576
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 27.05.16 09:19. Заголовок: Haz oBrw_1:Upstab..


Haz

 цитата:

oBrw_1:Upstable()
oBrw_1:Refresh(.T.)
oBrw_1:ResetVScroll()


По сути нужно из подчиненной формы обновить объект на главной.
У меня уже программа разрослась, куча файлов, форм( каждые по принадлежности).
Вызов из формы Form_2 после сохранения изменений
&(cForm). oBrw_1:Upstable()
невозможен ?
Или как-то можно это сделать ?

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 986
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 27.05.16 12:23. Заголовок: Vlad04 пишет: &..


Vlad04 пишет:

 цитата:
&(cForm). oBrw_1:Upstable()
невозможен ?
Или как-то можно это сделать ?


oBrw_1 - это переменная, тип которой - "О". Нужно просто обеспечить ее видимость в Form_2 и
достаточно просто oBrw_1:Upstable(), возможно перед этим потребуется oBrw_1:Setfocus()
У себя я все бровсы объявляю как PUBLIC и все равно из какой формы вызов. В примере же это есть


Спасибо: 0 
Профиль
Vlad04
постоянный участник


Пост N: 577
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 27.05.16 13:23. Заголовок: В MiniGui объекты и..


В MiniGui объекты и формы можно объявить как
1)- Form_1.Brw_1
2)- &(cForm).Brw_1
3) - Form.&(oBrw)
Наверно, еще есть варианты. Я выбрал второй вариант. У меня несколько десятков подобных справочников. Я меняю параметры (имя формы , размеры, алиасы)
и все работает. Но Бровсы у всех имеют одно имя, но разных хозяев. И без привязки к имени формы к нему не обратишься.
Вот такая неувязка

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 987
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 27.05.16 13:52. Заголовок: Vlad04 пишет: Вот т..


Vlad04 пишет:

 цитата:
Вот такая неувязка



DEFINE TBROWSE oLbx AT 10,15 ;
oLbx это переменная, явно или неявно указанная . Если неявно то она local в этом модуле и никто не запрещает давать в разных модулях одни и те же имена.
По этой причине и "все работает"
Посмотри примеры в минигуи , в большинстве своем это именно Local переменные, в главном примере это Public. Vlad04 пишет:

 цитата:
И без привязки к имени формы к нему не обратишься.
Вот такая неувязка


Тоже мне неувязка - передавай по ссылке в функцию в которой рисуется окно для внешнего редактирования.
Или подбирайся по алгоритму
1) получи хендл окна Form_1 как h := GetFormHandle("Form_1")
2) просканируй массив _HMG_aControlParentHandles в каких позициях найдено будет h
3) просканируй массив _HMG_aControlNames в позициях найденных выше. где значение будет равно имени твоего бровса и запомни позицию ( пусть х )
4) в массиве _HMG_aControlIds[ x ] и лежит твой бровс,
_HMG_aControlIds[ x ]:Upstable()
_HMG_aControlIds[ x ]:Refresh( .T. )
итд

ЗЫ Но проще все же сразу давать нормальные имена переменным и обеспечивать нужную видимость


Спасибо: 0 
Профиль
Haz
администратор




Пост N: 988
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 27.05.16 14:59. Заголовок: Haz пишет: Или подб..


Haz пишет:

 цитата:
Или подбирайся по алгоритму


Примерно так
 

...
GetBrw( "Form_1", "oBrw" ):Upstable()
...

Func GetBrw( cFormName, cBrwName )
local h := GetFormHandle(cFormName)
local k := 0

for k := 1 to Len(_HMG_aControlNames)
if _HMG_aControlParentHandles[ k ] == h .AND. _HMG_aControlNames[ k ] == cBrwName
Exit
end
end

RETURN _HMG_aControlIds[k]


Спасибо: 0 
Профиль
Ответов - 300 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 432
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет