On-line: i3t4j6, PSP, гостей 0. Всего: 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 [только новые]


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




Пост N: 4761
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 02.03.16 23:36. Заголовок: Haz пишет: теперь с..


Haz пишет:

 цитата:
теперь с форума будем собирать идеи по наполнению класса CLASS TSBcell



А можно сделать так, чтобы при наведении мышкой на колонку с определённым номером, в ячейке всплывала подсказка ?
Как у всех объектов TOOLTIP, или как в примере MiniGUI\SAMPLES\BASIC\COMM_2\demo-main.prg функция My_Message()

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




Пост N: 879
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.03.16 01:42. Заголовок: Andrey пишет:А можно..


Andrey пишет:
 цитата:
А можно сделать так ... Как у всех объектов TOOLTIP


надо внести изменения, на мой взгляд:Скрытый текст


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




Пост N: 880
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.03.16 09:07. Заголовок: Haz пишет:будем соби..


Haz пишет:
 цитата:
будем собирать идеи по наполнению класса CLASS TSBcell


просится Скрытый текст

тогда
oDesktop := TSBcell():New():Desktop()
DEFINE WINDOW ... AT oDesktop:Row, oDesktop:Col ...
oAppWin := TSBcell():New():App()
oAppCli := TSBcell():New():Client()
oFormCli := TSBcell():New():Client(GetFormHandle("Form_1"))
...
может название не TSBcell ?

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




Пост N: 881
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.03.16 12:02. Заголовок: SergKis пишет:надо в..


SergKis пишет:
 цитата:
надо внести изменения


Уточненные (проверил) изменения: Скрытый текст


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




Пост N: 826
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 03.03.16 12:23. Заголовок: SergKis пишет: oDes..


SergKis пишет:

 цитата:
oDesktop := TSBcell():New():Desktop()


Сергей, это больше на клаасс Windows похоже. Так мы придем к HwGui ( что тоже не плохо ) и будет
oWin := Win():New()
oWin:name := "Form_1"
oWin:Type := 'child'
и т.д.





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




Пост N: 882
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.03.16 13:28. Заголовок: Haz oWin - больший ..


Haz
oWin - больший класс и его сост. частью является TSBcell (название не очень подходит)
в данном случае 4 значения, которые можно заполнить методами и в окнах проще писать (часть кода скрыта в методе)
oA := TSBcell():New():Desktop() // можно в стиле VO: oA := TSBcell{}:Desktop()
oA:nRow, oA:nCol ... чем Application.Row ... для Desktop аналогично

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




Пост N: 883
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.03.16 13:31. Заголовок: PS можно сгородить ф..


PS
можно сгородить ф-ии
Func oDesktop()
Return TSBcell():New():Desktop()
...
и останемся в стиле MiniGui

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




Пост N: 827
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 03.03.16 13:52. Заголовок: SergKis пишет: TSBc..


SergKis пишет:

 цитата:
TSBcell (название не очень подходит)


подходит к ячейке бровса , как дочернего класса этого бровса, в твоем случае тогда класс назвать можно :WinRect( hWnd )

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




Пост N: 884
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.03.16 15:05. Заголовок: Haz пишет: назвать м..


Haz пишет:
 цитата:
назвать можно :WinRect( hWnd )


Согласен, лучше не смешивать.

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




Пост N: 4764
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.03.16 23:03. Заголовок: Что то вылетает у ме..


Что то вылетает у меня функция, при повторном входе в бровс !
Делаю так:

// по правой кнопки мышки - контекстное меню TBROWSE
DEFINE CONTEXT MENU CONTROL oBrw1
......
MENUITEM "Current record / Текущая запись: " NAME MYTABLETEXT // строка 533
MENUITEM "Record number / Номер записи: " NAME MYTABLERECNO
...
END MENU

При повторном входе в эту функцию - вылет программы с ошибкой:
Error BASE/1132 Переполнение массива: Неверное количество аргументов
Called from _GETMENUIDS(648)
Called from MENUCAPTIONSET(546)
Called from CHANGETABLE(533)
Called from (b)MYCREATETABLE(431)


Я так подозреваю, что нужно чистить (удалять) объявленные переменные NAME MYTABLETEXT и NAME MYTABLERECNO ?
Или что то другое нужно ?

P.S. простое удаление (после закрытии формы) не помогает...
RELEASE MYTABLETEXT
RELEASE MYTABLERECNO

Вылетает на строке 648:
x := GetControlIndex ( ItemName , FormName )
MsgLog(x, ItemName , FormName)
h := _HMG_aControlPageMap [ x ] // строка 648

В отладочном файле _MsgLog.txt следующее:
7 MYTABLETEXT Form_Table45549
8 MYTABLERECNO Form_Table45549
0 MYTABLETEXT Form_Table47864


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




Пост N: 4791
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.03.16 12:29. Заголовок: Andrey пишет: А мож..


Andrey пишет:

 цитата:
А можно сделать так, чтобы при наведении мышкой на колонку с определённым номером, в ячейке всплывала подсказка ?
Как у всех объектов TOOLTIP, или как в примере MiniGUI\SAMPLES\BASIC\COMM_2\demo-main.prg функция My_Message()


Так как - это можно реализовать ?
А то писали-писали, а к чему пришли так и не понял.
Или результат в новой версии МиниГуи ждать ?

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 903
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 17.03.16 12:54. Заголовок: Andrey пишет: Или р..


Andrey пишет:

 цитата:
Или результат в новой версии МиниГуи


Именно так - уже скоро. Сегодня выпустил pre-release версию новой сборки
На всякий случай мой контрольный пример для проверки этой фичи ниже:
Скрытый текст


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




Пост N: 4796
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.03.16 21:48. Заголовок: Столкнулся с такой н..


Столкнулся с такой непоняткой...

Создаю таблицу:
DEFINE TBROWSE oBrw1 ;
................
MyCreateTable(....)

END TBROWSE
SetNoHoles( oBrw1 ) // убрать дырку внизу таблицы перед подвалом
MyCreateTableMenu(....)

В функции MyCreateTable(....) задаю:
1) цвета
// -------------------- Установить цвета в таблице ------------------------------
oBrw1:SetColor( { 1}, { { || CLR_BLACK } } ) // 1 , текста в ячейках таблицы
............
oBrw1:SetColor( { 6}, { { || { 4915199,255} } } ) // 6 , фона курсора

2) создаю столбцы
ADD COLUMN TO oBrw1 HEADER "1-столбец" ;
............ // и т.д.

3) и там все остальные назначения...
// -------------- Fixed cursor , фиксированный курсор ---------
For nI := 1 To oBrw1:nColCount()
oBrw1:aColumns[nI]:lFixLite := TRUE
Next


Пытаюсь после этого считать цвет 6 - фона курсора
oCol := oBrw1:aColumns[ 1 ]
aColor := oCol:aColorsBack
aCursorBC := aColor[6]

oBrw1:SetColor( { 6 }, { { |a,b,c| IF( c:nCell == b, aCursorBC ,;
{ CLR_GRAY, CLR_WHITE } ) } } )


Получаю в aCursorBC чёрный цвет... Почему ?
Что нужно ещё сделать для инициализации цвета ?

Если цвета поставить ниже, то 6-цвет получается нормально...

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


Пост N: 525
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 22.03.16 20:59. Заголовок: Уажаемые ГУРУ! Не м..


Уажаемые ГУРУ!
Не могли бы Вы для полноты дополнить некоторые примеры TsBrowse следующим:- это кнопки навигации , добавить , удалить , изменить режим(непосредственное редактирование разрешено - запрещено), вызов контекстного меню.
Представляют интерес примеры на основе - Tsb_filter,Tsb_sbrowse (или подобные) , т.е. те, где TsBrows формируется отдельной процедурой.

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




Пост N: 4804
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.03.16 22:59. Заголовок: Vlad04 пишет: это к..


Vlad04 пишет:

 цитата:
это кнопки навигации , добавить , удалить , изменить режим(непосредственное редактирование разрешено - запрещено), вызов контекстного меню.


Смотри пример SAMPLES\Advanced\Tsb_config
Могу дать на его базе более продвинутый пример из двух TsBrowse (кнопка цвет) - https://cloud.mail.ru/public/2CHr/h9u2vn7JR
Вот еще один пример с картинками и продвинутым контекстным меню - https://cloud.mail.ru/public/2s2Z/gmH9d5VWD


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


Пост N: 526
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 23.03.16 09:21. Заголовок: Примеры хорошие, но ..


Примеры хорошие, но это не то.Речь шла о примерах, где TsBrows формируется отдельной процедурой, а в этих - все в одной и создание окна и создание Бровса в нем.

Ниже - твой пример, где я добавил кнопки навигации.При добавлении новой записи экран не обновляется.

TsBrows с навигацией

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




Пост N: 903
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 23.03.16 10:44. Заголовок: Vlad04 пишет:При доб..


Vlad04 пишет:
 цитата:
При добавлении новой записи экран не обновляется.


на базе Tsb_addrecord AddRecord(obrw) сделал похоже (в примере) - работает
 
********************
Static Procedure Append(obrw)
********************

(obrw:cAlias)->( DbAppend() )
(obrw:cAlias)->( FieldPut( 1, Procname()+": "+strzero(RecNo(),7 )+str(procline(), 7) ) )
(obrw:cAlias)->( FieldPut( 2, RecNo() ) )

obrw:GoToRec( RecNo() )
obrw:SetFocus()

Return

или надо как то иначе ?

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


Пост N: 527
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 23.03.16 18:38. Заголовок: Это учел. На основе ..


Это учел. На основе Tsb_addrecord другой пример Tsb_addrecord2
Здесь возникают ошибки, неувязки в
Procedure Edit(met,cForm,oBrw,cAlias)

 цитата:

// &(cForm).readRec.Visible:=.t.
// &(cForm).readRecN.Visible:=.f.


Здесь должна меняться видимость картинок.
И в
STATIC FUNCTION MyKeyAction(l_Key,cForm,oBrw, cParent)




// &(cForm).STATUSBAR.Item(1):='Точный поиск:'+sSeek //'Точный поиск:'+

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




Пост N: 904
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 23.03.16 22:06. Заголовок: Vlad04 CASE ..


Vlad04
 
CASE l_key>32.and.l_key<254
sl_key := KeyToChar(l_key ) // моя функция обработки клавиш / my processing function keys
sSeek:=sSeek+sl_key

nRec:=Recno()
Seek sSeek
if Found()
nRec := RecNo()
endif
oBrw:GotoRec(nRec)

только, на мой взгляд, проще сделать GetBox вместе с tsb, скрыть его, на lostfocus\return\esc повесить переход на tsb и скрытие, а на onchange подвод или scope, show GetBox делать в координатах ячейки в Footer tsb


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




Пост N: 905
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 23.03.16 22:11. Заголовок: PS подсветку того, ч..


PS
подсветку того, что набрали посимвольно , все равно надо делать (нужно место), а GetBox и с этим справится

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




Пост N: 4805
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.03.16 22:11. Заголовок: SergKis пишет: прощ..


SergKis пишет:

 цитата:
проще сделать GetBox вместе с tsb


Это действительно проще. В примере который я дал выше - есть такой метод....


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




Пост N: 906
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.03.16 01:59. Заголовок: Andrey пишет:есть та..


Andrey пишет:
 цитата:
есть такой метод....


Я такой имел ввиду: Скрытый текст


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




Пост N: 907
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.03.16 02:03. Заголовок: PS пропустил после @..


PS
пропустил после @ 0, 0 GETBOX MyFind ...
win_1.MyFind.Hide

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


Пост N: 528
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 24.03.16 05:28. Заголовок: SergKis Поиск и фуну..


SergKis
Поиск и фунукцию обработки клавиатуры прикрутил из другого примера ( Окно и бровс в одной функции), там все нормально работает.
В этом примере ругается на &(cForm), так как надо чтобы форма реагирвала на события.

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


Пост N: 529
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 24.03.16 06:31. Заголовок: SergKis ок! Нормаль..


SergKis
ок!
Нормальный поиск

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




Пост N: 908
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.03.16 10:29. Заголовок: Vlad04 Совет. испол..


Vlad04
Совет.
используйте блоки код (параметры), как прописаны их вызовы в tsb, проще будет и проблем меньше, например
 
METHOD KeyDown( nKey, nFlags ) CLASS TSBrowse
...
If ::bUserKeys != Nil

uReturn := Eval( ::bUserKeys, nKey, nFlags, Self )

If uReturn != Nil .and. ValType( uReturn ) == "N" .and. uReturn < 200 // interpreted as a virtual key code to
nKey := uReturn // change the original key pressed
ElseIf uReturn != Nil .and. ValType( uReturn ) == "L" .and. ! uReturn
::nUserKey := 255 // want to inhibit the KeyDown and KeyChar Methods for key pressed
Return 0
EndIf
EndIf
...

т.е. вместо
oBrw:bKeyDown := { | nKey | MyKeyAction(nKey,'win_1',oBrw,'win_1'), lOk := nKey != VK_ESCAPE }
делать
oBrw:bKeyDown := { | nKey,nFlags,oBrw| MyKeyAction(nKey,nFlag,oBrw) }
где
Funct MyAction(l_key, nFlags, oBrw )
Local cForm := oBrw:cParentWnd
Local cBrw := oBrw:cControlName
Local hBrw := oBrw:hWnd
... см. свойства tsb




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




Пост N: 909
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.03.16 10:33. Заголовок: PS по инерции копипа..


PS
по инерции копипастил не oBrw:bKeyDown, на мой взгляд, а oBrw:bUserKeys := ...

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


Пост N: 530
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 24.03.16 12:17. Заголовок: SergKis Не сочтите ..


SergKis
Не сочтите за наглость, не могли бы вы подправить ПРИМЕР в Вашей редакции.
Думаю, многим было бы полезно.
Спасибо.

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




Пост N: 910
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.03.16 20:40. Заголовок: Vlad04 пишет: подпра..


Vlad04 пишет:
 цитата:
подправить ПРИМЕР в Вашей редакции.


тут Скрытый текст


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




Пост N: 911
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.03.16 20:42. Заголовок: PS подправить OpenBr..


PS
подправить OpenBrows( "oBrw", 'win_1', 30, 2, win_1.Width-20, win_1.Height-95, Alias() )

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


Пост N: 531
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 25.03.16 10:15. Заголовок: оК Спасибо, но вопро..


оК
Спасибо, но вопросы остались.
Как обратится к элементам, объектам формы из функций ?
&(cForm) вместо win_1 не работает ?

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




Пост N: 4806
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.03.16 10:48. Заголовок: SetProperty( This..


SetProperty( ThisWindow.Name, "объект", "Enabled", .F. )
или
SetProperty( cForm, "MyFind", "Value", "проба" ) // записать в объект

cVal := GetProperty( cForm, "MyFind", "Value" ) // считать из объекта

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




Пост N: 912
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.03.16 10:59. Заголовок: Vlad04 тот же приме..


Vlad04
тот же пример без Public переменной click here

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


Пост N: 532
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 26.03.16 09:36. Заголовок: SergKis Ок. Все ч..


SergKis
Ок.
Все четко работает, но что ж так сложно. Все сложности должны быть в библиотеке (может у вас так и сделано).
А если на форме несколько Бровзов и другие компоненты ?

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




Пост N: 914
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.03.16 11:50. Заголовок: Vlad04 В чем сложно..


Vlad04
В чем сложность ? По моему очень похоже, как было в clipper tbrowse (координаты, алиас и UserFunc).
Ф-ии TBrw_... надергал из своего класса TBrw (служит надстройкой над tsb) и лежит вместе с TBrowse в либе. Убрав этот код, что останется от примера ?

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


Пост N: 533
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 26.03.16 15:58. Заголовок: По моему очень похо..



 цитата:
По моему очень похоже ,, как было в clipper tbrowse



Так понятно

 цитата:
Ф-ии TBrw_... надергал из своего класса TBrw



Буду разбираться..


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




Пост N: 4808
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.03.16 23:23. Заголовок: Можно ли определить ..


Можно ли определить нажатие мышки в подвале таблицы ?
Т.е. на какой колонке подвала была нажата мышка, ну и вызвать функцию какую либо...

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




Пост N: 917
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.03.16 23:52. Заголовок: Andrey пишет:Можно л..


Andrey пишет:
 цитата:
Можно ли определить нажатие мышки в подвале таблицы ?


см. TSCOLUMN.PRG а то будет снова твоя цитата
 цитата:
Спасибо ! Не сообразил сразу там посмотреть !



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




Пост N: 4809
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.03.16 12:56. Заголовок: Можно ли определить ..



 цитата:
Можно ли определить нажатие мышки в подвале таблицы ?


Можно сделать так:
For nI := 1 To oBrw1:nColCount()
oBrw1:aColumns[ nI ]:bFLClicked := &("{|| MyFunctionSelect("+HB_NtoS(nI)+") }")
Next


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




Пост N: 925
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.03.16 13:34. Заголовок: Andrey Если поищешь..


Andrey
Если поищешь в h_tbrowse.prg bFLClicked (всего одно место), то увидишь
 
If ::aColumns[ nAtCol ]:bFLClicked != Nil

Eval( ::aColumns[ nAtCol ]:bFLClicked, uPar1, uPar2, ::nAt, Self )
...
выше увидишь
uPar1 := nRowPix, ;
uPar2 := nColPix, ;
и твой блок кода будет таким {|nRowPix,nColPix,nAt,oBrw| MyFunctionSelect(nRowPix,nColPix,nAt,oBrw) }
и номер колонки в ф-ии будет oBrw:nCell, а oBrw:nRowPos тек. строка и т.д.


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




Пост N: 4810
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.03.16 13:43. Заголовок: Блин, пробовал до эт..


Блин, пробовал до этого так {|nRow,nCo| MyFunctionSelect(nRow,nCol) }
Увидел что пикселы это и бросил... а зря оказывается....
Спасибо !

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




Пост N: 926
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.03.16 17:01. Заголовок: Andrey пишет:и твой ..


Andrey пишет:
 цитата:
и твой блок кода будет таким {|nRowPix,nColPix,nAt,oBrw| MyFunctionSelect(nRowPix,nColPix,nAt,oBrw) }
Номера подвала колонки нет !


Andrey, а посмотреть указанное место трудно ?
там есть ответ буквально несколькими строками ниже от
uPar1 := nRowPix, ;
uPar2 := nColPix, ;
...
nClickRow := ::GetTxtRow( nRowPix )
nAtCol := Max( ::nAtCol( nColPix ), 1 )

поставь и подсвети в свою ф-ю

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




Пост N: 4814
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.03.16 17:01. Заголовок: Рано радовался... ..


Рано радовался...
oBrw1:aColumns[ nI ]:bFLClicked := {|nRowPix,nColPix,nAt,oBrw| SelectRunColumns(nRowPix,nColPix,nAt,oBrw) }

Как получить номер нажатого подвала колонки ?
nAt - это номер строки таблицы.

Нельзя в исходнике добавить НОМЕР подвала нажатой колонки ?


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




Пост N: 839
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 28.03.16 17:11. Заголовок: Andrey пишет: Нельз..


Andrey пишет:

 цитата:
Нельзя в исходнике добавить НОМЕР подвала нажатой колонки


Во первых он там есть
Во вторых , то что Сергей в посте 925 написал , не подходит что ли ?


SergKis:

 цитата:
и номер колонки в ф-ии будет oBrw:nCell, а oBrw:nRowPos тек. строка и т.д.



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




Пост N: 4815
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.03.16 17:28. Заголовок: Haz пишет: Во вторы..


Haz пишет:

 цитата:
Во вторых , то что Сергей в посте 925 написал , не подходит что ли ?


Это я написал, а потом смотрю ответ выше моего появился...


SergKis пишет:

 цитата:
поставь и подсвети в свою ф-ю


Спасибо БОЛЬШОЕ !


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




Пост N: 4819
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.03.16 22:21. Заголовок: Погонял я нажатие мы..


Погонял я нажатие мышкой подвала таблицы и заметил ляпы:
под 8.1 ширина нажатия подвала - чуть больше половины подвала. Нижняя половина подвала на нажатие мышки никак не реагирует.


Под 7-кой срабатывание при нажатии мышкой сужается до 1/3 подвала таблицы.

А почему так ?

For nI := 2 To oBrw1:nColCount()
oBrw1:aColumns[ nI ]:bFLClicked := {|nRowPix,nColPix,nAt,oBrw| SelectRunColumns(nRowPix,nColPix,nAt,oBrw) }
Next
............
//////////////////////////////////////////////////////////////////
FUNCTION SelectRunColumns(nRowPix,nColPix,nAt,oBrw)
LOCAL nClickRow := oBrw:GetTxtRow( nRowPix )
LOCAL nAtCol := Max( oBrw:nAtCol( nColPix ), 1 )
LOCAL cRet

//MsgDebug(nRowPix,nColPix,nAt,"----",nClickRow,nAtCol)

cRet := Form_SelectRunColumns(nAtCol)
IF LEN(cRet) > 0 // выбрана настройка формул
oBrw1:aColumns[nAtCol]:cFooting := cRet
oBrw1:DrawFooters()
ENDIF

RETURN NIL




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




Пост N: 4822
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.03.16 16:23. Заголовок: Andrey пишет: Погон..


Andrey пишет:

 цитата:
Погонял я нажатие мышкой подвала таблицы и заметил ляпы:
под 8.1 ширина нажатия подвала - чуть больше половины подвала. Нижняя половина подвала на нажатие мышки никак не реагирует.



Сделал обработку подвала в другом примере - заработало без проблем.
Вернулся к этому же примеру и понял, что
при увеличение высоты подвала + ширины колонки подвала будет такая проблема (см.описание выше) !
Как решить эту проблему ?

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




Пост N: 4824
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.04.16 01:14. Заголовок: Вот ещё одна проблем..


Вот ещё одна проблемка....
Назначаю подсказку на один столбец:
oBrw1:cToolTip := {|oBr,nCol,nRow| IIF( nCol==2, cToolTip + " "+HB_NtoS(nRow), "") }


Ставлю мышку на суперхидер - подсказка всё равно отображается:


Как убрать подсказку с суперхидера ?

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


Пост N: 543
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 05.04.16 08:54. Заголовок: Имеется TsBrows на ф..


Имеется TsBrows на форме.Отображаются данные таблицы 1, после некоторых действий надо на этом же месте отобразить данные другой таблицы . Структура та же, алиас другой.
Как правильно переопределить TsBrows

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




Пост N: 850
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 05.04.16 10:31. Заголовок: Vlad04 пишет: Как п..


Vlad04 пишет:

 цитата:
Как правильно переопределить TsBrows


Brw:cAlias := cNewAlias
то что ниже
Brw:Reset()



перед Brw:Reset() важно переопределить блоки кода бровса ( в них остался прежний алиас ).
Я работаю с ADS и для него годится так
 
Brw:cAlias := cAlias
Brw:bGoTop := {|| ( cAlias )->( DbGoTop() ) }
Brw:bGoBottom := {|| ( cAlias )->( DbGoBottom() ) }
Brw:bSkip := {| n | If( n == Nil, n := 1, Nil ), Brw:DbSkipper( n ) }
Brw:bBof := {|| ( cAlias )->( Bof() ) }
Brw:bEof := {|| ( cAlias )->( Eof() ) }


// отсюда специфика ADS
cAdsKeyNo := "{| n, oBrw | If( n == Nil, Round( " + cAlias + "->( ADSGetRelKeyPos() ) * oBrw:nLen, 0 ), " + ;
cAlias + "->( ADSSetRelKeyPos( n / oBrw:nLen ) ) ) }"

cAdsKeyCount := "{|cTag| " + cAlias + "->( ADSKeyCount(cTag,, 1 ) ) }"

Brw:bKeyNo := &cAdsKeyNo
Brw:bKeyCount := &cAdsKeyCount
Brw:bLogicLen := &cAdsKeyCount
Brw:bTagOrder := {|uTag| ( cAlias )->( OrdSetFocus( uTag ) ) }
Brw:bGoToPos := {|n| Eval( Brw:bKeyNo, n, Brw ) }
/*
А это для других RDD
Brw:bKeyNo := {| n | ( cAlias )->( If( n == Nil, If( IndexOrd() > 0, OrdKeyNo(), RecNo() ), ;
If( IndexOrd() > 0, OrdKeyGoto( n ), DbGoTo( n ) ) ) ) }
Brw:bKeyCount := {|| ( cAlias )->( If( IndexOrd() > 0, OrdKeyCount(), LastRec() ) ) }
Brw:bLogicLen := {|| ( cAlias )->( If( IndexOrd() == 0, LastRec(), OrdKeyCount() ) ) }
Brw:bTagOrder := {|uTag| ( cAlias )->( OrdSetFocus( uTag ) ) }
Brw:bGoToPos := {|n| Eval( ::bKeyNo, n ) }

*/

Brw:SetDbf( cAlias )







PS. в случае когда структура другая , нужно убить старый бровс и на его месте создать новый .
В случае когда отличия только в части полей - проще в первом бровсе удалить колонки , которых не должно быть во втором и добавить новые, потом Reset()

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


Пост N: 544
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 05.04.16 11:29. Заголовок: Haz нужно убить ста..


Haz

 цитата:
нужно убить старый бровс


А как ?

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




Пост N: 851
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 05.04.16 12:02. Заголовок: Vlad04 пишет: А как..


Vlad04 пишет:

 цитата:
А как ?



Элементарно )
DoMethod('Form_1', 'Brw', 'Release')

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




Пост N: 930
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.04.16 12:24. Заголовок: Vlad04 пишет: Как пр..


Vlad04 пишет:
 цитата:
Как правильно переопределить TsBrows


можно закрыть dbf с oBrw:cAlias и в той же область открыть аналогичный dbf с таким же алиасом, если использовались oCol:cOrder (сортировка на колонках), то аналогичный dbf должен иметь и аналогичные индексы

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




Пост N: 852
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 05.04.16 13:40. Заголовок: SergKis пишет: отк..


SergKis пишет:

 цитата:
открыть аналогичный dbf с таким же алиасом,



Подтверждаю, это самый простой способ. Использую именно его когда получаю алиас из SQL запроса.
т.к. управляющий индекс не нужен ( сортировка ставится как ORDER BY ) , то достаточно одного Brw:Reset()



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


Пост N: 545
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 05.04.16 14:47. Заголовок: оК! Все нормально!..


оК!
Все нормально!

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


Пост N: 546
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 05.04.16 14:56. Заголовок: С открытием и закры..


С открытием и закрытием все нормально. Как избежать повторного закрытия (открытия) соответственно уже закрытого или
открытого бровза ( исключаем человеческий фактор )?
Для окна делаем так

 цитата:
if !IsWindowDefined(Frm_klient)



а для элемента окна ?

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




Пост N: 4829
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.04.16 15:20. Заголовок: Наверно так: I..


Наверно так:
IF GetControlIndex("Timer_1", cForm ) > 0


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




Пост N: 931
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.04.16 15:55. Заголовок: или #translate IsCon..


или
#translate IsControlDefined ( <ControlName> , <FormName> ) ;
=> ;
_IsControlDefined ( <"ControlName"> , <"FormName"> )


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


Пост N: 547
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 05.04.16 17:49. Заголовок: *------------------..



 цитата:

*-------------------------------- Удаляем Контрол, при его наличии
Procedure Del_Brv()
if _IsControlDefined ( "oBrw" , "DEMO" ) = .t. //вариант
// IF GetControlIndex("oBrw",'Demo' ) > 0
DoMethod('Demo', 'oBrw', 'Release')
endif
Return
*------------------------------- Открывам контрол , если его нет
Procedure Open_Brw()
IF GetControlIndex("oBrw",'Demo' ) = 0 // вариант
// if _IsControlDefined ( "oBrw" , "DEMO" ) = .f.
OpenBrows( "oBrw", 'DEMO', 80, 15, dEMO.Width-20, DEMO.Height-130 , Alias() )
endif
Return
*-----------------------------------------


Оба способа работают, только функции проверки возвращают разные значения.

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




Пост N: 875
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 11.04.16 16:46. Заголовок: мелкий фикс


Григорий, просьба в два метода ::DrawLine() и ::DrawSelect() добавить проверку условия ::lVisible в строках
 
lCheck := ( oColumn:lCheckBox .and. ValType( uData ) == "L" .and. oColumn:lVisible )

примерные номера строк в исходнике 2932 и 3253
без этой проверки , если lCheckBox истина и колонка скрыта, в соседнюю выдает мусор от битмапа.
Тестовый пример писать не стал, т.к. и так все просто. В любом примере TS в колонке по логическому полю задать то что ниже и посмотреть
 
oBrw:aColumns[n]:lCheckBox := .T.
oBrw:Hidecolumns(n, .T. )


PS. Хорошо кстати тестится на примере Сергея Tsb_BitMaps




Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 920
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 11.04.16 17:17. Заголовок: Haz пишет: без этой..


Haz пишет:

 цитата:
без этой проверки , если lCheckBox истина и колонка скрыта, в соседнюю выдает мусор от битмапа


Благодарю за помощь
Поправил, конечно...

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




Пост N: 876
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.04.16 11:57. Заголовок: Григорий еще поправочка


Григорий
Пропущено указание алиаса и метод работает только если oBrw:cAlias является текущей
METHOD LoadFields()
...
nE := If( aNames == Nil, n, ( ::cAlias )->(FieldPos( aNames[ n ] )) )

Спасибо: 1 
Профиль
gfilatov2002
moderator




Пост N: 921
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 12.04.16 14:20. Заголовок: Haz пишет: Пропущен..


Haz пишет:

 цитата:
Пропущено указание алиаса


Снова благодарю за исправление
Кстати, эта опечатка есть и у автора библиотеки...

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




Пост N: 877
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.04.16 15:03. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Кстати, эта опечатка есть и у автора


не важно у кого есть , важно что исправлено
я минут 15 тупил почему то работает то нет, пока не полез в сырцы

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 922
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 12.04.16 15:12. Заголовок: Haz пишет: пока не ..


Haz пишет:

 цитата:
пока не полез в сырцы


Сейчас обнаружил, что не могу прикрутить подсказки к датам в Вашем календаре, т.к. при динамическом определении данных в массиве
у блока кода cTooltip параметр номер колонки nCol всегда равен номеру последнего столбца.
При обычном присвоении массива типа oBrw3:SetArray( aItems ), все работает нормально.
Может гляните, что нужно поправить, у меня НЕ выходит...

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




Пост N: 878
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.04.16 15:19. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
параметр номер колонки nCol всегда равен номеру последнего столбца.


я это через макроподстановку делаю
 
oBrw:aColumns[ i ]:bData := &( "{|| GetDate( " + NTOC( i ) + ")}")

Выложите сюда кусок кода , может что придумаем вместе

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 923
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 12.04.16 15:26. Заголовок: Haz пишет: Выложите..


Haz пишет:

 цитата:
Выложите сюда кусок кода


Да весь код - это одна строка

 цитата:

oBrw:cToolTip := {|oBr,nCol,nRow| if( nRow > 0, "Col ="+str(nCol,3)+" Row ="+str(nRow,3), ) }


который выдает для любой колонки Col = 7, а ряд показывает правильно...


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




Пост N: 879
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.04.16 15:28. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Да весь код - это одна строка


ок, сейчас что нибудь сделаю

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




Пост N: 880
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.04.16 16:00. Заголовок: Все из-за замороженн..


Все из-за замороженных колонок
В примере они заморожены все 7 , ::nFreeze := 7 но lLockFreeze := FALSE
Это чтоб бровс не панарамировался при перемещении к последней колонке
При показе cToolTip используется вычисление колонки исходя из позиции мыши, при этом автоматом прибавляется замороженный кусок
это метод ::nAtCol() . Либо менять его , либо тут
 
METHOD MouseMove( nRowPix, nColPix, nKeyFlags ) CLASS TSBrowse

Local nI, nIcon, lHeader, lMChange, nFirst, nLast, nDestCol, ;
cMsg := ::cMsg, ;
nColPixPos := 0, ;
lFrozen := .F., ;
nColumn := Max( 1, ::nAtCol( nColPix, .T. ) ), ;







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




Пост N: 881
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.04.16 16:04. Заголовок: Haz пишет: nColumn..


Haz пишет:

 цитата:
nColumn := Max( 1, ::nAtCol( nColPix, .T. ) ), ;



Но это тоже не правильно
нужно переделывать ::nAtCol() , это он дурит при наличии заморозки.
Пока не готов сказать как, думаю ...

Посмотрел внимательнее - беда всеже в методе MouseMove , там нужно именно nColumn := Max( 1, ::nAtCol( nColPix, .T. ) ),
тогда номер видимой колонки определяется правильно ( именно видимой на экране а не порядковый в бровсе )
Дальше нужно менять логику получения номера колонки бровса из видимого на экране с учетом фриз и скрола и скрытых
Опять есть над чем думать ...

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




Пост N: 936
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.04.16 16:27. Заголовок: Haz переделывать nA..


Haz
переделывать nAtCol не надо, надо сделать так:
 
METHOD MouseMove( nRowPix, nColPix, nKeyFlags ) CLASS TSBrowse
...
nRowLine := ::GetTxtRow( nRowPix ), ctooltip, nCol
...
If ::nToolTip != nColumn .or. nRowLine != ::nToolTipRow
ctooltip := ::aColumns[ nColumn ]:cToolTip
If Valtype( ctooltip ) == "B"
nCol := ::nAtCol(nColPix, .T.)
ctooltip := Eval( ctooltip, Self, nCol, nRowLine )
EndIf
...
If ::nToolTip != nColumn .or. nRowLine != ::nToolTipRow
ctooltip := ::cToolTip
If Valtype( ctooltip ) == "B"
nCol := ::nAtCol(nColPix, .T.)
ctooltip := Eval( ctooltip, Self, nCol, nRowLine )
EndIf

этого достаточно


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




Пост N: 937
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.04.16 16:30. Заголовок: PS через ncol := Max..


PS
через ncol := Max(1, ::nAtCol(...)) может лучше

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




Пост N: 882
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.04.16 16:52. Заголовок: SergKis пишет: пере..


SergKis пишет:

 цитата:
переделывать nAtCol не надо, надо сделать так:


тоже переделал MouseMove ....
nCol := ::nAtCol(nColPix, .T.) показывает видимую ( как мы видим ) на экране колонку и не понимаем на взгляд сколько заморожено и сколько скрыто скролом ( ушло влево за границу ) или сколько из того что видим скрыты логически т.е. ::HideColumn()
соответственно nCol не равен номеру колонки бровса.
В примере календяря заморозил 1 колонку и скролом спрятал вторую потом проверял что кажет

Может я не прав , но по сырцам ::nAtCol зависим от ::nColPos
я попробывал рассчитать заново
 
Сначала всю заморозку
For nI := 1 To ::nFreeze
IF nColPix > nColPixPos
nColumn := nI
END
nColPixPos += ::GetColSizes()[ nI ]
Next

Потом с учетом видимости
For nI := 1 To ::nColCount()
IF nI > ::nFreeze
IF nColPix > nColPixPos
nColumn ++
END
nColPixPos += IF(::IsColVis2(nI), ::GetColSizes()[ nI ], 0 )
END
End


Вроде кажет правильно , nColumn равен номеру колонки бровса

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




Пост N: 938
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.04.16 17:07. Заголовок: У себя сделал: METHO..


У себя сделал:
 
METHOD MouseMove( nRowPix, nColPix, nKeyFlags ) CLASS TSBrowse
...
Local ctooltip, nCol := Max( 1, ::nAtCol( nColPix, .T. ) )
...
If ( lHeader := nRowLine == 0 ) .and. ! Empty( ::aColumns ) .and. ;
! Empty( ::aColumns[ nCol ]:cToolTip )
If ::nToolTip != nCol .or. nRowLine != ::nToolTipRow
ctooltip := ::aColumns[ nCol ]:cToolTip
If Valtype(ctooltip) == "B"
ctooltip := Eval(ctooltip, Self, nCol, nRowLine)
EndIf
SetToolTip ( ::hWnd , ctooltip , ::hToolTip )
SysRefresh()
::nToolTipRow := nRowLine
EndIf

::nToolTip := nCol
Else
If ::nToolTip != nCol .or. nRowLine != ::nToolTipRow
ctooltip := ::cToolTip
If Valtype(ctooltip) == "B"
ctooltip := Eval(ctooltip, Self, nCol, nRowLine)
EndIf
SetToolTip ( ::hWnd , ctooltip , ::hToolTip )
SysRefresh()
::nToolTipRow := nRowLine
endif

::nToolTip := nCol
EndIf
...

заменил nColumn на nCol, что касается ToolTip - вроде нормально ...
пример: click here

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




Пост N: 886
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.04.16 17:12. Заголовок: Сергей А такой тест ..


Сергей
А такой тест проходит ?
В примере календяря заморозил 1 колонку и скролом спрятал вторую потом проверял что кажет

или скинь полный код MouseMove , проверю


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




Пост N: 940
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.04.16 17:26. Заголовок: Haz пишет:скинь полн..


Haz пишет:
 цитата:
скинь полный код MouseMove


тут: Скрытый текст


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




Пост N: 887
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.04.16 17:35. Заголовок: SergKis пишет: тут:..


Cергей, проверил не катит
1 В исходнике календаря пропиши
oBrw:nFreeze := 1
oBrw:lLockFreeze := TRUE
2 Запусти и кнопкой вправо до упора пока не появится пустое поле
3 Поставь грызуна на колонку "СР " покажет 2

На экране видим мы ее второй но в бровсе она третья


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




Пост N: 941
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.04.16 17:41. Заголовок: Игорь, конечно, с уч..


Игорь, конечно, с учетом видимости, ты прав, будет врать. Решить можно новым методом или вводить еще параметр в nAtCol (менять алгоритм nAtCol опасно - задействован сильно кругом)

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




Пост N: 888
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.04.16 17:49. Заголовок: SergKis пишет: (мен..


SergKis пишет:

 цитата:
(менять алгоритм nAtCol опасно - задействован сильно кругом)


А что думаешь про смену алгоритма ::MouseMove как я предложил ( расчет номера колонки двумя циклами , можно в один свести )
Ведь там у тебя nColumn, это именно номер колонки бровса. и кроме как в тултипе нигде не используется ( есть в блоке , но там как параметр - локальная переменная )
а ::nAtCol менять не надо

 
* ============================================================================
* METHOD TSBrowse:MouseMove() Version 9.0 Nov/30/2009
* ============================================================================

METHOD MouseMove( nRowPix, nColPix, nKeyFlags ) CLASS TSBrowse

Local nI, nIcon, lHeader, lMChange, nFirst, nLast, nDestCol, ;
cMsg := ::cMsg, ;
nColPixPos := 0, ;
lFrozen := .F., ;
// nColumn := Max( 1, ::nAtCol( nColPix , .T.) ), ;
nRowLine := ::GetTxtRow( nRowPix ), ctooltip

Default ::lMouseDown := .F., ;
::lNoMoveCols := .F., ;
::lDontChange := .F.


If ::lIconView

If ( nIcon := ::nAtIcon( nRowPix, nColPix ) ) != 0

If ::nIconPos != 0 .and. ::nIconPos != nIcon
::DrawIcon( ::nIconPos )
EndIf

::nIconPos := nIcon
::DrawIcon( nIcon, .T. )
CursorHand()
Return 0
EndIf
EndIf

If ::nFreeze > 0
For nI := 1 To ::nFreeze
IF nColPix > nColPixPos
nColumn := nI
END
nColPixPos += ::GetColSizes()[ nI ]
Next
If nColPix < nColPixPos
lFrozen := .T.
EndIf
EndIf

For nI := 1 To ::nColCount()
IF nI > ::nFreeze
IF nColPix > nColPixPos
nColumn ++
END
nColPixPos += IF(::IsColVis2(nI), ::GetColSizes()[ nI ], 0 )
END
End

If ( lHeader := ( nRowLine == 0 ) ) .and. ! Empty( ::aColumns ) .and. ;
! Empty( ::aColumns[ nColumn ]:cToolTip )
If ::nToolTip != nColumn .or. nRowLine != ::nToolTipRow
ctooltip := ::aColumns[ nColumn ]:cToolTip
If Valtype( ctooltip ) == "B"
ctooltip := Eval( ctooltip, Self, nColumn, nRowLine )
EndIf
SetToolTip( ::hWnd, ctooltip, ::hToolTip )
SysRefresh()
::nToolTipRow := nRowLine
EndIf
::nToolTip := nColumn
Else
If ::nToolTip != nColumn .or. nRowLine != ::nToolTipRow
ctooltip := ::cToolTip
If Valtype( ctooltip ) == "B"
ctooltip := Eval( ctooltip, Self, nColumn, nRowLine )
EndIf
SetToolTip( ::hWnd, ctooltip, ::hToolTip )
SysRefresh()
::nToolTipRow := nRowLine
EndIf
::nToolTip := nColumn
EndIf

lHeader := ( ::GetTxtRow( nRowPix ) == 0 .or. ::GetTxtRow( nRowPix ) == -2 )

If ! ::lGrasp .and. ( lFrozen .or. ! lHeader .or. ! ::lMChange )
// don't allow MouseMove to drag/resize columns
// unless in header row and not in frozen zone
CursorArrow()

If ::lCaptured
If ::lLineDrag
::VertLine()
::lLineDrag := .F.
EndIf

ReleaseCapture()
::lColDrag := ::lCaptured := ::lMouseDown := .F.
ElseIf ::lDontChange
CursorStop()
Return 0
EndIf

lMChange := ::lMChange // save it for restore
::lMChange := .F.

If ::lCellBrw .and. ! Empty( ::aColumns[ Max( 1, ::nAtCol( nColPix ) ) ]:cMsg )
::cMsg := ::aColumns[ Max( 1, ::nAtCol( nColPix ) ) ]:cMsg
Else
::cMsg := cMsg
EndIf

::cMsg := If( ValType( ::cMsg ) == "B", Eval( ::cMsg, Self, Max( 1, ::nAtCol( nColPix ) ) ), ::cMsg )
::Super:MouseMove( nRowPix, nColPix, nKeyFlags )
::lMChange := lMChange
::cMsg := cMsg
Return 0
EndIf

If ::lMChange .and. ! ::lNoMoveCols .and. ! ::lDontChange
If lHeader
If ! Empty( ::aSuperHead ) .and. !::lLineDrag

nFirst := 0
nLast := 0
Aeval( ::aSuperHead, { | aSup, nCol | nFirst := If( ::nDragCol >= aSup[1] .and. ::nDragCol <= aSup[ 2 ],nCol,nFirst ), ;
nLast := max(nLast,aSup[ 2 ])} )

nDestCol := ::nAtCol( nColPix )
if nLast < nDestCol
nLast := nFirst+1
else
Aeval( ::aSuperHead, { | aSup, nCol | nlast := If( nDestCol >= aSup[1] .and. nDestCol <= aSup[ 2 ],nCol,nlast )} )
endif
If nLast != nFirst
::lGrasp := .F.
CursorHand()
::lColDrag := ::lCaptured := ::lMouseDown := .F.
endif
endif
If ::lGrasp // avoid dragging between header & rows
::lGrasp := .F.
CursorArrow() // restore default cursor
EndIf

If ::lColDrag
CursorSize()
Else
If ::lLineDrag
::VertLine( nColPix )
CursorWE()
Else
If AScan( ::GetColSizes(), { | nColumn | nColPixPos += nColumn, ;
nColPix >= nColPixPos - 2 .and. nColPix <= nColPixPos + 2 }, ::nColPos ) != 0
CursorWE()
Else
CursorHand()
EndIf
EndIf
EndIf
ElseIf ::lGrasp
::lCaptured := ::lColDrag := .F. // to avoid collision with header/column dragging
::lMouseDown := .T. // has to be down until dragging finishes
::Super:MouseMove( nRowPix, nColPix, nKeyFlags )
Else
CursorArrow()
EndIf
Else
If ::lDontChange
CursorStop()
Else
CursorArrow()
EndIf
EndIf

Return 0


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




Пост N: 942
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.04.16 18:22. Заголовок: Haz пишет:А что дума..


Haz пишет:
 цитата:
А что думаешь про смену алгоритма ::MouseMove


По мне лучше метод (думаю пригодиться в использовании). У себя сделал так на базе твоего алгоритма:
 
METHOD nAtColReal( nColPixel ) CLASS TSBrowse

Local nColumn := 0, ;
aSizes := ::GetColSizes(), ;
nI := 0, ;
nColPix := 0

For nI := 1 To ::nFreeze
IF nColPixel > nColPix
nColumn := nI
ENDIF
nColPix += aSizes[ nI ]
Next

For nI := 1 To ::nColCount()
IF nI > ::nFreeze
IF nColPixel > nColPix
nColumn ++
ENDIF
nColPix += IF(::IsColVis2(nI), aSizes[ nI ], 0 )
ENDIF
Next

Return nColumn

тогда в MouseMove
Local nCol := Max( 1, ::nAtColReal( nColPix ) )
...

у себя проверил - нормальненько вроде

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 924
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 12.04.16 20:19. Заголовок: SergKis пишет: По м..


SergKis пишет:

 цитата:
По мне лучше метод


Огромная благодарность за помощь!
Добавил этот новый метод, но переименовал его в nAtColActual
Вот что получилось


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




Пост N: 889
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 13.04.16 11:01. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Вот что получилось


Нормальненько получилось , в тултип можно добавить еще и номер недели
 
//Find number of week within year
FT_WOY( <dDate> ) -> <nResult>


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




Пост N: 5592
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 13.04.16 12:07. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Вот что получилось


Поправил линк на картинку (не видно было)

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




Пост N: 4847
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.04.16 19:57. Заголовок: В новой версии 1604 ..


В новой версии 1604 ушёл баг про который писал в Пост N: 4819 и N: 4822
Спасибо !

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




Пост N: 4849
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.04.16 02:18. Заголовок: Тестирую новую верси..


Тестирую новую версию - попал на БОЛЬШОЙ БАГ !
Проверил старую, там тоже "падает" программа...
Что делать, не знаю...

Из основного Tsbrowsa (свои переменные STATIC цвета, PUBLIC oBrw и т.д.)
вызываю другой Tsbrowse (со своими STATIC, PUBLIC oBrw_5 - переменными).
У основного в цветах таблицы определяю типа так:
AADD( aStatClsUsl , { { || Master->KDoljn == 0 .OR. Master->KMaster == 0 }, "12/4" } )
AADD( aStatClsUsl , { { || LEN( ALLTRIM(Master->Master) ) == 0 } , {128, 255} } )
AADD( aStatClsUsl , { { || Master->KDel == 0 }, "4/2" } )

Как в примере MiniGUI\SAMPLES\Advanced\Tsb_config

После вызова другого Tsbrowse отладка не действует, окно с MsgDebug() не появляется.
Хотя ставлю MsgLog(Alias()) - видно что база переключилась на новую.

И тип ошибки вообще убивает:
Error BASE/1003 Переменная не существует: KMASTER
Called from (b)FIELDBLOCK(0)
Called from TSBROWSE:DRAWLINE(2928)
Called from TSBROWSE:DRAWSELECT(3176)
Called from TSBROWSE:LOSTFOCUS(8108)
Called from TCONTROL:HANDLEEVENT(898)
Called from TSBROWSE:HANDLEEVENT(7342)
Called from EVENTS(75)


Так в новой базе и нету такого поля !!!!
Причём тут запрос этого поля, я его не делаю...
Или это oBrw:bChange отрабатывает ?
Как тогда остановить его на время обращения к другой базе ?


Вот стек вызов процедур:


Помогите пожалуйста решить мою проблему !


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




Пост N: 944
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.04.16 07:50. Заголовок: Andrey для блока от..


Andrey
для блока отображения используй FieldWBlock(cFieldName, select(cAlias)) вместо FieldBlock

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




Пост N: 4850
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 15.04.16 10:01. Заголовок: SergKis пишет: для ..


SergKis пишет:

 цитата:
для блока отображения используй FieldWBlock(cFieldName, select(cAlias)) вместо FieldBlock



Блин, так просто... Сразу заработало !!! Спасибо БОЛЬШОЕ !!!

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 930
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 15.04.16 10:26. Заголовок: Andrey пишет: Как в..


Andrey пишет:

 цитата:
Как в примере MiniGUI\SAMPLES\Advanced\Tsb_config


Просто к сведению. Поправил эту неточность в вышеуказанном примере

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




Пост N: 4853
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.04.16 08:33. Заголовок: Всем привет ! Что-то..


Всем привет !
Что-то неправильно работает в Tsbrowse следующее cDateBlock := 'FieldWblock( "VidOpl", Select("VidOpl") )'
или '{ || VidOpl->VidOpl }' , использую oBrw:aColumns[nI]:bData := &( cDateBlock )
Вот скрин:


Если делаю через свою функцию cDateBlock := '{ || SAY_SEL((Alias())->KVidOpl,"VidOpl","VidOpl") }', то показывает правильно:



Соседнюю колонку показывает правильно, там делаю cDateBlock := 'FieldWblock( "StDogov", Select("StDogov") )' !
База не битая, индексы правильные...
Из-за чего такое может быть ?


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




Пост N: 893
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 18.04.16 11:00. Заголовок: ­Andrey пишет: Что-т..


*PRIVAT*

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




Пост N: 4854
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.04.16 19:48. Заголовок: Вот ещё одна непонят..


Вот ещё одна непонятка в новой программе...
Если редактируемое поле в таблице подключено в индексное выражение, то после окончания редактирования его, курсор уходит неизвестно куда, а потом при движении стрелка вверх/вниз появляется вторая фантомная таблица-дубль !
Т.е. все координаты Tsbrowsa сместились на новые...
Вот так на экране это выглядит:


И куда здесь "копать" ?

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




Пост N: 894
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 18.04.16 20:04. Заголовок: Andrey пишет: И куд..


Andrey пишет:

 цитата:
И куда здесь "копать" ?



Самое простое. - после редактирования oBrw:GotoRecNo( (oBrw:cAlias)->(Recno()) )

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




Пост N: 4855
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.04.16 00:28. Заголовок: Да есть такая обрабо..


Да есть такая обработка у меня. ( наверно опечатался - GotoRecNo ?)
oBrw:aColumns[nJ]:bPrevEdit := {|| nRecBuff := (oBrw:cAlias)->(RecNo()), MyFieldEdit( oBrw:aColumns[oBrwS:nCell]:Cargo ) }
oBrw:aColumns[nI]:bPostEdit := {|| oBrw:GoToRec(nRecBuff), oBrw:GoLeft(), oBrw:Refresh(.T.) }

А координаты бровса почему "улетают" ?

Если убрать bPostEdit то улёт прекращается, но только тогда курсор может оказаться после редактирования на другой позиции.

У меня еще в обработке сидит oBrw:bUserKeys := { |a,b,c| MyKeyCheck(a,b,c) }, где отслеживается набор букв и
делается фильтр по этому полю.
CASE nKey > 47 .AND. nKey < 254
cStSearchValue := cStSearchValue + KeyToChar(nKey)//LatRus( CHR(nKey) )
Form_Spr.Text_1.Value := cStSearchValue
RefreshBrowse()

Скрытый текст


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




Пост N: 895
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 19.04.16 10:20. Заголовок: Andrey пишет: Если ..


Andrey пишет:

 цитата:
Если убрать bPostEdit то улёт прекращается, но только тогда курсор может оказаться после редактирования на другой позиции.


замени на :bEditEnd
А это
 цитата:
nRecBuff := (oBrw:cAlias)->(RecNo())

совершенно лишнее если спецом не меняешь текущую запись то она же и осталась.
Можно просто GotoRec( (oBrw:cAlias)->(Recno()) )




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




Пост N: 896
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 19.04.16 11:35. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Добавил этот новый метод, но переименовал его в nAtColActual


еще мелкий фикс, сейчас объясню
Часто использую перестройку бровса на лету - удаляю все колонки кроме первой в ней у меня ID записи и потом добавляю нужные для конкресного случая
::HideColumns() не катит для широких таблиц т.к. начинаются тормоза с пропусками скрытых колонок и прочие не нужные прорисовки
Если в этот момент курсор стоит правее первой колонки то ::MouseMove высчитывает nColumn как 2 и при попытке проверить ToolTip получаем вылет с ошибкой.
Вот код, на входе nColumn уже равен 1 , nFreeze = 0 , ::nColCount() = 1 т.к. все кроме 1 поудалял
 
::MouseMove() строка 8182

For nI := 1 To ::nColCount()
IF nI > ::nFreeze
IF nColPix > nColPixPos
nColumn ++ // Тут получим 2
END
nColPixPos += IF(::IsColVis2(nI), ::GetColSizes()[ nI ], 0 )
END
End


Далее в строке 8192 пытаемся влезть в несуществующую колонку
 
If ( lHeader := ( nRowLine == 0 ) ) .and. ! Empty( ::aColumns ) .and. ;
! Empty( ::aColumns[ nColumn ]:cToolTip )
....


предлагаю ВЕСЬ кусок кода с выводом тултипа по колонке заключить в условие
 
IF nColumn <= ::nColCount() // то есть курсор на области колонок
А тут все с тултипами
END



Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 931
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.04.16 12:09. Заголовок: Haz пишет: предлага..


Haz пишет:

 цитата:
предлагаю ВЕСЬ кусок кода с выводом тултипа по колонке


Благодарю за разъяснение!

Переработал этот кусок кода таким образом:

   If nColumn <= ::nColCount() 

If ( lHeader := ( nRowLine == 0 .or. nRowLine == -2 ) ) .and. ! Empty( ::aColumns ) .and. ;
! Empty( ::aColumns[ nColumn ]:cToolTip )
cToolTip := ::aColumns[ nColumn ]:cToolTip // column's header tooltip
Else
cToolTip := ::cToolTip // grid's tooltip
EndIf

If ::nToolTip != nColumn .or. nRowLine != ::nToolTipRow

If Valtype( ctooltip ) == "B"
cToolTip := Eval( cToolTip, Self, nColumn, nRowLine )
EndIf

SetToolTip( ::hWnd, cToolTip, ::hToolTip )
SysRefresh()

::nToolTipRow := nRowLine
EndIf

::nToolTip := nColumn
EndIf
...



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




Пост N: 4860
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.04.16 18:41. Заголовок: Всем привет ! Испол..


Всем привет !

Использую SetArrayTo().
Как в нём сделать сортировку сразу по ДВУМ колонкам ?
Или такое сделать нельзя ?
У меня графа квартира сделаны в двух колонках: номер квартиры (NKVAR) и буква квартиры (CKVAR).

Заранее спасибо за помощь.

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




Пост N: 897
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 22.04.16 08:26. Заголовок: Andrey пишет: Как в..


Andrey пишет:

 цитата:
Как в нём сделать сортировку сразу по ДВУМ колонкам ?


Asort () с блоком кода для сортировки. Хоть повсем сразу.

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




Пост N: 4861
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.04.16 18:08. Заголовок: Haz пишет: Asort ()..


Haz пишет:

 цитата:
Asort () с блоком кода для сортировки. Хоть повсем сразу.



Покрутил, так и эдак.
Если добавлять новую запись и ставить новый номер квартиры, или изменить любую запись с номером квартиры, то тогда нужно опять делать aSort().
Решил пойти по другому пути: делаю скрытую колонку, помещаю туда STR(NKVAR)+CKVAR и делаю сортировку oBrw:SetOrder(2, , .F. )
Единственно что не понял/не знаю как сделать в первой колонке нумерацию автоматом по возрастанию ?
Сейчас после добавления/удаления записи приходиться ручками пересчитывать нумерацию:
FOR nI := 1 TO oBrw:nLen
oBrw:aArray[ nI, 1 ] := nI // новая нумерация №№
NEXT



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




Пост N: 899
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 22.04.16 18:17. Заголовок: Andrey пишет: Единс..


Andrey пишет:

 цитата:
Единственно что не понял/не знаю как сделать в первой колонке нумерацию автоматом по возрастанию ?


а oBrw:nAt не подходит ? Бровс по массиву использую редко, но вроде там ::nAt правильный

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




Пост N: 4862
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.04.16 19:22. Заголовок: Haz пишет: а oBrw:n..


Haz пишет:

 цитата:
а oBrw:nAt не подходит ?


А если добавляется/удаляется запись ?
Он автоматом пересчитывается ?

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




Пост N: 903
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 22.04.16 19:40. Заголовок: Andrey пишет: Он ав..


Andrey пишет:

 цитата:
Он автоматом пересчитывается ?



ХЗ попробуй

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




Пост N: 4863
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.04.16 23:58. Заголовок: Попробовал так: ..


Попробовал так:
nI := 1
oBrw:aColumns[ nI ]:cHeading := "№№"
oBrw:aColumns[ nI ]:bData := {|| oBrw:nLogicPos }


Вроде работает правильно, при удалении/добавлении записи счетчик ставиться правильно.
Это при сортировке по скрытой колонке по содержимому STR(NKVAR)+CKVAR - oBrwA:SetOrder(2, , .F. )


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




Пост N: 4865
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.04.16 20:50. Заголовок: Заметил такую особен..


Заметил такую особенность. Если есть первые скрытые столбцы, то при движение маркера/курсора на первые столбцы, он пропадает.
Юзер не видит курсор, у него паника....
Как исправить пропадание курсора из таблицы ?

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




Пост N: 906
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 23.04.16 23:11. Заголовок: Andrey пишет: Как и..


Andrey пишет:

 цитата:
Как исправить пропадание курсора из таблицы ?


Не использовать скрытые столбцы или менять исходники TS
я отказался от скрытых...

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




Пост N: 4867
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.04.16 18:12. Заголовок: Нашёл один вариант. ..


Нашёл один вариант. Если колонки скрытые стоят первыми, то можно делать так:
oBrwA:nFreeze := 3 // Заморозить первых ХХ столбца

И ещё тогда наверно можно скрытые колонки переместить в первые ряды и заморозить их.

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




Пост N: 907
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 24.04.16 21:36. Заголовок: Andrey пишет: Нашёл..


Andrey пишет:

 цитата:
Нашёл один вариант


зачем они вообще нужны если их скрыли, их лучше удалить . Потребуется - добавить
Удаляются ведь только колонки , поля в алиасе остаются

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




Пост N: 909
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 28.04.16 18:33. Заголовок: Режим вставки по умолчанию в ::Edit()


Григорий . можно в метод ::Edit() первыми строками добавить
 
IF !IsInsertActive()
iif( _HMG_IsXPorLater, KeyToggleNT( VK_INSERT ), KeyToggle( VK_INSERT ) )
END

Не все владеют слепой печатью, пользователи плачут что печатают уткнувшись в клаву, а когда глаза поднимают, то видят что был режим замены и стерто половина того что было в длинном текстовом поле

Как универсальный вариант, можно добавить флаг oBrw:lInsert и если его выставили в .Т. как oBrw:lInsert := .T. при инициализации бровса , то так
 
IF ValType(::lInsert) == "L"
IF IsInsertActive() <> ::lInsert
iif( _HMG_IsXPorLater, KeyToggleNT( VK_INSERT ), KeyToggle( VK_INSERT ) )
END
END

тогда можно не только назначать по умолчанию, но и отключать обработку как oBrw:lInsert := NIL



Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 934
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 29.04.16 10:08. Заголовок: Haz пишет: IF Va..


Haz пишет:

 цитата:

IF ValType(::lInsert) == "L"
IF IsInsertActive() <> ::lInsert
iif( _HMG_IsXPorLater, KeyToggleNT( VK_INSERT ), KeyToggle( VK_INSERT ) )
END
END


Дельное предложение! Принимается

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




Пост N: 4886
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.04.16 11:46. Заголовок: Привет всем ! Работ..


Привет всем !

Работаю с SetArrayTo(). В процессе удаляю все записи с таблицы. Одна всегда остаётся. И не редактируется.
Наверно это мираж-запись, чтобы SetArrayTo() не сломался.
Как определить что юзер удалил все записи из таблицы и закрыть таблицу ?
oBrw:nAt возвращает всегда 1.


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




Пост N: 916
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 30.04.16 12:19. Заголовок: Andrey пишет: Навер..


Andrey пишет:

 цитата:
Наверно это мираж-запись, чтобы SetArrayTo() не сломался.


Сейчас придет SergKis и расскажет зачем он туда миражей напихал ...
я воздержусь, скажу только по следующему вопросу

Andrey пишет:

 цитата:
oBrw:nAt возвращает всегда 1.


::nAt используется в исходнике TS как индекс массива , к примеру строка 1252 исходника
 
::aArray[ ::nAt, 1 ] )

Вывод думаю очевиден

Andrey пишет:

 цитата:
Как определить что юзер удалил все записи из таблицы и закрыть таблицу ?


или переходить на ARRAYRDD какой нить и смотреть на RecCount()
или в самом массиве держать признак и анализировать его

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




Пост N: 965
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 30.04.16 13:33. Заголовок: Andrey пишет:В проце..


Andrey пишет:
 цитата:
В процессе удаляю все записи с таблицы. Одна всегда остаётся. И не редактируется


А посмотреть, что прописано в TsBrowse при удалении слабо ?
Ты используешь метод DeleteRow(lAll) для удаления, и вряд ли бы ты хотел, что бы всегда сваливалась программа при удалении последней записи. поэтому сделано для массива:
 
METHOD DeleteRow(lAll) CLASS TSBrowse
...
If Len( ::aArray ) == 0
::aArray := { AClone( ::aDefValue ) }
::lPhantArrRow := .T.
If ::aArray[ 1, 1 ] == Nil
ARRDEL_( ::aArray[ 1 ], 1 )
EndIf
EndIf
...

Проверять удаление последней записи и др. валидности за тебя никто делать не будет.


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




Пост N: 966
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 30.04.16 13:39. Заголовок: Andrey пишет:Работаю..


Andrey пишет:
 цитата:
Работаю с SetArrayTo()


Ты работаешь\используешь TsBrowse, а не SetArrayTo(), SetArray(), SetFields() - это методы установки начальных данных для работы TsBrowse, чем отличаются можно глянуть текст, для ясности в голове, что и как применять, а то складывается впечатление и примеров много сделал, а суть (откуда ноги растут) пропустил

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




Пост N: 4887
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.04.16 15:18. Заголовок: SergKis пишет: а то..


SergKis пишет:

 цитата:
а то складывается впечатление и примеров много сделал, а суть (откуда ноги растут) пропустил


Это точно !

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




Пост N: 967
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 30.04.16 16:22. Заголовок: Andrey пишет:Это точ..


Andrey пишет:
 цитата:
Это точно !


Надеюсь ты увидел в приведенном куске текста
::lPhantArrRow := .T.
можешь для массива воспользоваться после вызова метода удаления
If oBrw:lPhantArrRow // тек.\последняя\первая запись фантомная
// тут дейсвия по закрытию TsBrowse
EndIf
Другой (общий) вариант задать oBrw:bDelete := {| nAt,oBr,lAll | lDeleteRec := .T., .T. }
и в функции удаления делаем:
Private lDeleteRec := .F.
oBrw:DeleteRow()
If lDeleteRec .and. Len(oBrw:aArray) == 1
// тут дейсвия по закрытию TsBrowse
EndIf



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




Пост N: 4888
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.04.16 20:07. Заголовок: SergKis , спасибо за..


SergKis , спасибо за разъяснения !
Понял куда двигаться !

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




Пост N: 968
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 30.04.16 21:06. Заголовок: Andrey пишет:Понял к..


Andrey пишет:
 цитата:
Понял куда двигаться !


Тогда не забудь, что есть и oBrw:bPostDel := {|oBr| ... } и если в oBrw:bDelete обрабатывается логический возврат ( при .F. отменяется удаление), то bPostDel выполняется всегда после удаления.
Устанавливать режим удаления желательно oBrw:SetDeleteMode( lOnOff, lConfirm, bDelete, bPostDel )



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




Пост N: 917
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 30.04.16 21:27. Заголовок: SergKis пишет: Тогд..


SergKis пишет:

 цитата:
Тогда не забудь


Ну все разжевал
Тогда и я спрошу, вдруг мне так же повезет
Как отловить событие изменения ширины колонки мышкой?
Хочу автосохранение для пользователя сделать.
Вчера озадачился не успел закончить. Отложил на послепраздники.
Пока лезу через событие мыши - отпускание левой кнопки.
Прямого признака колонки типа bHeightChange нет. Есть просто прорисовка вертикали vertline()
Блок напрашивается туда, но пока хочу подобраться стандартными путями


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




Пост N: 969
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 30.04.16 22:26. Заголовок: Haz пишет: вдруг мне..


Haz пишет:
 цитата:
вдруг мне так же повезет


повезло или нет, сам решай - протокол сообщений (вывод вставлен в TSBROWSE:HANDLEEVENT и TCONTROL:HANDLEEVENT):
...
TSBROWSE:HANDLEEVENT 135 WM_GETDLGCOD
TSBROWSE:HANDLEEVENT 513 WM_LBUTTONDO
TCONTROL:HANDLEEVENT 513 WM_LBUTTONDO
TSBROWSE:HANDLEEVENT 512 WM_MOUSEMOVE
TCONTROL:HANDLEEVENT 512 WM_MOUSEMOVE
...
TCONTROL:HANDLEEVENT 512 WM_MOUSEMOVE
TSBROWSE:HANDLEEVENT 512 WM_MOUSEMOVE
TCONTROL:HANDLEEVENT 512 WM_MOUSEMOVE
TSBROWSE:HANDLEEVENT 514 WM_LBUTTONUP
TCONTROL:HANDLEEVENT 514 WM_LBUTTONUP
TSBROWSE:HANDLEEVENT 533 WM_CAPTURECHANGED // думаю это
TCONTROL:HANDLEEVENT 533 WM_CAPTURECHANGED
TSBROWSE:HANDLEEVENT 132 WM_NCHITTEST
TCONTROL:HANDLEEVENT 132 WM_NCHITTEST


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




Пост N: 970
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 30.04.16 22:39. Заголовок: Haz На мой вхгляд м..


Haz
На мой вхгляд мудришь, воспользуйся уже готовым
 
METHOD Destroy() CLASS TSBrowse
LOCAL i

Default ::lDestroy := .F.

If ::bDestroy != Nil
Eval(::bDestroy, Self)
EndIf

т.е. при завершении работы с Tsb сохраняй размеры колонок (с кол-вом их), а перед созданием tsb, считывай, а в процессе работы пусть двигают колонки сколько хотят

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




Пост N: 918
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 30.04.16 22:56. Заголовок: SergKis пишет: Dest..


SergKis пишет:

 цитата:
Destroy()


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

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




Пост N: 971
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 30.04.16 23:17. Заголовок: Haz пишет:сработает ..


Haz пишет:
 цитата:
сработает ли


Думаю да, т.к. переменные объекта существуют, метотоды доступны и destroy() - собственный метод

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




Пост N: 919
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 30.04.16 23:34. Заголовок: SergKis пишет: Дума..


SergKis пишет:

 цитата:
Думаю да, т.к. переменные объекта существуют, метотоды доступны и destroy() - собственный метод


у пользователей свои понятия, хлоп крестом на главном окне и и насрать на все методы.
Проверю,отпишусь ))
правильнее все же ловить непосредственно изменение , а не аварийно при закрытии.
в ТS есть все чтоб это поймать. Про Destroy() идея достойная, если не получится ловить процесс - использую ее



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




Пост N: 972
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 30.04.16 23:52. Заголовок: Haz пишет:у пользова..


Haz пишет:
 цитата:
у пользователей свои понятия, хлоп крестом на главном окне и и насрать на все методы


Используй ON INTERACTIVECLOSE <interactivecloseprocedure> , проверяя, наличие окон в _HMG_aFormNames, кроме майн и при наличии таковых, можно спросить о завершении или просто возвращать .F. - запрещая закрытие маин окна.

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




Пост N: 973
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 30.04.16 23:59. Заголовок: Haz при нажатии кре..


Haz
при нажатии креста в маин окне срабатывает ф-я ReleaseAllWindows()б а там цепочка WM_CLOSE, WM_DESTROY для контролов каждого окна, т.е. аварийного завершения нет, есть нормальное екстренное завершение всех окон.

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




Пост N: 920
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 01.05.16 00:09. Заголовок: SergKis пишет: ON I..


SergKis пишет:

 цитата:
ON INTERACTIVECLOSE


Сергей , да это все понятно. пока попытаюсь найти подход как узнать в процессе, а не бороться с последствиями.Ведь может быть и так - пользователь надвигал колонок под себя , уснул на ночь ( оставил задачу и сбежал домой ) и в это время запустились регламентные процедуры на серваке. Все висячие задачи срублены и с ними потеряны все настройки. У меня может паранойя , я и так протоколирую ВСЕ действия каждого пользователя по изменению данных, хочу еще и за настройками шпионить . А то иногда приходят умники , типа пол дня неразгибаясь работали и ничего не сохранено, Когда ему весь лог вываливаешь из которог следует что он в носу ковырял пол дня - вопросы сразу исчезают

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




Пост N: 974
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 01.05.16 00:20. Заголовок: Haz пищет:хочу еще и..


Haz пищет:
 цитата:
хочу еще и за настройками шпионить


пробни тогда, мне тоже интересно (из протокола выше) что выйдет.
TSBROWSE:HANDLEEVENT 514 WM_LBUTTONUP
TCONTROL:HANDLEEVENT 514 WM_LBUTTONUP
TSBROWSE:HANDLEEVENT 533 WM_CAPTURECHANGED // думаю это
TCONTROL:HANDLEEVENT 533 WM_CAPTURECHANGED

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




Пост N: 921
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 01.05.16 00:20. Заголовок: SergKis пишет: проб..


SergKis пишет:

 цитата:
пробни тогда, мне тоже интересно (из протокола выше) что выйдет.


договорились

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




Пост N: 975
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 01.05.16 00:41. Заголовок: Haz пишет:договорили..


Haz пишет:
 цитата:
договорились


Но в реальности это столько мусора будет в логах ... может все таки кнопку (меню) для перевода в режим настройки (отключив др. режимы) и повторное нажатие для возврата в нормальный режим (сохранив настройки). тогда в журнале переход в настройки и завершение (ели было). я бы как то так шел.

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




Пост N: 922
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 01.05.16 11:38. Заголовок: SergKis пишет: На м..


SergKis пишет:

 цитата:
На мой вхгляд мудришь, воспользуйся уже готовым

METHOD Destroy() CLASS TSBrowse
LOCAL i

Default ::lDestroy := .F.

If ::bDestroy != Nil
Eval(::bDestroy, Self)
EndIf




Где ты это нашел
взял последний MG там и в помине нет bDestroy

Или это было предложение поменять исходник ?

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




Пост N: 976
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 01.05.16 11:56. Заголовок: Haz пишет:Где ты это..


Haz пишет:
 цитата:
Где ты это нашел


Так в своей версии hmg, но уже так сроднился и забыл, что сам вставлял

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




Пост N: 923
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 01.05.16 11:59. Заголовок: SergKis пишет: Так ..


SergKis пишет:

 цитата:
Так в своей версии hmg, но уже так сроднился и забыл, что сам вставлял


Как ты обновляешь MG этож надо незабыть все с чем сроднился )))

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




Пост N: 977
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 01.05.16 12:09. Заголовок: Haz пишет:надо незаб..


Haz пишет:
 цитата:
надо незабыть все с чем сроднился


Ты прав, надо и в принципе у меня у переменных класса отмечено (в destroy() пропустил повторно)
 
DATA bDestroy // BK 14.02.2015
DATA lKeyChar AS LOGICAL INIT .F. // BK .F. - KeyChar(...) execute отключение
...
METHOD KeyChar( nKey, nFlags ) CLASS TSBrowse
...
If ! ::lKeyChar // BK
Return 0

ElseIf ::nUserKey == 255 // from KeyDown() method
Return 0
EndIf
...


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




Пост N: 4889
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.05.16 16:25. Заголовок: Haz пишет: я и так ..


Haz пишет:

 цитата:
я и так протоколирую ВСЕ действия каждого пользователя по изменению данных, хочу еще и за настройками шпионить


Поправь исходники MiniGUI\SAMPLES\Advanced\Tsb_config, как себе сделаешь.
Там я тоже делаю (Григорий помогал) сохранение колонок, шрифтов и размеров, но это давно было уже...
Всем интересно будет знать - как правильно работать с Tsbrowse !


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




Пост N: 978
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.05.16 13:57. Заголовок: Григорий, предложени..


Григорий, предложение по методу DeleteRow, сейчас он возвращает Self, а сделать надо возврат логический, тогда упроститься использования в простых ситуациях. Скрытый текст

Использование
If oBrw:DeleteRow()
...
EndIf

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 936
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 02.05.16 22:27. Заголовок: SergKis пишет: сдел..


SergKis пишет:

 цитата:
сделать надо возврат логический


Не вопрос, конечно, сделаю, если это полезно для работы с этим методом

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




Пост N: 924
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 03.05.16 13:03. Заголовок: Haz пишет: Как отло..


Haz пишет:

 цитата:
Как отловить событие изменения ширины колонки мышкой?


Вобщем подобраться стандартными средствами удалось только через событие отпускания левой мыши с анализом позиции курсора ( в заголовке и какая колонка ).
При этом есть погрешность позиции по горизонтали примерно в 10 пикселей, т.к. курсор WS имеет граничные допуски. Потестировал - не понравилось т.к. все же через событие мыши это не правильно. Все остальные попытки так или иначе требуют изменения исходников, поэтому решил если менять то менять правильно и адресно.
в TsBrowse.prg добавил
 

DATA bLineDrag
DATA bColDrag



и их обработку
 
:12077
If nColPixPos == Nil .and. nColInit == Nil // We have finish draging
::aColSizes[ nsCol ] -= ( nsWidth - nsOldPixPos )
::aColumns[ nsCol ]:nWidth -= ( nsWidth - nsOldPixPos )
::Refresh()

if ValType(::bLineDrag) == "B"
Eval( ::bLineDrag, nsCol, ( nsOldPixPos - nsWidth) )
end

EndIf


 
:6986
// we gotta be on header row within listbox and not same colm
If nClickRow == 0 .or. nClickRow == -2
if nColPix > ::nLeft .and. ::nDragCol != nDestCol

If ::lMoveCols
::MoveColumn( ::nDragCol, nDestCol )
Else
::Exchange( ::nDragCol, nDestCol )
EndIf

if ValType(::bColDrag) == "B"
Eval(::bColDrag, nDestCol, ::nDragCol )
end

elseif ::nDragCol = nDestCol
If ::aColumns[ nDestCol ]:bHLClicked != Nil
::DrawHeaders()
Eval( ::aColumns[ nDestCol ]:bHLClicked, nRowPix, nColPix, ::nAt, Self )
::DrawHeaders()
EndIf
Endif
EndIf
EndIf
EndIf



Теперь события изменения ширины колонки и перетаскивания колонки ловятся элементарно и автосохранение позиций и ширин делается тоже элементарно
 
oBrw:bLineDrag := {|a,b| MsgDebug(oBrw:GetColumn(a):cName, b)} // где a - номер колонки в которой изменили ширину, b -на сколько изменили
oBrw:bColDrag := {|a,b| MsgDebug(oBrw:GetColumn(a):cName, b, a)} // где a - новый номер колонки которую перетащили , b - старый номер


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




Пост N: 979
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.05.16 15:49. Заголовок: Haz просьба добавит..


Haz
просьба добавить Self в вызов блоков кода
Eval( ::bLineDrag, nsCol, ( nsOldPixPos - nsWidth), Self )
Eval(::bColDrag, nDestCol, ::nDragCol, Self )

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




Пост N: 925
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 03.05.16 18:11. Заголовок: SergKis пишет: прос..


SergKis пишет:

 цитата:
просьба добавить Self в вызов блоков кода


я то добавлю, не вопрос
Ждем что Григорий скажет

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 937
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 03.05.16 18:33. Заголовок: Haz пишет: что Григ..


Haz пишет:

 цитата:
что Григорий скажет


Благодарю за помощь
Конечно, я добавил обработку этих 2-х кодовых блоков в класс TsBrowse.
Еще бы не помешал небольшой пример их использования...

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




Пост N: 926
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 03.05.16 18:36. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:

Конечно, я добавил обработку этих 2-х кодовых блоков в класс TsBrowse.


Отлично

 цитата:
Еще бы не помешал небольшой пример их использования...


завтра постараюсь маленький примерчик сделать

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




Пост N: 927
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 04.05.16 16:19. Заголовок: Haz пишет: завтра п..


Haz пишет:

 цитата:
завтра постараюсь маленький примерчик сделать



Вобщем как то так, в примере просто ловим изменение ширины и позиции в колонке и тупо пишем в INI
При старте - читаем из INI

 
#include "minigui.ch"
#include "TSBrowse.ch"

MEMVAR aFont

PROCEDURE Main
LOCAL aStr := {}
LOCAL cDbf := "TEST.DBF"
LOCAL cAlias := ""
LOCAL n := 0


SET DATE FORMAT 'DD.MM.YYYY'
REQUEST DBFCDX
RDDSETDEFAULT('DBFCDX')

IF ! File( cDbf )
AAdd( aStr, { 'F1', 'D', 8, 0 } )
AAdd( aStr, { 'F2', 'C', 60, 0 } )
AAdd( aStr, { 'F3', 'N', 10, 2 } )
AAdd( aStr, { 'F4', 'L', 1, 0 } )

DbCreate( cDbf, aStr )

END

USE (cDbf) ALIAS "TEST" NEW

WHILE TEST->(RecCount()) < 100
TEST->(dbAppend())
TEST->F1 := Date() + n++
TEST->F2 := STR(n)
TEST->F3 := n
TEST->F4 := (n % 2) == 0
END


DEFINE WINDOW Form_0 ;
At 0, 0 ;
WIDTH 600 ;
HEIGHT 400 ;
TITLE "TsBrowse Save/Restore settings Demo" ;
MAIN ;
NOMAXIMIZE NOSIZE

DEFINE STATUSBAR
STATUSITEM "Item 1" WIDTH 0 FONTCOLOR BLACK
STATUSITEM "Item 2" WIDTH 230 FONTCOLOR BLACK
STATUSITEM "Item 3" WIDTH 230 FONTCOLOR BLACK
STATUSITEM "Item 4" WIDTH 230 FONTCOLOR BLACK
DATE
CLOCK
KEYBOARD
END STATUSBAR

CreateBrowse()
MsgBox( "Restoring from INI" )
END WINDOW
DoMethod( "Form_0", "Center" )
DoMethod( "Form_0", "Activate" )
RETURN


FUNCTION CreateBrowse()
LOCAL oBrw
LOCAL i
LOCAL aStr := {}

DEFINE TBROWSE oBrw ;
AT 5, 5 ;
ALIAS "TEST" ;
OF Form_0 ;
WIDTH Form_0.WIDTH - 2 * GetBorderWidth() ;
HEIGHT Form_0.HEIGHT - GetTitleHeight() - GetTitleHeight() - ;
GetProperty( "Form_0", "StatusBar", "Height" ) - 2 * GetBorderHeight() ;
GRID ;
COLORS { CLR_BLACK, CLR_BLUE } ;
FONT "MS Sans Serif" ;
SIZE 8 ;

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

:lNoHScroll := .T.
:lCellBrw := .F.

END TBROWSE

ReadSettings( oBrw )

oBrw:nWheelLines := 1
oBrw:nClrLine := COLOR_GRID
oBrw:lNoChangeOrd := TRUE
oBrw:lCellBrw := TRUE
oBrw:lNoVScroll := TRUE
oBrw:hBrush := CreateSolidBrush( 242, 245, 204 )

// prepare for showing of Double cursor
AEval( oBrw:aColumns, {| oCol| oCol:lFixLite := oCol:lEdit := TRUE } )

oBrw:nHeightCell += 10
oBrw:nHeightHead += 5

oBrw:SetColor( { 1 }, { RGB( 0, 12, 120 ) } )
oBrw:SetColor( { 2 }, { RGB( 242, 245, 204 ) } )
oBrw:SetColor( { 5 }, { RGB( 0, 0, 0 ) } )
oBrw:SetColor( { 6 }, { {|a, b, c| IF( c:nCell == b, { RGB( 66, 255, 236 ), RGB( 111, 183, 155 ) }, ;
{ RGB( 255, 255, 255 ), RGB( 200, 200, 200 ) } ) } } ) // cursor backcolor

oBrw:bLineDrag := {|a,b,c| SaveSettings(a,b,c, "Width")}
oBrw:bColDrag := {|a,b,c| SaveSettings(a,b,c, "Position")}


RETURN NIL


FUNC SaveSettings( a, b, c, cKey )
local hIni := HB_Hash()
local cIniFile := SUBSTR( Exename(), 1, RAT( '.', Exename() ) ) + 'ini'
local n := 0
local cSection := c:GetColumn(a):cName


FOR n := 1 TO c:nColCount()
hIni[ c:GetColumn(n):cName ] := hb_hash()
hIni[ c:GetColumn(n):cName ]["Position"] := n
hIni[ c:GetColumn(n):cName ]["Width"] := c:GetColumn(n):nWidth
hIni[ c:GetColumn(n):cName ]["Heading"] := c:GetColumn(n):cHeading
END
hb_iniWrite( cIniFile, hIni )
MsgBox(IF( UPPER( cKey ) == "WIDTH", "Width changed and stored in INI", "Position Changed and stored in INI"))

RETURN NIL

FUNCTION ReadSettings( oBrw )
local hIni := HB_Hash()
local cIniFile := SUBSTR( Exename(), 1, RAT( '.', Exename() ) ) + 'ini'
local n := 0
local aArray := {}, aField := {}



IF !File( cIniFile )
FOR n := 1 TO TEST->(FCOUNT())
hIni[ TEST->(Field(n)) ] := hb_hash()
hIni[ TEST->(Field(n)) ]["Position"] := n
hIni[ TEST->(Field(n)) ]["Width"] := 100
hIni[ TEST->(Field(n)) ]["Heading"] := "F" + NTOC(n)
END
hb_iniWrite( cIniFile, hIni )
aField := { "F2", "F1", "F3", "F4" }
ELSE
hIni := hb_iniRead( cIniFile )
FOR n := 1 TO TEST->(FCOUNT())
AADD( aArray, {TEST->(Field(n)), CTON(hIni[ TEST->(Field(n)) ]["Position"]) } )
END
// Sorting column
aSort( aArray,,, { |a,b| a[2] < b[2] } )
aEval( aArray, {|e| AADD( aField, e[1] )} )
END


LoadFields( "oBrw", "Form_0", .F., aField)

// Set column width
oBrw:SetColSize( oBrw:nColumn( "F1" ), CTON(hIni[ "F1" ]["Width"]) )
oBrw:SetColSize( oBrw:nColumn( "F2" ), CTON(hIni[ "F2" ]["Width"]) )
oBrw:SetColSize( oBrw:nColumn( "F3" ), CTON(hIni[ "F3" ]["Width"]) )
oBrw:SetColSize( oBrw:nColumn( "F4" ), CTON(hIni[ "F4" ]["Width"]) )

RETURN NIL



Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 938
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 04.05.16 17:50. Заголовок: Haz пишет: в пример..


Haz пишет:

 цитата:
в примере просто ловим изменение ширины и позиции в колонке


Благодарю за пример

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




Пост N: 929
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 04.05.16 21:15. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Благодарю за пример


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

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 939
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 04.05.16 21:38. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Благодарю за пример


Выкладываю итоговый вариант для проверки

/* 
* MINIGUI - Harbour Win32 GUI library Demo
*
* Author: Igor Nazarov
*
* Revised by Grigory Filatov <gfilatov@inbox.ru>
*/

#include "minigui.ch"
#include "TSBrowse.ch"

REQUEST DBFCDX

PROCEDURE Main

LOCAL aStr := {}
LOCAL cDbf := "TEST.DBF"
LOCAL n := 0

SET DATE FORMAT 'DD.MM.YYYY'
rddSetDefault( 'DBFCDX' )

IF ! File( cDbf )
AAdd( aStr, { 'F1', 'D', 8, 0 } )
AAdd( aStr, { 'F2', 'C', 60, 0 } )
AAdd( aStr, { 'F3', 'N', 10, 2 } )
AAdd( aStr, { 'F4', 'L', 1, 0 } )

dbCreate( cDbf, aStr )

ENDIF

USE ( cDbf ) ALIAS "TEST" NEW

WHILE TEST->( RecCount() ) < 100
TEST->( dbAppend() )
TEST->F1 := Date() + n++
TEST->F2 := Str( n )
TEST->F3 := n
TEST->F4 := ( n % 2 ) == 0
END

DEFINE WINDOW Form_0 ;
At 0, 0 ;
WIDTH 600 ;
HEIGHT 400 ;
TITLE "TsBrowse Save/Restore Settings Demo" ;
MAIN ;
NOMAXIMIZE NOSIZE ;
ON RELEASE dbCloseArea( "TEST" )

DEFINE STATUSBAR
STATUSITEM "Item 1" WIDTH 0
STATUSITEM "TsBrowse Power Ready" WIDTH 230 FONTCOLOR BLUE
DATE
CLOCK
KEYBOARD
END STATUSBAR

CreateBrowse()

END WINDOW

DoMethod( "Form_0", "Center" )
DoMethod( "Form_0", "Activate" )

RETURN


FUNCTION CreateBrowse()

LOCAL oBrw

DEFINE TBROWSE oBrw ;
AT 5, 5 ;
ALIAS "TEST" ;
OF Form_0 ;
WIDTH Form_0.Width - 2 * GetBorderWidth() ;
HEIGHT Form_0.Height - GetTitleHeight() - ;
GetProperty( "Form_0", "StatusBar", "Height" ) - 2 * GetBorderHeight() ;
GRID ;
COLORS { CLR_BLACK, CLR_BLUE } ;
FONT "MS Sans Serif" ;
SIZE 8

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

:lNoHScroll := .T.
:lCellBrw := .F.
:lInsertMode := .T.

END TBROWSE

// Restoring settings from INI
ReadSettings( oBrw )

oBrw:nWheelLines := 1
oBrw:nClrLine := COLOR_GRID
oBrw:lNoChangeOrd := TRUE
oBrw:lCellBrw := TRUE
oBrw:lNoVScroll := TRUE
oBrw:hBrush := CreateSolidBrush( 242, 245, 204 )

// prepare for showing of Double cursor
AEval( oBrw:aColumns, {| oCol | oCol:lFixLite := oCol:lEdit := TRUE } )

oBrw:nHeightCell += 10
oBrw:nHeightHead += 5

oBrw:SetColor( { 1 }, { RGB( 0, 12, 120 ) } )
oBrw:SetColor( { 2 }, { RGB( 242, 245, 204 ) } )
oBrw:SetColor( { 5 }, { RGB( 0, 0, 0 ) } )
oBrw:SetColor( { 6 }, { { | a, b, oBr | IF( oBr:nCell == b, { RGB( 66, 255, 236 ), RGB( 111, 183, 155 ) }, ;
{ RGB( 255, 255, 255 ), RGB( 200, 200, 200 ) } ) } } ) // cursor backcolor

oBrw:bLineDrag := { | a, b, oBr | SaveSettings( a, b, oBr, "Width" ) }
oBrw:bColDrag := { | a, b, oBr | SaveSettings( a, b, oBr, "Position" ) }

RETURN NIL


STATIC FUNCTION SaveSettings( a, b, oBr, cKey )

LOCAL hIni := hb_Hash()
LOCAL cIniFile := ChangeFileExt( Application.ExeName, '.ini' )
LOCAL n

HB_SYMBOL_UNUSED( a )
HB_SYMBOL_UNUSED( b )

FOR n := 1 TO oBr:nColCount()
hIni[ oBr:GetColumn( n ):cName ] := hb_Hash()
hIni[ oBr:GetColumn( n ):cName ][ "Position" ] := hb_ntos( n )
hIni[ oBr:GetColumn( n ):cName ][ "Width" ] := hb_ntos( oBr:GetColumn( n ):nWidth )
hIni[ oBr:GetColumn( n ):cName ][ "Heading" ] := oBr:GetColumn( n ):cHeading
NEXT

hb_iniWrite( cIniFile, hIni )

MsgInfo( iif( Upper( cKey ) == "WIDTH", "Width changed and stored in INI", "Position changed and stored in INI" ) )

RETURN NIL


STATIC FUNCTION ReadSettings( oBrw )

LOCAL hIni := hb_Hash()
LOCAL cIniFile := ChangeFileExt( Application.ExeName, '.ini' )
LOCAL n
LOCAL aArray := {}, aField := {}

IF ! File( cIniFile )

FOR n := 1 TO TEST->( FCount() )
hIni[ TEST->( Field( n ) ) ] := hb_Hash()
hIni[ TEST->( Field( n ) ) ][ "Position" ] := hb_ntos( n )
hIni[ TEST->( Field( n ) ) ][ "Width" ] := hb_ntos( 100 )
hIni[ TEST->( Field( n ) ) ][ "Heading" ] := "F" + NTOC( n )
NEXT

hb_iniWrite( cIniFile, hIni )
// initial column order
aField := { "F2", "F1", "F3", "F4" }

ELSE

hIni := hb_iniRead( cIniFile )
FOR n := 1 TO TEST->( FCount() )
AAdd( aArray, { TEST->( Field( n ) ), CTON( hIni[ TEST->( Field( n ) ) ][ "Position" ] ) } )
NEXT
// Sorting column
ASort( aArray,,, { | a, b | a[ 2 ] < b[ 2 ] } )
// Fill field array
AEval( aArray, { | e | AAdd( aField, e[ 1 ] ) } )

ENDIF

LoadFields( "oBrw", "Form_0", .F., aField )

// Set column width
oBrw:SetColSize( oBrw:nColumn( "F1" ), CTON( hIni[ "F1" ][ "Width" ] ) )
oBrw:SetColSize( oBrw:nColumn( "F2" ), CTON( hIni[ "F2" ][ "Width" ] ) )
oBrw:SetColSize( oBrw:nColumn( "F3" ), CTON( hIni[ "F3" ][ "Width" ] ) )
oBrw:SetColSize( oBrw:nColumn( "F4" ), CTON( hIni[ "F4" ][ "Width" ] ) )

RETURN NIL


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




Пост N: 931
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 04.05.16 21:53. Заголовок: gfilatov2002 пишет: ..


gfilatov2002 пишет:

 цитата:
Выкладываю итоговый вариант для проверки


Проверил, работает однако
только я забыл добавить в ReadSettings()

oBrw:GetColumn( "F1" ):cHeading := hIni[ "F1" ][ "Heading" ]
oBrw:GetColumn( "F2" ):cHeading := hIni[ "F2" ][ "Heading" ]
oBrw:GetColumn( "F3" ):cHeading := hIni[ "F3" ][ "Heading" ]
oBrw:GetColumn( "F4" ):cHeading := hIni[ "F4" ][ "Heading" ]

а то заголовки из ини не читает

Спасибо: 0 
Профиль
Alex_Cher





Пост N: 25
Зарегистрирован: 18.06.15
ссылка на сообщение  Отправлено: 05.05.16 08:06. Заголовок: Haz пишет: Проверил..


Haz пишет:

 цитата:
Проверил, работает однако



... мужики, а у меня не работает, в чем проблема ?

Application: C:\MiniGUI\SAMPLES\MY_BASIC\Ishod\demo.exe
Date: 05.05.2016 Time: 08:56:40
Time from start: 0 days 0 hours 0 mins 0 secs
Error BASE/1005 Message not found: TSBROWSE:_LINSERTMODE

Called from __ERRRT_SBASE(0)
Called from TSBROWSE:ERROR(0)
Called from (b)HBOBJECT(0)
Called from TSBROWSE:MSGNOTFOUND(0)
Called from TSBROWSE:_LINSERTMODE(0)
Called from CREATEBROWSE(91)
Called from MAIN(60)


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




Пост N: 932
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 05.05.16 08:34. Заголовок: Alex_Cher пишет: му..


Alex_Cher пишет:

 цитата:
мужики, а у меня не работает, в чем проблема ?


Ждать новой сборки или самостоятельно внести все изменения в исходники библиотеки


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 940
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 05.05.16 10:58. Заголовок: Haz пишет: Ждать но..


Haz пишет:

 цитата:
Ждать новой сборки


Выпустил сегодня первый релиз-кандидат для новой сборки 16.05

Спмсок изменений см. ниже
Скрытый текст

Благодарю за поддержку данного проекта
Также принимаются пожервования на PayPal от заинтересованных в выпуске новых сборок

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


Пост N: 554
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 05.05.16 20:31. Заголовок: 2 tsbrowsa- brw_1(та..


2 tsbrowsa- brw_1(таблица1) и brw_2 (таблица2) на форме. Имя формы через подстановку &cForm. Как организовать отображение в brw_2 данных, если таблица2 подчинена к таблице1(возможно
set ralation или OrdScope или filter )

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




Пост N: 933
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 05.05.16 20:47. Заголовок: Vlad04 пишет: Как о..


Vlad04 пишет:

 цитата:
Как организовать отображение в brw_2 данных, если таблица2 подчинена к таблице1(возможно
set ralation или OrdScope или filter )


если отношение один к одному то можно и реляцию, если один ко многим то только скоп или фильтр.
Я с ADS ставлю фильтр ( он там быстрый ) в других RDD SCOPE предпочтительнее.
Методика простая, на brw_1:bChange вешается процедура которая ставит скоп или фильтр brw_2
brw_1:bChange := { || (brw_2:cAlias)->( тут фильтр или скоп ), brw_2:Reset() }

Посмотри в примерах tsb_filter.prg, там фильтр ставиться в зависимости от содержимого строки ввода.



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


Пост N: 555
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 06.05.16 09:44. Заголовок: Haz brw_1:bChange :..


Haz

 цитата:
brw_1:bChange := { || (brw_2:cAlias)->( тут фильтр или скоп ), brw_2:Reset() }


Ошибка Reset не экспортируемый метод
У меня так

 цитата:

DEFINE TBROWSE Brw_1 ;
AT 40, 10 ;
OF &(cForm) ;
ALIAS cBase ;
WIDTH nWidth-5 ;
HEIGHT nHeight-500 ;
FONT "MS Sans Serif" ;
SIZE 10 BOLD ON CHANGE {||ScRoll(cForm,Brw_1),UpdateItems(),brw_2:Reset() }




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


Пост N: 556
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 06.05.16 09:56. Заголовок: Из формы могу обрати..


Из формы могу обратиться к объекту формы , к примеру
 цитата:

FUNCTION TbMove(met,cForm,oBrw,cBase)
// Select(oBrw:cAlias)
Alias(cBase)
DO CASE
CASE met == 1
oBrw:GoTop()
...



Но с объекта формы Brw_2 эту же функцию вызвать не могу !


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 941
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 06.05.16 10:29. Заголовок: Vlad04 пишет: Как о..


Vlad04 пишет:

 цитата:
Как организовать отображение в brw_2 данных, если таблица2 подчинена к таблице1


Попробуйте посмотреть как это сделано в базовом примере из папки samples\Advanced\TsBrowse
... 
Else // One to More

@ 0, 0 TBROWSE oBrw2 ALIAS "sta" WIDTH 800 HEIGHT 185 ;
FONT "Font_1" ON CHANGE SincroTb(obrw,invert) ;
CELL

oBrw2:LoadFields()
oBrw2:nWheelLines := 1

@ 185, 0 TBROWSE oBrw ALIAS "Employee" WIDTH 800 HEIGHT 185 ;
FONT "Font_1" CELL
oBrw:LoadFields()
oBrw:Exchange(3, 5)
oBrw:ChangeFont(GetFontHandle( "Font_4" ), 0, 2 )
oBrw:ChangeFont(GetFontHandle( "Font_1" ), 0, 1 )
oBrw:ChangeFont(GetFontHandle( "Font_3" ), 3, 1 )
oBrw:nWheelLines := 1

FORM_10.OBRW2.SETFOCUS
...

*------------------------------------------------------------------------------*
Function SincroTb(obrw,Invert)
*------------------------------------------------------------------------------*
LOCAL cSelState
default invert to .F.

if invert
cSelState := Employee->state
oBrw:SetFilter( "State", cSelState )
else
cSelState := SubStr(sta->state,1,2)
oBrw:SetFilter( "State+Last", cSelState )
Endif

_setitem("statusbar","Form_10",2,cSelState)

oBrw:cPrefix := cSelState
IF FieldGet(FieldPos("State")) != cSelState
oBrw:Enabled(.f.)
ELSE
oBrw:Enabled(.T.)
endif
oBrw:Refresh( .T. )
oBrw:lHasChanged := .T.
oBrw:lNoGrayBar := .T.

return NIL
Эта конструкция работает вполне прилично для небольших баз (до 5 тысяч записей)

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




Пост N: 935
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.05.16 11:07. Заголовок: Vlad04 пишет: Ошибк..


Vlad04 пишет:

 цитата:
Ошибка Reset не экспортируемый метод У меня так


brw_1 j объявлен раньше Brw_2 и в момент интерпритации кода DEFINE BROWSE Brw_1 и прорисовке бровса выполняется его ::bChange который пока ничего не знает о brw_2 но его использует .
Постоянно наступал на эти грабли когда один контрол использует данные другого ниже по тексту. Вариантов решения много, вот парочка
1 Располагать контролы в тексте PRG в порядке их логического использования ( если поменять brw_1 и brw_2 местами - скорее всего заработает )
2 Использовать на форме флаг CHECKBOX lReady c Visible .F. и выставлять его в .Т. перед Form.Activate, далее примерно так IF( Getproperty( 'Form', lReady, 'Value'), brw_2:Reset(), NIL )
3 вместо флага проверять существование переменной brw_2
и т.д. на что фантазии хватит
PS всего кода ты не дал, поэтому и рекомендации общие

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


Пост N: 557
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 06.05.16 12:28. Заголовок: ок Все отлично, пере..


ок
Все отлично, переставил brw_1 и brw_2 местами и все заработало !
Однако

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




Пост N: 4901
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.05.16 14:43. Заголовок: Всем привет. Очередн..


Всем привет.
Очередная ошибка у меня.
Делаю таблицу, вывод первой колонки делаю так:
ADD COLUMN TO oBrwS HEADER "№№" ;
DATA {|| OrdKeyNo() } ;
...........

Вот результат:


Стоит только маркером/курсором или мышкой сдвинуть ниже последней записи , как нумерация разрушается и при движении курсором меняется нумерация первой колонки:


Как исправить (убрать) это изменение ?

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




Пост N: 5647
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.05.16 15:02. Заголовок: Andrey пишет: DATA ..


Andrey пишет:

 цитата:
DATA {|| OrdKeyNo() } ;


OrdKeyNo() не нужно уточнить алиасом ?

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




Пост N: 936
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.05.16 15:22. Заголовок: Dima пишет: OrdKeyN..


Dima пишет:

 цитата:
OrdKeyNo() не нужно уточнить алиасом ?


Обязательно , OrdkeyNo() работает в текущей рабочей области , а какая она текущая из картинки не понять
Думаю все станет ясно если написать так {|| Select() }

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




Пост N: 4902
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.05.16 15:23. Заголовок: Dima пишет: OrdKeyN..


Dima пишет:

 цитата:
OrdKeyNo() не нужно уточнить алиасом ?


Да можно. Это не поможет.
Там удалённые записи в нумерацию встревают.
Всего в базе 28 записей, из них 7 не удалённых !DELETED(). Фильтра нет.
Т.е. использую просто SET DELETED ON

P.S. пробовал поставить: DATA {|| (Alias())->(OrdKeyNo()) } - такая же фигня.


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




Пост N: 937
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.05.16 15:26. Заголовок: Andrey пишет: Т.е. ..


Andrey пишет:

 цитата:
Т.е. использую просто SET DELETED ON



База одна открыта ?
SET DELETED ON - команда которая включает игнорирование удаленных
правда INDEX и REINDEX всегда игнорируют установку SET DELETED но это не тот случай.



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




Пост N: 4903
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.05.16 15:31. Заголовок: Если делаю SET DELET..


Если делаю SET DELETED OFF, то будет так:

Черным цветом, я удалённые записи раскрашиваю.

Haz пишет:

 цитата:
База одна открыта ?


Нет, несколько - 5 штук. Одна основная и 4 для set relation.

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




Пост N: 938
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.05.16 15:33. Заголовок: Haz пишет: если на..


Haz пишет:

 цитата:
если написать так DATA {|| Select() }


что покажет ?

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




Пост N: 939
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.05.16 15:35. Заголовок: Andrey пишет: DATA..


Andrey пишет:

 цитата:
DATA {|| (Alias())->(OrdKeyNo()) } - такая же фигня.


извини , но написанную фигню, фигню и показывает
DATA {|| (oBrw:cAlias)->(OrdKeyNo())

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




Пост N: 940
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.05.16 15:37. Заголовок: Сделай так , уверен ..


Сделай так , уверен все увидишь

 цитата:
DATA {|| Select() }




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




Пост N: 5648
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.05.16 15:39. Заголовок: Андрей пишет: DATA ..


Андрей пишет:

 цитата:
DATA {|| (Alias())->(OrdKeyNo()) } - такая же фигня.


Ну ясный пень. Я бы указал реальный алиас по которому ходишь , а так выходит
что если ты где то сменил рабочую область то фигню и получишь.

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




Пост N: 4904
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.05.16 15:41. Заголовок: Вот переделанный при..


Вот переделанный пример Tsb_config версии 1.2 - https://cloud.mail.ru/public/2CHr/h9u2vn7JR
Там просто ставлю:
ADD COLUMN TO oBrw ;
HEADER "№№" ;
DATA {||OrdKeyNo()} ;

Но там используется фильтр. А у меня без фильтра.

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




Пост N: 941
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.05.16 15:42. Заголовок: Haz пишет: Haz пише..


Haz пишет:

 цитата:
Haz пишет:

 цитата:
если написать так DATA {|| Select() }


что покажет ?


а потом будем теоретизировать про фильтры

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




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


Haz пишет:

 цитата:
если написать так DATA {|| Select() }



Вот что показывает:


Haz пишет:

 цитата:
извини , но написанную фигню, фигню и показывает
DATA {|| (oBrw:cAlias)->(OrdKeyNo())



Написал как советовал. Всё равно нумерация сбивается.

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




Пост N: 942
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.05.16 15:47. Заголовок: Andrey пишет: Вот ч..


Andrey пишет:

 цитата:
Вот что показывает:


а ниже курсором проехать ...

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




Пост N: 4906
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.05.16 15:50. Заголовок: Ничего не происходит..


Ничего не происходит. Показывает всегда 1, т.е. select() !

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




Пост N: 943
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.05.16 15:50. Заголовок: вот так проехать ! A..


вот так проехать !
Andrey пишет:

 цитата:
сдвинуть ниже последней записи




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




Пост N: 944
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.05.16 15:53. Заголовок: Andrey пишет: Напис..


Andrey пишет:

 цитата:
Написал как советовал. Всё равно нумерация сбивается.


Как именно , код покажи

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




Пост N: 945
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.05.16 15:55. Заголовок: Почему в картинках н..


Почему в картинках ниже 3 записи строки другого цвета ? какое условие их красит по разному ?

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




Пост N: 4907
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.05.16 16:03. Заголовок: Haz пишет: Как имен..


Haz пишет:

 цитата:
Как именно , код покажи


ADD COLUMN TO oBrwS HEADER "№№" ;
DATA {|| (oBrwS:cAlias)->(OrdKeyNo()) } ;

Haz пишет:

 цитата:
Почему в картинках ниже 3 записи строки другого цвета ? какое условие их красит по разному ?


; //* -------- Цвет условий в TBrowse ----------------------
Цвет_условия_1 = { { || Master->KDoljn == 0 .OR. Master->KMaster == 0 }, "12/4" }
Цвет_условия_2 = { { || LEN( ALLTRIM(Master->Master) ) == 0 } , {128, 255} }
Цвет_условия_3 = { { || Master->KDel == 0 }, "4/2" }
Цвет_условия_4 = { { || Master->KDel == 2 }, "8/2" }
Цвет_условия_5 = { { || Master->KSITE == 1 }, "0/2" }
Цвет_условия_6 = { { || Master->KSITE == 9 }, "4/2" }
Цвет_условия_7 = { { || Master->KDel == 1 }, "14/2" }
Цвет_условия_8 = { { || Master->KDel == 3 }, "15/2" }
Цвет_условия_9 = { { || 1 == 1 }, { MyRGB(COLOR_LGREEN()), MyRGB({0,0,0}) } }

Цвета вытащены в ини-файл, функция покраски как в SAMPLES\Advanced\Tsb_config

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




Пост N: 4908
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.05.16 16:17. Заголовок: Как уходишь за грани..


Как уходишь за границу записей, так нумерация сбивается у функции (oBrwS:cAlias)->(OrdKeyNo()) и oBrwS:nAt :



DEFINE TBROWSE oBrwS ;
ON CHANGE { || ChangeTable() } ;
ON GOTFOCUS ChangeTable() ;

////////////////////////////////////////////////////////////
STATIC FUNCTION ChangeTable()
LOCAL cVal, nLen, cLen, cText
LOCAL cForm := oBrwS:cParentWnd
LOCAL lMark, lPrint, lMail, lSave
LOCAL cCaption1, cCaption2

cVal := HB_NToS( (oBrwS:cAlias)->(OrdKeyNo()) )
nLen := (oBrwS:cAlias)->(OrdKeyCount())
cLen := HB_NToS( nLen )
cCaption1 := "Текущая запись базы: " + HB_NtoS((oBrwS:cAlias)->(RecNo()))
cCaption2 := "Номер записи таблицы: " + HB_NtoS(oBrwS:nAt)

MenuCaptionSet( "MYTABLETEXT " , cForm , cCaption1 )
MenuCaptionSet( "MYTABLERECNO" , cForm , cCaption2 )

oBrwS:aColumns[3]:cFooting := { || " Запись: " + cVal + "/" + cLen + " " }
oBrwS:DrawFooters() // выполнить прорисовку подвала

TblFocus()

RETURN Nil



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




Пост N: 946
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.05.16 16:24. Заголовок: Andrey пишет: Как у..


Andrey пишет:

 цитата:
Как уходишь за границу записей, так нумерация сбивается у функции (oBrwS:cAlias)->(OrdKeyNo()) и oBrwS:nAt


nAt там вообще вне всякой логики , не годится как нумератор

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




Пост N: 947
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.05.16 16:27. Заголовок: По коду, визуально в..


По коду, визуально все ок
какой управляющий индекс задан ?
вот это TblFocus() что ?

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




Пост N: 948
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.05.16 16:41. Заголовок: Скорее всего это SE..


Скорее всего это

 цитата:
SET DELETED ON - команда которая включает игнорирование удаленных
правда INDEX и REINDEX всегда игнорируют установку SET DELETED но это не тот случай.


то есть OrdKeyNo() всегда учитывает удаленные записи, как ни ставь SET DELETED
Если это не условный индекс !Deleted() , такой индекс пропустит удаленные.
Вопрос почему идет смена нумерации остается открытым , мне все же кажется что где-то меняется рабочая область или управляющий индекс.
выведи в поле не просто номер OrdKeyNo() , а Alias() + "/" + oBrwS:cAlias + "/" + NTOC((oBrwS:cAlias)->(OrdKeyNo())) + "/" + (oBrwS:cAlias)->(OrdKeyFocus())
иначе не понять

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




Пост N: 4909
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.05.16 16:44. Заголовок: А как тогда первую к..


А как тогда первую колонку сделать ?
ADD COLUMN TO oBrwS HEADER "№№" ;
DATA {|| (oBrwS:cAlias)->(OrdKeyNo()) } ;


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




Пост N: 949
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.05.16 16:45. Заголовок: Andrey пишет: А как..


Andrey пишет:

 цитата:
А как тогда первую колонку сделать ?




 цитата:
выведи в поле не просто номер OrdKeyNo() , а Alias() + "/" + oBrwS:cAlias + "/" + NTOC((oBrwS:cAlias)->(OrdKeyNo())) + "/" + (oBrwS:cAlias)->(OrdKeyFocus())



{|| Alias() + "/" + oBrwS:cAlias + "/" + NTOC((oBrwS:cAlias)->(OrdKeyNo())) + "/" + (oBrwS:cAlias)->(OrdKeyFocus()) }
ну и посмотреть что меняется за последней записью

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




Пост N: 4910
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.05.16 16:47. Заголовок: Haz пишет: (oBrwS:c..


Haz пишет:

 цитата:
(oBrwS:cAlias)->(OrdKeyFocus())


Что за функция ? Не компилируется.

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




Пост N: 950
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.05.16 16:48. Заголовок: Andrey пишет: Что з..


Andrey пишет:

 цитата:
Что за функция ?


http://www.ousob.com/ng/53guide/ng89ad4.php

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




Пост N: 951
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.05.16 16:50. Заголовок: опечатка OrdSetFocus..


опечатка OrdSetFocus()
можно заменить любой возвращающей активный TEG

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




Пост N: 4911
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.05.16 16:50. Заголовок: Понял что надо OrdSe..


Понял что надо OrdSetFocus()

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




Пост N: 4912
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.05.16 16:57. Заголовок: Сделал. Вот до нажат..


Сделал. Вот до нажатия вниз стрелкой за пределы бровса:


Вот после нажатия вниз. А потом стрелка вверх:


/////////////////////////////////////////////////////////////////////////////////
STATIC FUNCTION TblFocus()
DoMethod(oBrwS:cParentWnd, oBrwS:cControlName, "SetFocus")
RETURN NIL




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




Пост N: 4913
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.05.16 17:06. Заголовок: Я понимаю, что в инд..


Я понимаю, что в индекс можно добавить условие FOR "!Deleted()" - и будет работать.
Но я тогда не смогу переключаться на удалённые записи.

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




Пост N: 952
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.05.16 17:09. Заголовок: Andrey пишет: Я пон..


Andrey пишет:

 цитата:
Я понимаю, что в индекс можно добавить условие FOR "!Deleted()" - и будет работать.
Но я тогда не смогу переключаться на удалённые записи.


Сможешь если будет два индекса и переключение между ними
А так - вторая картинка правильная где 25 ,26, 27
На первой что то не то с OrdKeyNo()

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




Пост N: 5649
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.05.16 17:10. Заголовок: Andrey пишет: FOR &..


Andrey пишет:

 цитата:
FOR "!Deleted()"


Без кавычек только.

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




Пост N: 4914
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.05.16 17:18. Заголовок: Haz пишет: На перво..


Haz пишет:

 цитата:
На первой что то не то с OrdKeyNo()


Может что-то в исходниках не то...

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




Пост N: 4915
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.05.16 17:36. Заголовок: Столкнулся с другой ..


Столкнулся с другой непоняткой:
Стою на записи - допустим 5. Меняю поле входящее в индекс - допустим KDEL := 2
Заканчиваю редактирование, запись-5 улетает по индексу правильно, а я остаюсь на другой записи.

Если же делаю такую обработку:
oBrwS:aColumns[nJ]:bPrevEdit := {|| nRecBuff := (oBrwS:cAlias)->(RecNo()), ;
MyFieldEdit( oBrwS:aColumns[oBrwS:nCell]:Cargo ) }
oBrwS:aColumns[nI]:bPostEdit := {|| oBrwS:GoToRec(nRecBuff), oBrwS:GoLeft(), oBrwS:Refresh(.T.) }

то у меня создаётся полностью вторая таблица (я выше об этом писал и приводил картинку).

Как мне сейчас делать ?
Т.е. поле попадает в индексное выражение....

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




Пост N: 953
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.05.16 21:31. Заголовок: Andrey пишет: Как м..


Andrey пишет:

 цитата:
Как мне сейчас делать ?
Т.е. поле попадает в индексное выражение....


позже. ок ?

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




Пост N: 954
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.05.16 21:57. Заголовок: Andrey пишет: Как м..


Andrey пишет:

 цитата:
Как мне сейчас делать ?


так отвечал вроде
oBrwS:aColumns[nJ]:bPrevEdit := {|| nRecBuff := (oBrwS:cAlias)->(RecNo()), ;
MyFieldEdit( oBrwS:aColumns[oBrwS:nCell]:Cargo ) }
oBrwS:aColumns[nI]:bPostEdit := {|| oBrwS:GoToRec(nRecBuff), oBrwS:GoLeft(), oBrwS:Refresh(.T.) }
oBrwS:aColumns[nI]:bEditEnd := {|| oBrwS:GoToRec((oBrwS:cAlias)->(RecNo())) }

ЗЫ для внешнего редактирования есть :bExtEdit и пример есть

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




Пост N: 4916
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.05.16 12:07. Заголовок: Haz пишет: ЗЫ для в..


Haz пишет:

 цитата:
ЗЫ для внешнего редактирования есть :bExtEdit и пример есть


А что за метод :bExtEdit ? Чуток описать можно ?

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




Пост N: 955
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 07.05.16 14:53. Заголовок: Andrey пишет: А что..


Andrey пишет:

 цитата:
А что за метод :bExtEdit ? Чуток описать можно ?


вызывается для организации внешнего редактирования
Пример в C:\MiniGUI\SAMPLES\Advanced\TsBrowse\ через меню в Sample4 колонка Age редактируется внешне
остальное описание - только в исходниках там 5 строк к нему относится и так все понятно

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




Пост N: 981
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 07.05.16 15:58. Заголовок: Andrey пишет:Как мне..


Andrey пишет:
 цитата:
Как мне сейчас делать ?


вот пример, похож на твой, вроде работает click here

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




Пост N: 4917
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.05.16 20:10. Заголовок: Haz пишет: oBrwS:aC..


Haz пишет:

 цитата:
oBrwS:aColumns[nI]:bEditEnd := {|| oBrwS:GoToRec((oBrwS:cAlias)->(RecNo())) }



Вот это помогло. Спасибо !

SergKis пишет:

 цитата:
вот пример, похож на твой, вроде работает click here


Принял к сведению. Главное не забыть бы про него...

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


Пост N: 569
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 18.05.16 08:56. Заголовок: oBrwS:aColumns:bEdi..



 цитата:

oBrwS:aColumns[nI]:bEditEnd := {|| oBrwS:GoToRec((oBrwS:cAlias)->(RecNo())) }

Вот это помогло.


Если после редактирования значение индексированного поля возрастает, то происходит перемещение курсора но новую позицию вниз, а если уменьшается,
то курсор вверх но новую позицию не поднимается.

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


Пост N: 570
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 18.05.16 08:59. Заголовок: И можно в общем случ..


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

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




Пост N: 4938
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.05.16 13:59. Заголовок: Vlad04 пишет: И мож..


Vlad04 пишет:

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



Присоединяюсь обеими руками !!!

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

Спасибо: 0 
Профиль
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 
Профиль
SergKis
постоянный участник




Пост N: 990
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.05.16 15:23. Заголовок: Vlad04 В примере Ts..


Vlad04
В примере Tsb_seek2 уже было показано
 
*-----------------------------------
Static Function oMyBase( cForm ) // Get Tbrowse object
*-----------------------------------
Return TBrw_Obj("MyBase", cForm)
...
*-----------------------------------
Function TBrw_Obj( cTbrw, cForm )
*-----------------------------------
Local oBrw, i

Default cForm := _HMG_ThisFormName

If ( i := GetControlIndex(cTBrw, cForm) ) > 0
oBrw:= _HMG_aControlIds [ i ]
EndIf

Return oBrw



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




Пост N: 989
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 27.05.16 15:26. Заголовок: SergKis пишет: В пр..


SergKis пишет:

 цитата:
В примере Tsb_seek2 уже было показано


Сергей, не обратил внимания. Пусть будет 2 варианта, хотя твой короче

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




Пост N: 991
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.05.16 15:30. Заголовок: Haz пишет:Пусть буде..


Haz пишет:
 цитата:
Пусть будет 2 варианта, хотя твой короче


Дело не в этом, пример создавался специально для Vlad04 на его базе

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


Пост N: 578
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 27.05.16 16:41. Заголовок: Haz , SergKis :s..


Haz , SergKis



Спасибо, цель достигнута !!


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




Пост N: 990
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 27.05.16 17:16. Заголовок: Vlad04 пишет: цель ..


Vlad04 пишет:

 цитата:
цель достигнута


а в чем она была ? что то я уже не пойму )

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


Пост N: 579
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 27.05.16 20:16. Заголовок: Из подчиненной формы..


Из подчиненной формы обновить бровс на Главной

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


Пост N: 580
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 27.05.16 20:18. Заголовок: Для выбранного метод..


Для выбранного метода определения Формы и бровсов

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




Пост N: 5723
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 15.06.16 15:46. Заголовок: Как показать (редакт..


Как показать (редактировать) в Tsbrowse базу если кодировка в ней 866 а сырец проги в 1251 ?
Сейчас показывает крякозяблы.
В oBrw:aColumns[...]:bData:= я так понимаю ни чего не сделать....

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




Пост N: 1000
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.06.16 15:55. Заголовок: Dima USE ( cTable )..


Dima
USE ( cTable ) ALIAS ( cAlias ) CODEPAGE "RU866" SHARED NEW


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




Пост N: 5724
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 15.06.16 16:00. Заголовок: SergKis пишет: USE ..


SergKis пишет:

 цитата:
USE ( cTable ) ALIAS ( cAlias ) CODEPAGE "RU866" SHARED NEW


Так и есть

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




Пост N: 1001
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.06.16 16:10. Заголовок: Dima пишет:Так и ест..


Dima пишет:
 цитата:
Так и есть


т.е.
REQUEST HB_CODEPAGE_RU1251, HB_CODEPAGE_RU866
...
SET LANGUAGE TO RUSSIAN
SET CODEPAGE TO RUSSIAN
...
USE ( cTable ) ALIAS ( cAlias ) CODEPAGE "RU866" SHARED NEW
...
и кракозябы ?


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




Пост N: 5725
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 15.06.16 16:16. Заголовок: SergKis да у меня в..


SergKis
да
у меня вот так
REQUEST HB_CODEPAGE_RU1251, HB_CODEPAGE_RU866, HB_LANG_RUWIN
REQUEST HB_LANG_RUWIN
REQUEST HB_LANG_RU866

SET CODEPAGE TO RUSSIAN
HB_LANGSELECT( "RU" )


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




Пост N: 1002
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 15.06.16 16:24. Заголовок: Dima пишет:HB_LANGSE..


Dima пишет:
 цитата:
HB_LANGSELECT( "RU" )


i_lang.ch
#translate SET LANGUAGE TO RUSSIAN => _HMG_LANG_ID := ' ' ; REQUEST HB_LANG_RUWIN ; HB_LANGSELECT( "RUWIN" ) ; InitMessages()



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




Пост N: 5726
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 15.06.16 16:25. Заголовок: SergKis Мой косяк ,..


SergKis
Мой косяк , не досмотрел.
База под ADS а у меня заявлено было AdsSetCharType(2 , .T.)
Второй параметр нужно указывать только для консольных приложений

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




Пост N: 5728
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.06.16 14:36. Заголовок: Отредактировал запис..


Отредактировал запись , нажал ввод и курсор улетает на поле правее , как это запретить ?
В сырце что то ни чего не вижу...

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




Пост N: 1004
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.06.16 15:08. Заголовок: Dima пишет: курсор у..


Dima пишет:
 цитата:
курсор улетает на поле правее , как это запретить ?


oCol:nEditMove := DT_MOVE_RIGHT // по умолчанию стоит
Tbrowse.ch
...
 
// Cursor movement after editing
#define DT_DONT_MOVE 0
#define DT_MOVE_RIGHT 1
#define DT_MOVE_DOWN 2
#define DT_MOVE_LEFT 3
#define DT_MOVE_UP 4
#define DT_MOVE_NEXT 5
...


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 955
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 16.06.16 15:09. Заголовок: Dima пишет: как это..


Dima пишет:

 цитата:
как это запретить ?


Попробуй указать

 цитата:
oBrw_1:aColumns[ 1 ]:nEditMove := DT_DONT_MOVE

для редактируемого столбца

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




Пост N: 5729
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.06.16 15:13. Заголовок: gfilatov2002 Точно ..


gfilatov2002
Точно , работает.
Видимо я смотрел не там ))
Спасибо.


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




Пост N: 5731
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.06.16 09:07. Заголовок: В окне живет бровс и..


В окне живет бровс и BTNTEXTBOX.
 
@ 10, obrw:aColumns[1]:nwidth+1 BTNTEXTBOX Text_1 WIDTH obrw:aColumns[2]:nwidth ;
HEIGHT 20 VALUE sea FONT "Lucida Console" SIZE 10 ;
ACTION {|| Nsea( sirie.Text_1.Value,obrw,"naim" )} ;
PICTURE "find" BUTTONWIDTH 20

Процедура поиска по бровсу
 
Func Nsea(cstr,o,fldnm)
local nrec:=(o:cAlias)->(recno())
cstr:=alltrim(upper(cstr))

if empty(cstr)
o:setfocus()
return .t.
endif

(o:cAlias)->(dbskip())

__Dblocate({|| cstr $ upper((o:cAlias)->&(fldnm)) }, , , ,.t.)

if (o:cAlias)->(found())
nrec:=(o:cAlias)->(recno())
endif

o:GoToRec( nRec )
return .t.

если строка поиска пустая и нажимается кнопка в BTNTEXTBOX тогда бровс должен получать
фокус ввода , но этого не происходит. Почему ?

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




Пост N: 5732
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.06.16 09:48. Заголовок: Dima пишет: если ст..


Dima пишет:

 цитата:
если строка поиска пустая и нажимается кнопка в BTNTEXTBOX тогда бровс должен получать
фокус ввода , но этого не происходит. Почему ?


Решил добавлением в BTNTEXTBOX конструкции
 
ON LOSTFOCUS {|| if ( empty(sirie.Text_1.Value),obrw:setfocus(),) }


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




Пост N: 5741
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 19.06.16 17:02. Заголовок: Есть редактируемый б..


Есть редактируемый бровс по базе.
В другой проге я заблочил какую то запись в той же базе.
В бровсе нашел эту же запись и пытаюсь ее редактировать , бровс легко это дает
но после окончания редактирования вежливо сообщает что запись заблочена :)
Можно как то изменить поведение бровса (переключатель может есть какой) что бы
в редактирование не пускало если запись уже заблочена ?

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




Пост N: 1016
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 19.06.16 17:40. Заголовок: Dima пишет: Можно к..


Dima пишет:

 цитата:
Можно как то изменить поведение бровса (переключатель может есть какой) что бы
в редактирование не пускало если запись уже заблочена ?



oBrw:bPrevEdit := { |a, b, lLock| If( lLock := RLock(), dbUnLock(), MsgBox("Запись залочена") ), lLock }



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




Пост N: 5742
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 19.06.16 18:08. Заголовок: Haz Спасибо. Ты вро..


Haz
Спасибо.
Ты вроде ж в отпуске ))

Режим отметки при obrw:lCanSelect:=TRUE повешен на пробел , можно ли изменить эту педаль на свою ?


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




Пост N: 1017
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 19.06.16 18:50. Заголовок: Dima пишет: Режим о..


Dima пишет:

 цитата:
Режим отметки при obrw:lCanSelect:=TRUE повешен на пробел , можно ли изменить эту педаль на свою ?



На что угодно, определив обработку в bUserKeys этой кнопки как
::Selection()
::GoDown()
и вернув FALSE

Да , и учти что отметка реализована через массив с номерами записей ( вроде так , давно не смотрел )
так что реализовать альтернативу со своей цветовой схемой - пустяк

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




Пост N: 5743
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 19.06.16 21:48. Заголовок: Haz пишет: На что у..


Haz пишет:

 цитата:
На что угодно, определив обработку в bUserKeys этой кнопки как


Это я понял уже , вопрос звучал иначе , есть ли какой то флаг позволяющий заюзать
другую педаль. Похоже его нет , да и ладно , сделаю своё ,через bUserKeys как и ты и советовал.


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




Пост N: 5744
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 19.06.16 22:02. Заголовок: Что бы освежить толь..


Что бы освежить только текущую строку достаточно o:RefreshARow(o:nRowPos) или нужен o:Refresh() ?

PS
Хожу по базе.

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




Пост N: 1018
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 19.06.16 22:07. Заголовок: Dima пишет: освежит..


Dima пишет:

 цитата:
освежить только текущую строку


::Refresh(FASLE)
или
::DrawSelect()

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




Пост N: 5745
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 19.06.16 22:15. Заголовок: Haz пишет: ::Refres..


Haz пишет:

 цитата:
::Refresh(FASLE)


Понял , только при этом "дрыгается" весь бровс на выпуклый морской глаз , впрочем как и при RefreshARow ))
А вот DrawSelect() самое то (все красиво и без лишних прорисовок) !


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




Пост N: 5747
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.06.16 22:41. Заголовок: Есть какой то метод ..


Есть какой то метод что бы дернуть данные с ячейки , типа obrw:GETCELLDATA(nrow , ncol) ?

PS
Хожу по базе.
Для массива понятно все.

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




Пост N: 1005
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.06.16 23:06. Заголовок: Dima Для тек.записи..


Dima
Для тек.записи Eval(oBrw:aColumns[nCol]:bData)
для др. записи dbGoto(nRec) или dbSkip(nCount) и снова Eval(oBrw:aColumns[nCol]:bData)

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




Пост N: 5748
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 21.06.16 08:36. Заголовок: SergKis Я не много ..


SergKis
Я не много не о том. Хотел для базы заюзать oBrw:cToolTip{|oBr, nCol, nRow| if( ncol ==2,.....
Строка и колонка известна. Указатель записи дергать не хотелось бы , но при наведении
мышки на нужную ячейку в колонке 2 , хотелось дернуть данные от туда и показать в cToolTip.
Изначально я так и поступил как ты пишешь но тогда показывает на любой ячейке 2-го столбца -
данные записи на которой лежит курсор (что и понятно).


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




Пост N: 1006
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.06.16 09:07. Заголовок: Dima пишет: хотелось..


Dima пишет:
 цитата:
хотелось дернуть данные от туда и показать в cToolTip


Без перемещения на нужную запись этого сделать не получиться, надо использовать значение nCol для получения bData, а nRow для вычисления nCount перемещения от тек. записи ( dbSkip(nCount) ), считывание данных с колонки и возврат на запись, где были ранее

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




Пост N: 5749
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 21.06.16 09:11. Заголовок: SergKis Понял , дум..


SergKis
Понял , думал можно проще , без дергания указателя записи.
Спасибо.

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




Пост N: 5792
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.06.16 12:11. Заголовок: Поймал косяк в Tsbro..


Поймал косяк в Tsbrowse
Есть 2 открытых справочника в разных Child окнах.
В одном из них я начал редактировать запись и не закончив редактирование
переключаюсь на другой справочник мышкой и получаю вылет
 
Error BASE/1004 Метод не экспортирован: SHOW

Called from SHOW(0)
Called from TSBROWSE:EDIT(4003)
Called from TSBROWSE:KEYDOWN(6584)
Called from TSBROWSE:HANDLEEVENT(7348)
Called from EVENTS(0)
Called from DOEVENTS(0)
Called from TCONTROL:HANDLEEVENT(875)
Called from TSBROWSE:HANDLEEVENT(7385)
Called from EVENTS(0)
Called from UPDATEWINDOW(0)
Called from EVENTS(0)
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(0)


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




Пост N: 5793
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.06.16 12:20. Заголовок: Тот же глюк в C:\..


Тот же глюк в C:\MiniGUI\SAMPLES\Advanced\TsBrowse\ если запустить DEMO.EXE
и заюзать 4 и 5 пример одновременно

Первоначально ломается бровс


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




Пост N: 1034
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.06.16 12:51. Заголовок: Dima пишет:Тот же гл..


Dima пишет:
 цитата:
Тот же глюк в C:\MiniGUI\SAMPLES\Advanced\TsBrowse\ если запустить DEMO.EXE
и заюзать 4 и 5 пример одновременно


Как это тебе удалось ?
Вкл. edit в одном, переключаю фокус на др. тот edit выключился новый включается и так все время, не зависимо с какого примера 4\5 начинать

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




Пост N: 1035
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.06.16 13:22. Заголовок: SergKis пишет:Как эт..


SergKis пишет:
 цитата:
Как это тебе удалось ?


Получил на колонке Age, но там диалоговое окно MODAL. Почему оно дает переход на др. окно приложения ?

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




Пост N: 5795
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.06.16 13:25. Заголовок: SergKis Смотрим при..


SergKis
Смотрим пример проще
C:\MiniGUI\SAMPLES\Advanced\Tsb_SetArrayTo\
Запускаем два окна вот так как на скрине

Входим в режим редактирования колонки order display в записи где цифра 1 и не выходя из него
мышкой щелкаем на втором окне такой же колонки , при чем если нажать на первой записи то вылет с ошибкой
если на другой записи то бровс с которого ушли просто портится , вот скрин


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




Пост N: 5796
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.06.16 13:40. Заголовок: Косяк 2 Есть два акт..


Косяк 2
Есть два активных бровса в разных окнах
Когда бровс в фокусе курсор выглядит как и положено

Переключаюсь мышкой на другой бровс и после возврашаюсь назад
щелкая на той же записи , в этом случае фон курсора остался фоном
не активного курсора


Если во время перехода щелкать на другой записи , не там где стоял курсор
то все нормально.
Я пробовал уже "фокус" c oBrw:bGotFocus:={|| obrw:Refresh()} , не помогло


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




Пост N: 1037
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.06.16 14:25. Заголовок: Dima пишет:Смотрим п..


Dima пишет:
 цитата:
Смотрим пример проще
C:\MiniGUI\SAMPLES\Advanced\Tsb_SetArrayTo\


запустил 6 разных примеров к ним 3 exe Tsb_setArrayTo - переключаюсь\вкл. едит по разному и по всем - ничего описанного тобой нет
Win 8.1, hmg последняя

 цитата:
Я пробовал уже "фокус" c oBrw:bGotFocus:={|| obrw:Refresh()} , не помогло


попробуй oBrw:DrawSelect()
переменная oBrw - public или привате для обоих окон ?

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




Пост N: 5799
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.06.16 14:44. Заголовок: SergKis пишет: попр..


SergKis пишет:

 цитата:
попробуй oBrw:DrawSelect()


Пробовал не пашет
SergKis пишет:

 цитата:
переменная oBrw - public


Public

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




Пост N: 5800
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.06.16 14:47. Заголовок: SergKis пишет: запу..


SergKis пишет:

 цитата:
запустил 6 разных примеров к ним 3 exe Tsb_setArrayTo


Не нужно запускать несколько примеров.
Все в одном , там же есть кнопка TEST RUN ANOTHER WINDOW , нажми ее и будет 2 бровса ,
проделай как я выше описал и будет косяк.
А вот если 2 разных EXE запустить с бровсами то между ними нет такой проблемы

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




Пост N: 5801
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.06.16 15:00. Заголовок: Dima пишет: Переклю..


Dima пишет:

 цитата:
Переключаюсь мышкой на другой бровс и после возврашаюсь назад
щелкая на той же записи , в этом случае фон курсора остался фоном
не активного курсора


А если щелкнуть на заголовке окна то все норм , если щелкать на бровсе то вот такая ерунда

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




Пост N: 1040
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.06.16 15:00. Заголовок: Dima пишет:Public то..


Dima пишет:
 цитата:
Public


тогда у тебя в ней объект tsb последнего запущенного окна, т.е. один объект на два окна и след. при повторном возврате цвета не в фокусе от др. тсв
Для Public надо заводить имена уникальные для тсв, для Private к окну использования - может прокатить, но лучше в блоках кода исп. передаваемый параметр тсв в eval, как я показывал, надо один раз выписать параметры и потом использовать, тогда достаточно local oBrw

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




Пост N: 5802
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.06.16 15:04. Заголовок: Сергей было так Publ..


Сергей было так
Public obrw
Public obrw1
Public obrw2

Переделал
Local obrw
Local obrw1
Local obrw2

Проблема осталась


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




Пост N: 1041
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.06.16 15:13. Заголовок: Dima пишет:А если ще..


Dima пишет:
 цитата:
А если щелкнуть на заголовке окна то все норм , если щелкать на бровсе то вот такая ерунда


Делал и по заголовкам и по строкам и с вкл едит и без и dblclic (в 2-х окнах) - нет описанного тобой. Когда кликаю на заголовок окна (в др.был едит) 1.закрывается едит, 2.фокус на др.окне, но на тсв нет выделенного курсора (нет фокуса), но стрека вниз и все ок или мышой. Словом не получаю описанного тобой

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




Пост N: 1042
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.06.16 15:15. Заголовок: Dima пишет:Проблема ..


Dima пишет:
 цитата:
Проблема осталась


Тогда по Якубовичу ... в студию

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




Пост N: 5803
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.06.16 15:23. Заголовок: SergKis пишет: Дела..


SergKis пишет:

 цитата:
Делал и по заголовкам


Да это я про свой пример писал.
Cчас подробно опишу что сделать надо
Запускаем пример из C:\MiniGUI\SAMPLES\Advanced\Tsb_SetArrayTo\
Жмем кнопку TEST RUN ANOTHER WINDOW , появилось второе окно
Сдвигаем его левее прежнего окна , так что бы в обоих бровсах было видно колонку
Order Display.
На этом последнем окне в бровсе в колонке Order Display в записи где цифрь 1 жмем ВВОД
и попадаем в режим редактирования. Ни чего более не клацаем. Наводим мышку на второй бровс (только не нужно тыкать
на заголовке окна) и тоже в колонку Order Display на запись где цифра 1 , клацаем мышкой И стабильно падаем.
Если и сейчас у тебя не получится , придется мне видео снимать

Вот и видео
https://cloud.mail.ru/public/9SNJ/3pp8to6DP

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




Пост N: 5804
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.06.16 15:35. Заголовок: SergKis пишет: Тогд..


SergKis пишет:

 цитата:
Тогда по Якубовичу ... в студию



Скрытый текст



В другом справочнике все примерно так же так как поля те же
Отличие только в имени базы , имени окна , да и имени бровса ( Public OBRW1)
Где по твоему косяк ?

PS
Возможно не нужно было мне выкладывать описания кнопок , ну да ладно.
Там по самому бровсу не так и много.

Постом выше добавил видео

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




Пост N: 1043
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.06.16 16:27. Заголовок: Dima пишет:клацаем м..


Dima пишет:
 цитата:
клацаем мышкой И стабильно падаем.


нету такого, exe положил, знаешь где, глянь на нем.

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




Пост N: 5805
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.06.16 16:31. Заголовок: SergKis пишет: нету..


SergKis пишет:

 цитата:
нету такого, exe положил, знаешь где, глянь на нем.


На твоем тоже самое , как в кино что я снял. Падает.

PS
Win7
PS2
Чудеса

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




Пост N: 5806
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.06.16 16:38. Заголовок: Положил видео к тебе..


Положил видео к тебе

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




Пост N: 1044
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.06.16 16:39. Заголовок: Dima пишет На этом п..


Dima пишет
 цитата:
На этом последнем окне в бровсе в колонке Order Display в записи где цифрь 1 жмем ВВОД
и попадаем в режим редактирования. Ни чего более не клацаем. Наводим мышку на второй бровс (только не нужно тыкать
на заголовке окна) и тоже в колонку Order Display на запись где цифра 1 , клацаем мышкой И стабильно падаем.


и по видео и по описанию и 5 мин. подряд - все ok

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




Пост N: 5807
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.06.16 16:47. Заголовок: SergKis пишет: и по..


SergKis пишет:

 цитата:
и по видео и по описанию и 5 мин. подряд - все ok


блин мне грустно ))
Якубовича не смотрел выше ( я выложил сырец )?
Там примерно тоже возникает как и в C:\MiniGUI\SAMPLES\Advanced\Tsb_SetArrayTo\
Такое впечатление что оба бровса где то пересеклись по данным , но судя
по сырцу правильно же все.

ЗЫ
Под BCC и MINGW одинаково глючит

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




Пост N: 1045
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.06.16 16:51. Заголовок: Dima пишет я выложил..


Dima пишет
 цитата:
я выложил сырец


взял, попробовал собрать, но ф-й не хватает и базы. точнее не глядел - тыкал пример и так и сяк

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




Пост N: 5808
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.06.16 17:09. Заголовок: SergKis Он был дан ..


SergKis
Он был дан не для сборки а просто посмотреть опытным глазом на описание бровса.
Но я так подозреваю что если у тебя нет косяка в Tsb_SetArrayTo а у меня он есть
тогда и сборка моего сырца ни чего не даст , у тебя все будет нормально.
Проверил работу своей проги на win 2008 те же косяки как и в Tsb_SetArrayTo

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




Пост N: 1046
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.06.16 17:40. Заголовок: Dima посмотрел, вро..


Dima
посмотрел, вроде нормально, но Haz с Андреем обсуждали local в блоке кода и вопросы по содержимому были.
В примерах от Андрея, были похожие штуки и вроде как от одной переменной oBrw, переведя на private (3 или 5 tsb одной ф-ей создавалось\обслуживалось) - вроде исправилось. Точнее он скажет, чем закончилось у него

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




Пост N: 5809
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.06.16 17:56. Заголовок: Функции у меня разны..


Функции у меня разные на бровсы. Пробнул Private - до лампочки.
Можно конечно пойти другим путем , но пока не придумал как реализовать правильно.
Есть только сырая и не продуманная идея.
Вызван один справочник , вызываю другой (окна у них CHILD) и тогда сворачиваю окно первого справочника.
Как то так в первом приближении. А если их открыто более одного и при закрытии последнего вызванного
какой из них восстанавливать я пока не придумал , думаю ...
В консоли все проще


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




Пост N: 1047
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.06.16 18:24. Заголовок: Dima пишет какой из ..


Dima пишет
 цитата:
какой из них восстанавливать я пока не придумал ...В консоли все проще


Так делай похоже. В MDI у нас childmdi окна всегда в полное mdi main окно, новое закрывает предыдущее и не важно есть оно или уничтожено (предыдущее) про Ctrl+Tab клиент не помнит и снова к справочнику обращается через меню\кнопку, потому можно старые окна уничтожать (сохранив позиции фокуса recno, nCell, nRowpos, ...) и делать по новой. Та даже лишнх ресурсов не держишь. И для клиента путаницы из окон нет, очень похоже как в консоли



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




Пост N: 5810
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.06.16 22:28. Заголовок: Идею понял Сергей. В..


Идею понял Сергей.
В ON INIT окна CHILD это уже сделал
При закрытии окна тоже
Борюсь пока с получением фокуса в ON GOTFOCUS , думаю справлюсь , прикольно получается :)
Если что спрошу.

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




Пост N: 1048
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 26.06.16 23:31. Заголовок: Dima глянь пример, ..


Dima
глянь пример, положил на тему edit в 2-х child окнах

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




Пост N: 5811
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 27.06.16 09:15. Заголовок: Да не глючит и я пон..


Да не глючит и я понял почему.
Если окна не наложены друг на друга то все нормально.
Если наложить и пробовать редактировать и не заканчивая редакцию , мышкой перейти в другое окно
то бах и глюк.


Сниму "кино" если нужно.

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




Пост N: 1049
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.06.16 10:10. Заголовок: Dima пишет:Сниму ..


Dima пишет:
 цитата:
Сниму "кино" если нужно


кино не надо, но у меня все ok наложены окна или нет, без разницы.
Win 7 сейчас под рукой нет, но позже пробну.

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




Пост N: 5812
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 27.06.16 10:25. Заголовок: SergKis пишет: Win ..


SergKis пишет:

 цитата:
Win 7 сейчас под рукой нет, но позже пробну.


Надеюсь это повторится как у меня.
И это не единственный замеченный косяк , которых у тебя думаю нет.

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




Пост N: 4979
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.06.16 11:58. Заголовок: SergKis пишет: Win ..


SergKis пишет:

 цитата:
Win 7 сейчас под рукой нет, но позже пробну.


У меня есть в виртуалке. Могу попробовать....

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




Пост N: 5813
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 27.06.16 12:12. Заголовок: Andrey пишет: У мен..


Andrey пишет:

 цитата:
У меня есть в виртуалке. Могу попробовать....


https://cloud.mail.ru/public/KtS6/6GhHtz28A

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




Пост N: 4980
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.06.16 13:19. Заголовок: Dima пишет: Если ок..


Dima пишет:

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



У меня также в 7-ке "вылет" ! Ошибки точно такие же.
Под 8.1 нормально работает. Там при переходе на другое окно редактирование закрывается и спокойно переходит на другое окно.
Под XP пришлось помучиться, но тоже добился вылета программы. Несколько раз мышкой туды-сюды при редактировании и вылет.
Значит что-то в 7-ке и ХР не то...

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




Пост N: 5814
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 27.06.16 13:24. Заголовок: Andrey пишет: У мен..


Andrey пишет:

 цитата:
У меня также в 7-ке "вылет"


Слава богу а то все мне говорят что у меня семерка кривая
Спасибо за тест.
Кстати тестил на серваке 2008 тоже глючит.

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




Пост N: 5815
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 27.06.16 13:32. Заголовок: Дело похоже не тольк..


Дело похоже не только в бровсе а в самом Минигуи в разрезе вынь 7/xp
Например если CHILD окно свернуть а на главном окне живет статусбар с какими то надписями и своим фоном
и затем окно снова развернуть то там где лежало свернутое окно это место статус бар очищается или портится.
На 8.1 все норм

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




Пост N: 5817
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 27.06.16 17:43. Заголовок: SergKis пишет: Win ..


SergKis пишет:

 цитата:
Win 7 сейчас под рукой нет, но позже пробну.


Спасибо , уже не надо. Игорь подсказал что нужно поправить в том числе в сырце TS
Вероятно глюк имеет место только на 7 и XP , выше все нормально.

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




Пост N: 1050
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.06.16 19:36. Заголовок: Dima пишет Игорь по..


Dima пишет
 цитата:
Игорь подсказал что нужно поправить в том числе в сырце TS


Ok


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




Пост N: 4985
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.06.16 21:58. Заголовок: Dima пишет: Игорь п..


Dima пишет:

 цитата:
Игорь подсказал что нужно поправить в том числе в сырце TS
Вероятно глюк имеет место только на 7 и XP


А Григорию скажешь что править ?

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




Пост N: 5818
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 27.06.16 22:19. Заголовок: Andrey пишет: А Гри..


Andrey пишет:

 цитата:
А Григорию скажешь что править ?


да когда он появится

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


Пост N: 594
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 02.07.16 20:06. Заголовок: Копирование в Tsbro..


Копирование в Tsbrows
Как то все не так. Часть строки (поля) нельзя выделить.
Копируется , но все поле.

Или я что-то не так делаю ?
Но в textBox все нормально.

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 958
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 02.07.16 20:47. Заголовок: Vlad04 пишет: Как т..


Vlad04 пишет:

 цитата:
Как то все не так


Согласен, ведь в качестве полей ввода используется самописный GETBOX

Vlad04 пишет:

 цитата:
Часть строки (поля) нельзя выделить


Часть строки (поля) можно выделить с помощью мышки (но не клавиатуры)

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




Пост N: 5835
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 02.07.16 22:02. Заголовок: gfilatov2002 METHOD..


gfilatov2002
METHOD TSBrowse:Edit()
строка примерно 4003 в самом конце
было oCol:oEdit:Show()
надо
 
if oCol:oEdit != NIL
oCol:oEdit:Show()
endif

Это вариант для XP и семерки , выше и так нормально

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




Пост N: 5836
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 02.07.16 22:09. Заголовок: Dima пишет: Это вар..


Dima пишет:

 цитата:
Это вариант для XP и семерки


И еще , после END TBROWSE
указываем примерно так aEval( oBrw:aColumns, { |e| e:bLClicked := {|| oBrw:DrawSelect() } })
иначе ломается курсор , скрины я давал

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


Пост N: 595
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 03.07.16 11:59. Заголовок: gfilatov2002 Часть..


gfilatov2002


 цитата:
Часть строки (поля) можно выделить с помощью мышки

Да, выделить можно , но не скопировать.
Копируется все строка (поле)

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




Пост N: 5837
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 03.07.16 18:01. Заголовок: Vlad04 пишет: Да, в..


Vlad04 пишет:

 цитата:
Да, выделить можно , но не скопировать.
Копируется все строка (поле)


Да так и есть , возможно не допилили GET в бровсе.
А вот в GETBOX такой фокус работает к примеру.

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 959
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 03.07.16 18:40. Заголовок: Dima пишет: Это вар..


Dima пишет:

 цитата:
Это вариант для XP и семерки


Благодарю за сообщение
Поправил для следующей сборки

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