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


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


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

 цитата:

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


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



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


Dima
администратор




Пост N: 4956
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 25.06.15 13:46. Заголовок: Andrey пишет: Народ..


Andrey пишет:

 цитата:
Народ, подскажите как убрать белизну


Решил вопрос ?
Тоже попал на это

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




Пост N: 4957
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 25.06.15 21:23. Заголовок: Подсказали добрые лю..


Подсказали добрые люди oBrw:hBrush := CreateSolidBrush( 210, 210, 210 ) // заливаем чем надо

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




Пост N: 5010
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 02.07.15 14:48. Заголовок: Понадобилось сделать..


Понадобилось сделать полноэкранный курсор.
Сделал oBrw:lCellBrw :=.F.
Пашет , но пропал курсорчик который на CELL , то есть нужен курсор внутри полноэкранного
курсора , что бы видеть в какой колонке стоим.
В консоли без проблем а тут как ?

Сделал авторастяжение колонки 6 oBrw:nAdjColumn := 6
Это не работает если oBrw:lNoHScroll := TRUE , какая связь nAdjColumn с гор. скролом не пойму.

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




Пост N: 684
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.07.15 14:53. Заголовок: Dima пишет: нужен ку..


Dima пишет:
 цитата:
нужен курсор внутри полноэкранного


надо работать в режиме CELL и красить нужным цвеьом тек. строку row

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




Пост N: 5011
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 02.07.15 15:01. Заголовок: SergKis красить чер..


SergKis
красить через Method TSBrowse: SetColor() ?
Вот это в каком положении должно быть oBrw:lCellBrw ?



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




Пост N: 685
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.07.15 15:16. Заголовок: Dima oBrw:lCellBrw ..


Dima
oBrw:lCellBrw := .T.
SetColor() см. надо для 1,2,5,6,11,12
сам только думал попробовать - реально не делал

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




Пост N: 5012
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 02.07.15 15:55. Заголовок: SergKis Что то пока..


SergKis
Что то пока понять не могу как это правильно сделать.
В примерах (все пересмотрел) ни чего подобного нет а оно надо.


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




Пост N: 686
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.07.15 16:11. Заголовок: Dima Farом поищи в ..


Dima
Farом поищи в samples\advanced :SetColor(
будет список применения на разные ситуации - надо смотреть эти примеры

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




Пост N: 687
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.07.15 16:15. Заголовок: Dima oBrw:SetColor(..


Dima
oBrw:SetColor( { 1 }, { { || CLR_BLACK } } ) // 1 , текста в ячейках таблицы
oBrw:SetColor( { 2 }, { { || MyRGB(aBack2) } } ) // 2 , фона в ячейках таблицы
oBrw:SetColor( { 5 }, { { || CLR_BLACK } } ) // 5 , текста курсора, текст в ячейках с фокусом
oBrw:SetColor( { 6 }, { { || { 4915199,255} } } ) // 6 , фона курсора
oBrw:SetColor( { 11 }, { { || CLR_GRAY } } ) // 11, текста неактивного курсора (selected cell no focused)
oBrw:SetColor( { 12 }, { { || { RGB(255,255,74), RGB(240,240,0)}} } ) // 12, фона неактивного курсора (selected cell no focused)
у Andrey в примере есть такое


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




Пост N: 5014
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 02.07.15 16:37. Заголовок: SergKis пишет: oBrw..


SergKis пишет:

 цитата:
oBrw:SetColor( { 11 }, { { || CLR_GRAY } } ) // 11, текста неактивного курсора (selected cell no focused)
oBrw:SetColor( { 12 }, { { || { RGB(255,255,74), RGB(240,240,0)}} } ) // 12, фона неактивного курсора (selected cell no focused)


Вот эти фичи как раз и не срабатывают......

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




Пост N: 4353
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 02.07.15 17:56. Заголовок: Dima пишет: Вот эти..


Dima пишет:

 цитата:
Вот эти фичи как раз и не срабатывают......


Я тоже наткнулся на не срабатывания этого кода.
Нужно ставить эти цвета ПОСЛЕ всех обработок до выхода из процедуры.

Типа:

oBrw3:bKeyDown := { | nKey | MyKeyAction3(nKey,oBrw9, ThisWindow.Name, 0), lOk := nKey != VK_ESCAPE }
oBrw3:bLDblClick:= { || MyAction3(oBrw9, ThisWindow.Name, 0) } // Двойной клик мышки на МАРКЕРЕ

oBrw3:SetColor( { 16 }, { { || { RGB(0,54,94) , RGB(aBack2[1],aBack2[2],aBack2[3]) } } } )
oBrw3:SetColor( { 17 }, { { || CLR_WHITE } } ) // 17, текста спецхидер

oBrw3:Refresh(.T.)

//oBrw3:nAt := 5 // передвинуть МАРКЕР на 5 строку
oBrw3:nCell := 4 // передвинуть МАРКЕР на 3 колонку
//oBrw3:GoPos( 5,3 ) // передвинуть МАРКЕР на 5 строку и 3 колонку

SetProperty(ThisWindow.Name, "oBrw3", "Setfocus" )
RETURN NIL


Смотри пример с многострочным браузером - https://cloud.mail.ru/public/DkoH/nSzvMbeCh



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




Пост N: 688
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.07.15 18:55. Заголовок: Dima наверно тут, у..


Dima
наверно тут, усложнив, выражение надо копать (раскраска четных\нечетных строк)
oBrw5:SetColor( { 2 }, { { || iif( oBrw5:nAt % 2 == 0, RGB(255,255,255), RGB(230, 230, 230) ) }})


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




Пост N: 689
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.07.15 18:57. Заголовок: PS. и ON CHANGE ..


PS.
и ON CHANGE

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




Пост N: 5016
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 02.07.15 19:12. Заголовок: SergKis пишет: наве..


SergKis пишет:

 цитата:
наверно тут, усложнив, выражение надо копать (раскраска четных\нечетных строк)
oBrw5:SetColor( { 2 }, { { || iif( oBrw5:nAt % 2 == 0, RGB(255,255,255), RGB(230, 230, 230) ) }})



Видимо да , только условие там правильное надо задать.
Типа бровс в фокусе и NROW == не понятно с чем сравнить

ЗЫ
Has предлагает все делать в скипере.......это просто идея.

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




Пост N: 5020
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 02.07.15 22:00. Заголовок: Вот так красит строк..


Вот так красит строку
oBrw:SetColor( { 2 }, { { || iif( obrw:nat == obrw:nRowPos, RGB(255, 255, 159),RGB(255,255,255) ) }})
Но курсор вниз (вверх) и окраска остается..........на строках где ранее полежал курсор...


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




Пост N: 693
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.07.15 22:26. Заголовок: Dima добавь к этому..


Dima
добавь к этому
oBrw:bChange := {|| oBrw:Refresh(.F.) }


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




Пост N: 5021
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 02.07.15 23:11. Заголовок: SergKis пишет: oBrw..


SergKis пишет:

 цитата:
oBrw:bChange := {|| oBrw:Refresh(.F.) }


Спасибо !
Работает . Но фон курсора на ячейке синий и белые буковки........я это не назначал.
Где крутить гайки ?


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




Пост N: 694
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.07.15 23:17. Заголовок: Dima пишет:Где крути..


Dima пишет:
 цитата:
Где крутить гайки ?


тут
oBrw:SetColor( { 5 }, { { || CLR_BLACK } } ) // 5 , текста курсора, текст в ячейках с фокусом
oBrw:SetColor( { 6 }, { { || { 4915199,255} } } ) // 6 , фона курсора
назначены по умолчанию в oBrw:New(...)
aTmpColor[ 5 ] := GetSysColor( COLOR_CAPTIONTEXT ), ; // nClrForeFocu
aTmpColor[ 6 ] := GetSysColor( COLOR_ACTIVECAPTION ) // nClrFocuBack

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




Пост N: 5023
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 03.07.15 09:36. Заголовок: SergKis С этим разо..


SergKis
С этим разобрался. Сенкс.
А как быть с oBrw:nAdjColumn , вроде ж должно автоматом выравнивать
ширину колонки под ширину бровса и все колонки должны вписаться в
ширину бровса. Колонок не много 10 штук с суперхеадером. Но нормально
не вписывается да и часть колонок уходит за пределы видимости и нужно скролить
вправо что бы их увидеть.
Задача простая , вписать все колонки четко в ширину бровса.
На ум приходит следующая идея.
Задать фиксированную ширину 9-и колонкам а затем присвоить
ширину 10-ой колонке которая будет равна Ширина бровса - ширины 9-и колонок.
Правильный подход или можно как то проще реализовать ?

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




Пост N: 695
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.07.15 10:14. Заголовок: Dima пишет:Правильны..


Dima пишет:
 цитата:
Правильный подход или можно как то проще реализовать ?


Я TsBrowse, как ты Mdi отложил в ящик, использую Browse без горизонтального скролинга колонок (но на mdi окнах).
oBrw:nAdjColumn не пробовал (руки не дошли), но она на одну колонку (может и не так), т.е. на первом экране, а следующие - уже твои проблеммы. Можно ли подключать блоки кода на горизонт. скролинг (клавиши\мыша, для пересчета размеров видимых\невидимых колонок) не знаю.
В Browse (модиф. своя версия) делаем так:
- определяем колонки для скролинга (размер колонки для "нормального" показа всех прокручиваемых данных)
- width размер browse от колонок по окну (всегда, когда нет других контролов справа от browse) или считаем %-том от размера поля ширину в пиксклях, или просто задать от балды - поправят как надо мышой.
- клиент мышой может менять ширину любой колонки - это сохраняется в cfg под именем окна+browse и при след. входе в окно размеры колонок беруться от cfg (с mdi main окном и modal окнами, также размеры можно менять, сохраняются в cfg под именем окна)
- и при горизонт. скролинге (от номера скролинга) меняется выражение показа всей строки

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




Пост N: 5025
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 03.07.15 10:29. Заголовок: SergKis Понял !..


SergKis
Понял !

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




Пост N: 5047
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.07.15 21:38. Заголовок: Не очень понял как ц..


Не очень понял как цеплять к ячейке BMP[ICO] из ресурса по условию.
Может кто покажет простой пример или намек ?

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




Пост N: 4359
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.07.15 22:02. Заголовок: Допустим в базе есть..


Допустим в базе есть поле Field->NEVENT (1,2,3,4,...) и по условию нужно показывать разные иконки.
Можно так:
Скрытый текст


Тогда в бровсе назначай поле показа на 4 поле:
// "Массив иконок bmp"
aBmp := {,,,"SetNumIcons()"}
IF LEN(aBmp) > 0
For ii:=1 to Len(aBmp)
if !Empty(aBmp[ii])
&cBrw:aColumns[ii]:uBmpCell := &("{||"+aBmp[ii]+"}")
&cBrw:aColumns[ii]:nAlign := nMakeLong( DT_CENTER, DT_CENTER )
endif
Next
ENDIF

Но у меня пример уж очень мудрённый, через ини-файл считывание полей, обработки и т.д.
Посмотри сам - https://cloud.mail.ru/public/Qimr/KjE9KUhcN

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




Пост N: 5048
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 05.07.15 08:52. Заголовок: Andrey Сенкс. Надо ..


Andrey
Сенкс.
Надо было сразу суть объяснить (это 3 строки ) , ну да ладно сам понял.


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




Пост N: 5049
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 05.07.15 08:58. Заголовок: Подсунул прозрачный ..


Подсунул прозрачный BMP и вывел в колонке , упс а у него есть свой фон.
Если ту же BMP вывести на кнопке , все нормально.
Как избавится от фона в бровсе для BMP ?

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




Пост N: 586
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 05.07.15 09:11. Заголовок: Andrey пишет: Но у ..


Andrey пишет:

 цитата:
Но у меня пример уж очень мудрённый,


и более того , в процедуре по ON CHANGE есть вызов Refresh() , что 100% приводит к зависаниюбровса стоит его прогнать стрелками вниз/вверх

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




Пост N: 714
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.07.15 10:02. Заголовок: Dima Haz пишет: по ..


Dima
Haz пишет:
 цитата:
по ON CHANGE есть вызов Refresh() , что 100% приводит к зависаниюбровса стоит его прогнать стрелками вниз/вверх


Мой (твой) пример Refresh(.F.) к зависанию не приводит, но по pgup или up ниже последней и назад - ломается веделенная закраска всей строки с фокусно ячейкой. Как то похитрее надо делать, может быть мтодом DrawLine(xRow) с цветами на пред.стоку и тек., без бутылки сразу не разберешься

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




Пост N: 5050
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 05.07.15 10:15. Заголовок: Помогите с BMP разоб..


Помогите с BMP разобраться

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




Пост N: 587
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 05.07.15 10:33. Заголовок: SergKis пишет: Мой ..


SergKis пишет:

 цитата:
Мой (твой) пример Refresh(.F.) к зависанию не приводит


Сергей, это пример с двойным курсором ?
Сделайте в нем строк поболее ( я тупо нагенерил 1000 ) и нажав стрелку вниз НЕ отпуская до конца , потом так же вверх и глюк как на блюдечке
Если отпускать стрелку вовремя - не проявляется.
Двойной курсор как оказалось - очень просто делается , у меня на работе пример , в понедельник кину Или лучше Дима может сейчас кинуть.


Dima пишет:

 цитата:
О первой колонке с галей говорю.


если разговор только про галю , то тут БМП не нужна т.к есть стандартная галя по логическому полю
oBrw:aColumns[x]:lCheckBox := .T.

ЗЫ. с фоном БМП уже пытался разобраться - не вышло , бросил (((

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




Пост N: 5051
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 05.07.15 11:00. Заголовок: Haz Не , галя не по..


Haz
Не , галя не подходит. Нужна BMP.
Подумал было что вот это ,что то изменит , но нет.
oBrw:lTransparent:=TRUE
Понятно что можно фон сделать который надо , но гиморно больно.
Для каждого фона для одного и того же BMP , держать кучку клонов
Оно как бы можно сырец ковырнуть и посмотреть что там происходит , но сходу
правильное место не нашел.
Похоже все рисуется в Сишнике в процедуре TSDrawCell

Haz пишет:

 цитата:
Двойной курсор как оказалось - очень просто делается , у меня на работе пример , в понедельник кину Или лучше Дима может сейчас кинуть.


Да если надо выложу.

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




Пост N: 715
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.07.15 11:18. Заголовок: Dima пишет:Да если н..


Dima пишет:
 цитата:
Да если надо выложу


Выложи. Пока TsBrowse отложил, но VO прогу переделывать придется, так что лучше сразу, потом сложнее будет.

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




Пост N: 716
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.07.15 11:19. Заголовок: Haz пишет:Сделайте в..


Haz пишет:
 цитата:
Сделайте в нем строк поболее


так сделал и увидел

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




Пост N: 5052
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 05.07.15 11:24. Заголовок: SergKis пишет: Выло..


SergKis пишет:

 цитата:
Выложи.


Колонкам делаем экзекуцию
 
for i := 1 To oBrw:nColCount()
oBrw:aColumns[ i ]:lFixLite := TRUE
next

Красим так примерно (на вкус и цвет товарищей нет )
 
oBrw:SetColor( { 6 }, { { |a,b,c| IF( c:nCell == b,{ RGB(198, 226, 255), RGB(0,196,196) },;
{ Rgb( 198, 226, 255 ), Rgb( 159, 207, 255 ) }) } } )



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




Пост N: 717
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.07.15 11:50. Заголовок: Да, работает. Спасиб..


Да, работает. Спасибо.
Видел в TSBrowse.chm
 цитата:

DBLCURSOR
DOUBLE CURSOR
FIXED Activates the double cursor feature on the freezed columns.


Но догадаться, для чего это
 цитата:
Активизирует функцию двойного курсора на отмороженных колонок


Google translit(c)

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




Пост N: 5053
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 05.07.15 13:34. Заголовок: В общем нашел я мест..


В общем нашел я место где происходит вывод картинок
Это c_TBrowse.c
Функция
void DrawBitmap ( HDC hDC, HBITMAP hBitmap, int wRow, int wCol, int wWidth, int wHeight, DWORD dwRaster )
Есть там переменная
dwRaster = SRCCOPY;

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

У кого есть мысли ?

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




Пост N: 588
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 05.07.15 13:51. Заголовок: Dima пишет: У кого ..


Dima пишет:

 цитата:
У кого есть мысли



а с этим пробовал SRCAND ?

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




Пост N: 5054
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 05.07.15 13:57. Заголовок: Haz пишет: а с этим..


Haz пишет:

 цитата:
а с этим пробовал SRCAND ?


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


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




Пост N: 5055
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 05.07.15 14:06. Заголовок: Игорь это у меня так..


Игорь это у меня такой кривой Axialis IconWorkshop оказывается. Пишет что прозрачный фон у
картинки а на самом деле нет.
Взял чужую картинку с прозрачным фоном , все отлично.
Посему сделать в сырце нужно вот так
dwRaster = SRCAND;

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




Пост N: 589
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 05.07.15 14:08. Заголовок: Dima пишет: Посему ..


Dima пишет:

 цитата:
Посему сделать в сырце нужно вот так
dwRaster = SRCAND;



Погоняю завтра на работе ...

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




Пост N: 5056
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 05.07.15 14:53. Заголовок: я уже погонял. короч..


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


PS
Вот 2 BMP для теста
Один с прозрачным фоном , другой с белым
https://cloud.mail.ru/public/DMPk/TVHRgFZy6
https://cloud.mail.ru/public/AW9h/4igB1QSbr


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




Пост N: 718
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.07.15 20:31. Заголовок: Dima пишет: фон BMP ..


Dima пишет:
 цитата:
фон BMP надо делать белый


Попробовал из VO bmp с белым фоном - полет нормальный.

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




Пост N: 5057
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 05.07.15 21:25. Заголовок: Снова о Double Curso..


SergKis пишет:

 цитата:
Попробовал из VO bmp с белым фоном - полет нормальный.


OK


Снова о Double Cursor.
Вот так выглядит , без особого тюнинга.

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


Еще вопрос:
 
Full oBrw:nLineStyle := 1
Only vertical lines oBrw:nLineStyle := 2
Only horizontal lines oBrw:nLineStyle := 4
No lines oBrw:nLineStyle := 0

Пока стоит у меня 1 , вроде ни чего так. В консоли если сравнивать была бы 2.
В общем пробнул все варианты включая 5 и 3
И так и не понял как лучше и как быстрее будет для самого бровса.
Быстрее будет конечно с nLineStyle := 0 , но выглядит как то вяло все
Кто как юзает ?

PS
Смотрел таблички в задачах на DELPHI , там летает все и ни чего не "подмаргивает" ,
просто хотелось улучшить Tsbrowse в плане прорисовки и скорости.

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




Пост N: 4360
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.07.15 00:17. Заголовок: Dima пишет: Смотрел..


Dima пишет:

 цитата:
Смотрел таблички в задачах на DELPHI , там летает все и ни чего не "подмаргивает"


Там двойная буферизация при выводе на экран. Кто нам сделает такое же в МиниГуи - вопрос открыт !

Dima пишет:

 цитата:
просто хотелось улучшить Tsbrowse в плане прорисовки и скорости.


Аналогично.
Мне бы тоже хотелось иметь готовые примеры как нужно делать то или иное в Tsbrowse.


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




Пост N: 5058
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.07.15 08:52. Заголовок: Andrey пишет: Там д..


Andrey пишет:

 цитата:
Там двойная буферизация


Ну по идее (хотя в си я валенок) надо
в сырцах TsBrowse где идут вызовы SendMessage(...)
4-ым параметром передавать LVS_EX_DOUBLEBUFFER
Только надо знать в каком из них (SendMessage) это
сделать.

Хотя, нет.......
В Tsbrowse есть InitDialogBrowse , вот надо как то перед его вызовом поиграть
с doublebuffer := _HMG_aControlMiscData1 [i,19]
Возможно в Function _DefineTBrowse
в _HMG_aControlMiscData1 [k] := 0 , вместо этого сделать так
_HMG_aControlMiscData1 [k] := { , , , , , , , , , , , , , , , , , , TRUE }

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




Пост N: 719
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.07.15 09:12. Заголовок: Dima если меняем ис..


Dima
если меняем исходники TsBrowse, вопросик
А ты делел, по совету Haz, добавление cName (своего имени колонки) в TSColumn ?
CLASS TSColumn
DATA cName INIT ""
...
Я да, и еще тронул
 
METHOD GetColumn( nCol ) CLASS TSBrowse

Default nCol := 1

IF hb_IsString( nCol )
nCol := Max( AScan( ::aColumns, {|oCol| Upper(oCol:cName)==Upper(nCol) } ), 1)
RETURN ::aColumns[ nCol ] // returns a Column object
ENDIF

If nCol < 1
nCol := 1
ElseIf nCol > Len( ::aColumns )
nCol := Len( ::aColumns )
EndIf

Return ::aColumns[ nCol ] // returns a Column object

может и еще надо было бы пройтись, но пока этим обхожусь


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




Пост N: 5059
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.07.15 09:15. Заголовок: SergKis Нет этого н..


SergKis
Нет этого не делал.
О DoubleBuffer читал , мыслю верно ?
Я о _HMG_aControlMiscData1 [k] := 0 функции _DefineTBrowse

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




Пост N: 720
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.07.15 09:23. Заголовок: Dima так глубоко ещ..


Dima
так глубоко еще не лазил (как устроено не копал), по простым методам не прошел даже. Получается, как ты говорил "зашел на 5 минут", а вышел через неделю и не заметил. В Browse и вернулся по этим причинам.


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




Пост N: 721
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.07.15 09:33. Заголовок: Dima пишет:Я о _HMG_..


Dima пишет:
 цитата:
Я о _HMG_aControlMiscData1 [k] := 0 функции _DefineTBrowse


В др.контролах это контейнер внутренних данных, в TsBrowse нашел только это METHOD EditExit line 3950
 
If ValType( oCol:oEdit ) == "O"
DO CASE
CASE "TGETBOX" $ Upper( oCol:oEdit:ClassName() )
ix := GetControlIndex ( ::cChildControl, ::cParentWnd )
nKey := _HMG_aControlMiscData1 [ix][3]
SetFocus( ::hWnd ) // JP 1.59
CASE "TBTNBOX" $ Upper( oCol:oEdit:ClassName() ) .and. lSpinner

не считая функции _DefineTBrowse


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




Пост N: 5060
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.07.15 09:57. Заголовок: Тогда не понятно как..


Тогда не понятно как корректно в 19 элемент сложить TRUE

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




Пост N: 722
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.07.15 10:33. Заголовок: Dima LVS_EX_DOUBLEB..


Dima
LVS_EX_DOUBLEBUFFER - это для ListView, т.е. дл Browse, Grid

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




Пост N: 590
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.07.15 10:39. Заголовок: SergKis пишет: може..


SergKis пишет:

 цитата:
может и еще надо было бы пройтись, но пока этим обхожусь



Сергей, я еще это менял ( номера строк примерные т.к. дома не актуальные исходники )

добавил код чтобы по ENTER и SPACE вызывался код дабл клика мышкой в широком курсоре
6396 Case !::lCellbrw .And. (nKey == 13 .Or. nKey == 32 )
If ::bLDblClick != Nil
Eval( ::bLDblClick )
EndIf
Otherwise



Выход из редактирования при потере фокуса ячейкой с СОХРАНЕНИЕМ редакции ( как Excel )

// if nKey == 0
3915 // lLostFocus := .T. Закоментировал и изменил условие ниже с nKey > 0 на nKey >= 0
// endif

3919 If ! lLostFocus .and. nKey >= 0 .and. (nKey != VK_ESCAPE .or. ::nColSpecHd != 0) .and. ;



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




Пост N: 723
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.07.15 10:40. Заголовок: Haz Спасибо. :sm36..


Haz
Спасибо.

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




Пост N: 5061
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.07.15 10:41. Заголовок: SergKis пишет: LVS_..


SergKis пишет:

 цитата:
LVS_EX_DOUBLEBUFFER - это для ListView, т.е. дл Browse, Grid


То есть не для TSBROWSE......??? , который в свою очередь юзает InitDialogBrowse из h_browse.prg в
котором и считывается doublebuffer := _HMG_aControlMiscData1 [i,19] и затем скармливается
SendMessage.
Можно тупо закоментить doublebuffer := _HMG_aControlMiscData1 [i,19]
и написать doublebuffer := TRUE

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




Пост N: 724
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.07.15 10:56. Заголовок: Dima это где ? не в..


Dima
это где ? не вижу, ткни
 цитата:
который в свою очередь юзает InitDialogBrowse из h_browse.prg в
котором и считывается doublebuffer := _HMG_aControlMiscData1 [i,19] и затем скармливается
SendMessage.



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




Пост N: 5062
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.07.15 11:06. Заголовок: Вызов InitDialogBrow..


Вызов InitDialogBrowse есть в SOURCE\TsBrowse\h_tbrowse.prg
Сам InitDialogBrowse живет в сырцах Минигуи в h_browse.prg ,
строка примерно 296
Там чуть ниже и считывается doublebuffer из массива _HMG_aControlMiscData1

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




Пост N: 725
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.07.15 11:18. Заголовок: туда попадаем при i..


туда попадаем при
if _HMG_BeginDialogActive
а унас ситуация else и
oBrw := TSBrowse():New( ControlName, nRow, nCol, nWidth, nHeight,;


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




Пост N: 5063
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.07.15 13:29. Заголовок: SergKis Попробовал ..


SergKis
Попробовал сделать по аналогии с обычным бровсом в Function _DefineTBrowse
в самом конце перед Return
 
if .Not. _HMG_DialogInMemory
SendMessage( ControlHandle, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_DOUBLEBUFFER)
endif

Пересобрал , видимого эффекта не обнаружил , все по старому............
Наверное там не все так просто если Григорий этого не сделал после того как в Grid и бровсе
был введен DOUBLEBUFFER.
Фсё , у меня мысли кончились в плане DOUBLEBUFFER

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




Пост N: 726
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.07.15 14:09. Заголовок: Dima LVS_EX_DOUBLEB..


Dima
LVS_EX_DOUBLEBUFFER это ListView контрол от Мвйкрософта и появилось то ли с Висты, то ли с 7ки, раньше вроде не было.
а TsBrowse типа самописный, так что ...

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




Пост N: 5064
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.07.15 14:11. Заголовок: SergKis Понял. Посл..


SergKis
Понял.
Последняя попытка ;)
Пробнул вот так еще в своем сырце после END WINDOW
ListView_ChangeExtendedStyle ( GetControlHandle('oBrwm','MAGAZIN'), LVS_EX_DOUBLEBUFFER, NIL )
Эффекта не увидел. Тут не катит такое ?

PS
Похоже не катит........

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




Пост N: 5065
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.07.15 14:45. Заголовок: SergKis А в обычном..


SergKis
А в обычном бровсе не TS , супер хидер возможен ?
Сделать двойной курсор можно ?

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




Пост N: 727
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.07.15 14:48. Заголовок: Dima пишет:Похоже не..


Dima пишет:
 цитата:
Похоже не катит


Можно пробовать через WM_SETREDRAW, но это копать надо (и прокатит ли):
 
// BAA
HB_FUNC( LOCKREDRAW )
{
HWND hWnd = ( HWND ) hb_parnl( 1 );

if( hb_parl(2) ) SendMessage( hWnd, WM_SETREDRAW, 0, 0); // .T. - блокировать
else SendMessage( hWnd, WM_SETREDRAW, 1, 0); // .F. - разблокировать
}



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




Пост N: 728
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.07.15 14:53. Заголовок: Dima пишет:А в обычн..


Dima пишет:
 цитата:
А в обычном бровсе не TS , супер хидер возможен ?
Сделать двойной курсор можно ?


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

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




Пост N: 5066
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.07.15 14:55. Заголовок: Прокатило LOCKREDRAW..


Прокатило
LOCKREDRAW(GetControlHandle('oBrwm','MAGAZIN'),.T.)
только после этого бровс не рисуется совсем.
куда ее правильно пристроить ?

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




Пост N: 729
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.07.15 14:59. Заголовок: Dima пишет:куда ее п..


Dima пишет:
 цитата:
куда ее правильно пристроить ?


Вот тут и копать начинать надо Я не очень влез в тексты TsBrowse, что бы ответить

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




Пост N: 5067
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.07.15 15:04. Заголовок: Ладно пробну пихнуть..


Ладно пробну пихнуть ее METHOD Display() CLASS TSBrowse
 
::BeginPaint()
::Paint()
::EndPaint()



Перед ::Paint() включу а после выключу

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




Пост N: 5068
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.07.15 15:09. Заголовок: Сделал , шустрее бро..


Сделал , шустрее бровс не стал ))))

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




Пост N: 730
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.07.15 15:20. Заголовок: Dima пишет:Сделал , ..


Dima пишет:
 цитата:
Сделал , шустрее бровс не стал


И не должен. Этим можно убрать мелькание.

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




Пост N: 5069
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.07.15 15:22. Заголовок: SergKis пишет: Эти..


SergKis пишет:

 цитата:
Этим можно убрать мелькание.


Оно осталось ;)
Таблица не мерцает а вот курсор да.

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




Пост N: 731
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.07.15 15:28. Заголовок: Dima Pasha писал Ещ..


Dima
Pasha писал
 цитата:
Еще tbrowse любит все время опрашивать RecCount(), на каждой записи...


может еще в эту сторону смотреть для увеличения быстроты
А по поводу мерцания ничего не скажу - нет мыслей


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




Пост N: 5070
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.07.15 15:32. Заголовок: SergKis пишет: Еще ..


SergKis пишет:

 цитата:
Еще tbrowse любит все время опрашивать RecCount(),


я пока на массиве юграю , поэтому RecCount() не при делах.
Всё мысли и у меня кончились......с утра думал минут 5 поиграть а уже скоро 16-00 ))

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




Пост N: 732
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.07.15 15:42. Заголовок: Dima пишет:с утра ду..


Dima пишет:
 цитата:
с утра думал минут 5 поиграть а уже скоро 16-00


Вот и я волевым усилием отложил TsBrowse, а то сядешь играть ..., а неделя прошла.
Работа стоит, а время идет (c)

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




Пост N: 5071
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.07.15 15:47. Заголовок: SergKis пишет: сяде..


SergKis пишет:

 цитата:
сядешь играть ..., а неделя прошла.


Это точно
Смотрю там всем рисованием занимается сишная функция
HB_FUNC( TSDRAWCELL )
возможно надо там копать , но в сях я не силен.

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




Пост N: 5072
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 06.07.15 16:32. Заголовок: Еще вопрос по TS :s..


Еще вопрос по TS
Если зажать и держать PGDN , то листается не весь бровс целиком как ожидалось
а только в пределах строки курсора.
Этот эффект как то отключается ?
Смотрел oBrw:lPageMode , это не то.

PS
Глянул , не отключается. Только лишь переделкой лечится.

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




Пост N: 4373
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.07.15 22:49. Заголовок: Стрес-тест для TBROW..


Стрес-тест для TBROWSA.
Открываю базу через инет (Leto) - 5 миллионов записей, при создании окна и TBROWSA тормозит немного 5-7 сек., но ничего открывает по выбору 97 тыс. записей... маркер немного вальяжно ходит... Но этоже всётаки 97 тыс. записей в бровсе....
Единственно глюк - на скролинге не отображается положение в базе и если за него подвигать вверх/вниз - ВИСНЕТ НАГЛУХО !
Что там можно исправить ?
Исходники здесь - https://cloud.mail.ru/public/6Tw4/JGGSA941Q


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




Пост N: 5080
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 07.07.15 23:11. Заголовок: Andrey пишет: Откры..


Andrey пишет:

 цитата:
Открываю базу через инет (Leto)


Лето не у всех установлен , так что давай тест под CDX

PS
Копирайт рано вешать )))

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




Пост N: 4374
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.07.15 07:04. Заголовок: Dima пишет: Лето не..


Dima пишет:

 цитата:
Лето не у всех установлен , так что давай тест под CDX


Там переключатель есть на DBFCDX, будет работать стандартный драйвер.
Только при первом запуске надо кнопку "колёсико" выбрать и указать кол-во записей для создания базы !
Если заново нужно создать базу, то нужно удалить уже созданную базу.

Копирайт потом общий повешу, без вашей общей помощи - не создал бы такой тест !

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




Пост N: 733
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.07.15 08:25. Заголовок: Andrey пишет:Что там..


Andrey пишет:
 цитата:
Что там можно исправить ?


-установить
 цитата:

RddInfo( RDDI_BUFKEYCOUNT, <lSet>,, [nConnection] )
По умолчаниюю флаг RDDI_BUFKEYCOUNT не установлен. Если он не установлен, функция
ordKeyCount() запращивает значение количества ключей с сервера, если установлен -
использует последнее значение, полученное с сервера.

RddInfo( RDDI_BUFKEYNO, <lSet>,, [nConnection] )
По умолчаниюю флаг RDDI_BUFKEYNO не установлен. Если он не установлен, функция
ordKeyNo() запращивает значение сервера, если установлен -
использует последнее значение, полученное с сервера.


-убрать OdKeyCount из on change
-не знаю как skip буффер заполняется данными из fpt, но я бы мах избавился от memo полей, с инф. типа адрес, телефон, ...


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




Пост N: 4375
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.07.15 08:30. Заголовок: SergKis пишет: -не ..


SergKis пишет:

 цитата:
-не знаю как skip буффер заполняется данными из fpt, но я бы мах избавился от memo полей, с инф. типа адрес, телефон, ...


Ну это сложно. Юзера вечно хотят свои примечания писать. Адрес, телефон в этом тесте просто выступают как образец.
А так конечно согласен, чем меньше мемо, тем лучше.

SergKis пишет:

 цитата:
RddInfo( RDDI_BUFKEYCOUNT, <lSet>,, [nConnection] )



А в каком месте программы ?
Там где Leto коннектится или в другом месте ?

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




Пост N: 734
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.07.15 08:42. Заголовок: Andrey пишет:Ну это ..


Andrey пишет:
 цитата:
Ну это сложно. Юзера вечно хотят свои примечания писать


У нас "хвост управляет собакой" или наоборот ?
Я делаю поле через разделитель ~0.5k-3k как для aTokens

 цитата:
Там где Leto коннектится или в другом месте ?


RddInfo - инф. для rdd, вот и ставь соответственно

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




Пост N: 5082
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 08.07.15 11:30. Заголовок: Сергей а ништяки тип..


Сергей а ништяки типа RDDI_BUFKEYNO , RDDI_BUFKEYCOUNT это для Leto только ?
Посмотрел DBINFO.CH там нет такого.

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




Пост N: 599
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 08.07.15 11:32. Заголовок: Andrey пишет: Стрес..


Andrey пишет:

 цитата:
Стрес-тест для TBROWSA.



Тест конечно стресс но не для бровса,, а для автора т.к. надо немного менять код
1. Переписать так чтобы не было везде понатыкано MyFocusBrw() , как минимум в ON CHANGE - это место крайне чувствительно ко всяким лишним действиям
2. Когда ставиться Scope - бровс об это ничего не знает , ему не сказали что логическая длина базы съехала. Отсюда и косяк на скролере ( пример как сказать есть в TSBFilter , что фильтр что скоп итог один - бровсу кормят не то количество на которое он инициализировался ) - нужен :Reset()
3. Нагенерил 100 000 на локальном компе тормозов нет

PS. Сергей верно сказал - мемо поля это помойка в которой тяжело искать , и уменьшай объем передаваемых данных в буфер записи при Skip. Узкое место скорость передачи

PPS Вспомнил позднее - по поводу мемо полей мы уже говорили и ты что то делал подобное - мемо показывать не в бровсе а в отдельной области окна , и только для текущей записи . Читать мемо можно c задержкой , чтоб не тормозил бровс при навигации . Я у себя тупо через таймер и массив комманд реализовал , по ON CHANGE в массив комманд пишется N записи по которой перечитать мемо и обнуляется счетчик задержки примерно 500 мс. При контроле этого счетчика , если он достиг 500 читаем последнее значение из массива и по нему мемо, при этом обнуляя массив. Т.е мемо подчитывается через пол секунды после того как пользователь перестал давить на кнопки управления

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




Пост N: 735
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.07.15 14:27. Заголовок: Dima пишет: ништяки ..


Dima пишет:
 цитата:
ништяки типа RDDI_BUFKEYNO , RDDI_BUFKEYCOUNT это для Leto только ?


Ты совершенно прав, цитата и ништяки из letodb, а cdx и без них тянет.


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




Пост N: 5083
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 08.07.15 14:33. Заголовок: SergKis пишет: а cd..


SergKis пишет:

 цитата:
а cdx и без них тянет


Да меня больше ADSCDX интересовал.

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




Пост N: 736
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.07.15 14:34. Заголовок: Haz пишет:и уменьшай..


Haz пишет:
 цитата:
и уменьшай объем передаваемых данных в буфер записи при Skip. Узкое место скорость передачи


Для browse лучше skip буфер делать в кол-во строк browse, иначе идет набор рывками (особенно видно в модемном соединении), для TSB, думаю тоже, не пробовал с letodb (пока с cdx вопросы)

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




Пост N: 737
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.07.15 14:42. Заголовок: Dima пишет:Да меня б..


Dima пишет:
 цитата:
Да меня больше ADSCDX интересовал.


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

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




Пост N: 4376
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.07.15 16:04. Заголовок: Haz пишет: Тест кон..


Haz пишет:

 цитата:
Тест конечно стресс но не для бровса,, а для автора т.к. надо немного менять код


Для этого и вас всех просил посмотреть !

Haz пишет:

 цитата:
3. Нагенерил 100 000 на локальном компе тормозов нет


Нужно по сетке хотя бы проверить.... И побольше базу ....


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




Пост N: 5087
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 08.07.15 16:48. Заголовок: Haz пишет: Когда ст..


Haz пишет:

 цитата:
Когда ставиться Scope - бровс об это ничего не знает


А вот с этого места можно поподробнее как для домохозяек ?
Если я работаю по сети и в базе 100 записей. Завел новую запись 101 а по сети
в это время добавили запись 102 , я ее не увижу ?
В консоли с этим нет проблем.
Молчу уже про Scope , Фильтра.........

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




Пост N: 600
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 08.07.15 20:12. Заголовок: Dima пишет: В консо..


Dima пишет:

 цитата:
В консоли с этим нет проблем.


думаю и в консоли при сформированном бровсе по полной базе , а какая то прцудура выставит фильтр , то бровсу как минимум :RefreshAll() потребуется .
Проблемы такие же как и в консоли , к примеру если коллега отредактирует запись которая у меня висит перед глазами в бровсе , я не увижу изменений пока не обновлю запись

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




Пост N: 601
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 08.07.15 20:13. Заголовок: SergKis пишет: Для ..


SergKis пишет:

 цитата:
Для browse лучше skip буфер делать в кол-во строк browse,



Спасибо, проверю !

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




Пост N: 5089
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 08.07.15 21:23. Заголовок: Haz пишет: то бровс..


Haz пишет:

 цитата:
то бровсу как минимум :RefreshAll() потребуется .


Конечно я его делаю и в консоли , когда это требует логика проги.
Все понял !

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




Пост N: 780
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.08.15 08:14. Заголовок: Смотрю проблема cVal..


Смотрю проблема cValToChar(xValue) для чисел так и не решилась с давних времен
http://clipper.borda.ru/?1-20-0-00000485-000-0-0-1150783273 Пост N: 191
 
FUNCTION cValToChar( xValue )

LOCAL cType := ValType( xValue )
LOCAL cValue := "", nDecimals

if cType == 'N'
if xValue == int(xValue)
nDecimals := 0
else
nDecimals := Set( _SET_DECIMALS )
endif
endif
DO CASE
CASE cType $ "CM"; cValue := xValue
CASE cType == "N" ; cValue := LTrim( Str( xValue, 20, nDecimals ) )
...
на мой взгляд применение (убрав строки определения nDecimals)
CASE cType == "N" ; cValue := hb_ntos( xValue)
работают правильнее для разных значений дробной части числа



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




Пост N: 799
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 03.08.15 10:52. Заголовок: SergKis пишет: проб..


SergKis пишет:

 цитата:
проблема cValToChar(xValue) для чисел так и не решилась


Благодарю за напоминание!
Поправил для следующей сборки

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




Пост N: 781
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.08.15 14:39. Заголовок: Подскажите (не вижу)..


Подскажите (не вижу), есть ли в MiniGui готовая функция для получения объекта TSBrowse по имени контрола и формы. Типа
 
FUNCTION _GetObjTSBrowse( ControlName, ParentForm, nIndex)
LOCAL oBrw
LOCAL i := iif(pCount() > 2, nIndex, GetControlIndex(ControlName,ParentForm))
IF i > 0; oBrw:= _HMG_aControlIds [ i ]
ENDIF
RETURN oBrw


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




Пост N: 800
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 03.08.15 16:03. Заголовок: SergKis пишет: есть..


SergKis пишет:

 цитата:
есть ли в MiniGui готовая функция для получения объекта TSBrowse


Нет такой функции

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




Пост N: 782
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.08.15 16:24. Заголовок: gfilatov2002 пишет:Н..


gfilatov2002 пишет:
 цитата:
Нет такой функции


Выпадает TsBrowse из общей организации MiniGui. Нет тогда и min псевдообъекта oTSB := wForma.Magazin.Object

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




Пост N: 4444
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.08.15 19:53. Заголовок: Всем привет. Тестир..


Всем привет.
Тестирую TBROWSE через сервер на медленном соединение...
Не очень приятно видеть как TBROWSE медленно перерисовывает окно и саму таблицу.
В терминалке была команда DispBegin() и DispEnd().
Есть ли такая команда для МиниГуи TBROWSE ?


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




Пост N: 5210
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.08.15 21:22. Заголовок: Andrey пишет: Тести..


Andrey пишет:

 цитата:
Тестирую TBROWSE через сервер на медленном соединение...


Тут тема про TSBROWSE...

ЗЫ
А по вопросу , коли медленный коннект повесь какой то индикатор или типа того...


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




Пост N: 4446
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.08.15 21:33. Заголовок: Dima пишет: При чем..


Dima пишет:

 цитата:
Тут тема про TSBROWSE...



Как читаю, так и написал:
DEFINE TBROWSE oBrw3 ;
AT 160,2 ;
WIDTH nWinWidth-2*2 ;
HEIGHT nWinHeight - 160*2 ;
ON CHANGE { || ChangeBrowse("oBrw3") } ;
ON GOTFOCUS ChangeBrowse("oBrw3") ;
BACKCOLOR aBackColor ;
CELL

и т.д.

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




Пост N: 5211
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.08.15 21:37. Заголовок: Andrey Думаешь Disp..


Andrey
Думаешь DispBegin() и DispEnd() ......аналоги...помогут ?
Что то сомневаюсь.

PS
Есть там BeginPaint() и EndPaint()

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




Пост N: 4447
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.08.15 21:42. Заголовок: Dima пишет: А по во..


Dima пишет:

 цитата:
А по вопросу , коли медленный коннект повесь какой то индикатор или типа того...


Во первых не знаю как определить - медленный коннект или нет ?
Во вторых - видно как TSBROWSE строит по ячейкам таблицу - визуально, медленно и не спеша.
А при нажатии на стрелки- вверх/вниз видно как перерисовывается маркер/курсор.
Для терминального TBROWSE были команды DispBegin() и DispEnd(), т.е. саму перерисовку пользователь не видел.
Это классные команды !

Вот и хотелось бы узнать как провернуть такой же финт для TSBROWSE ?

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




Пост N: 5212
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.08.15 21:55. Заголовок: Andrey Сделай проще..


Andrey
Сделай проще )))
Напиши , идет загрузка данных в лейбе индикатора а уж после загрузки покажи бровс.
Не то ?

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




Пост N: 4448
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.08.15 22:05. Заголовок: Dima пишет: Напиши ..


Dima пишет:

 цитата:
Напиши , идет загрузка данных в лейбе индикатора а уж после загрузки покажи бровс.
Не то ?



То что надо. А как сделать то ?
Я сейчас на медленном коннекте вижу как прорисовывается вся таблица.



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




Пост N: 792
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.08.15 22:44. Заголовок: Andrey пишет:Я сейча..


Andrey пишет:
 цитата:
Я сейчас на медленном коннекте вижу как прорисовывается вся таблица.


Все верно, tbrows ходит (skip-ует) по базе, время обновления skip-буф. мало, он снова заполняется и получаешь то, что видишь

 цитата:
То что надо. А как сделать то ?


Твой же пример WAIT_WINDOW с потоком и без, сделай аналогично, повесь анимацию, отбери в массив или memio и показывай.

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




Пост N: 4462
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.08.15 14:16. Заголовок: Помогите разобраться..


Помогите разобраться с глюком мышки.

Пример MiniGUI\SAMPLES\Advanced\Tsb_config
На самом Tsbrowse нажимаем правую кнопку мышки и выбираем "Enable display of deleted records"
Клавиша PgDown до последней странице - нумерация строк (1-я колонка) в Tsbrowse - нормальная.
Если крутить колёсиком мышки - нумерация строк (1-я колонка) неправильная.
Как исправить ?

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




Пост N: 4464
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.08.15 14:52. Заголовок: Собрал в новой верси..


Собрал в новой версии MiniGUI 2.5.1 - глюк тоже есть !
Вот так выглядит на экране:


Если листать клавишей PageDown - то глюка нет !
Помогите пожалуйста исправить, юзера будут просто ВОПИТЬ - куда делись договора...


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




Пост N: 629
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 24.08.15 18:06. Заголовок: Andrey пишет: Если ..


Andrey пишет:

 цитата:
Если листать клавишей PageDown - то глюка нет



Это не глюк , минигуй тут не причем. Это ошибки алгоритма заложенного в пример. Меняй алгоритм и не переназначай внутренние переменные бровса если не уверен в том как это работает.
Нет времени заниматься поиском косяков в чужом коде , вот куски кода которые корректно работают
 
SET DELETED OFF
....
INDEX ON Number TAG "ALL"
INDEX ON Number TAG "DEL" FOR ( !Deleted() )

....

oBrw:bChange := { || oBrwChange() }

....

STATIC FUNCTION oBrwChange()
LOCAL cVal := HB_NToS( (oBrw:cAlias)->(OrdKeyNo()) ) + ' / ' + HB_NToS( (oBrw:cAlias)->(OrdKeyCount()) )
Form_0.StatusBar.Item(3) := " RecnO: " + cVal
Form_0.oBrw.Setfocus
RETURN Nil

....
FUNCTION RecnoViewDel(lVal)
LOCAL cMsg

IF lVal
(oBrw:cAlias)->(DbSetOrder("ALL"))
cMsg := "Included a display of deleted records !"
ELSE
(oBrw:cAlias)->(DbSetOrder("DEL"))
cMsg := "Offline mode display of deleted records !"
ENDIF

oBrw:Reset()

MsgInfo(cMsg )

Eval( oBrw:bChange )
RETURN Nil




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




Пост N: 4466
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.08.15 23:37. Заголовок: Haz Спасибо ! Буду п..


Haz Спасибо !
Буду переделывать....
И еще заметил странность, если подёргать клавишами PageDown, PageUP а потом погонять клавишей стрелка вниз,
то TsBrowse вешает программу наглухо.

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




Пост N: 630
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 25.08.15 10:38. Заголовок: Andrey пишет: TsBro..


Andrey пишет:

 цитата:
TsBrowse вешает программу наглухо.


Все верно, так и должно быть
Перечитай эту ветку, один форумчанин примерно месяц назад. уже указывал тебе на эти грабли в твоем примере.

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




Пост N: 4467
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.08.15 17:51. Заголовок: Haz пишет: Перечита..


Haz пишет:

 цитата:
Перечитай эту ветку, один форумчанин примерно месяц назад. уже указывал тебе на эти грабли в твоем примере.



Да пока сам на грабли еще раз не наткнёшься, ни фига не запомнишь !
Только не всегда это происходит...

Пост N: 586
Haz пишет:

 цитата:
и более того , в процедуре по ON CHANGE есть вызов Refresh() , что 100% приводит к зависаниюбровса стоит его прогнать стрелками вниз/вверх



Пост N: 717
SergKis пишет:

 цитата:
Мой (твой) пример Refresh(.F.) к зависанию не приводит, но по pgup или up ниже последней и назад - ломается веделенная закраска всей строки с фокусно ячейкой. Как то похитрее надо делать, может быть мтодом DrawLine(xRow) с цветами на пред.стоку и тек., без бутылки сразу не разберешься



Так же ломается счетчик записей левой колонки.
Можно туда прикрутить в саму БИБЛИОТЕКУ - чтобы это не ломалось ?


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




Пост N: 631
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 25.08.15 17:57. Заголовок: в чем проблема ? пок..


в чем проблема ? показывай в первой колонке OrdKeyNo()

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




Пост N: 632
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 25.08.15 18:17. Заголовок: Haz пишет: Только н..


Andrey пишет:

 цитата:
Только не всегда это происходит...


Это происходит ВСЕГДА если в ON CHANGE есть Refresh() и бежать по длинной базе не отрывая пальца по стрелки вниз или вверх достаточно долго.

Если почитать дальше 717 714 поста то там есть и пост 587 и ответ на него 716 . Читать надо внимательнее

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




Пост N: 633
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 25.08.15 18:28. Заголовок: Andrey пишет: Так ж..


Andrey пишет:

 цитата:
Так же ломается счетчик записей левой колонки.



в DBFCDX нет логического нумератора строк , кроме как номер ключа при наличии индекса.
в TSBrowse ::nAt - тоже не нумератор , он может и отрицательные значения принимать
Поэтому как отобразить логический номер - головняк разработчика программы где используется TSBrowse

PS nAt совпадает с логическим номером только при бровсе по массиву.

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




Пост N: 4468
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.08.15 18:40. Заголовок: Понял. Спасибо БОЛЬШ..


Понял. Спасибо БОЛЬШОЕ !

Вопрос по ломке нумерации - это происходит ТОЛЬКО мышкой и клавишей стрелка вниз, когда находишься на последней строке в бровсе.
Как то можно отловить этот момент и не давать маркеру/курсору скакнуть вниз ?
Тогда и ломаться нумерация не будет.
Но может я и не прав...

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




Пост N: 5242
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 25.08.15 21:21. Заголовок: Andrey Что бы не флу..


Andrey
Что бы не флудить еще пару-тройку страниц , самодостаточный пример.
Ни чего не глючит , не виснет и "ездит" как нужно
Да простит меня Has

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



PS
Пример не мой.
https://www.youtube.com/watch?v=p0-TYMZ4iRE

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




Пост N: 634
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 25.08.15 22:06. Заголовок: Dima пишет: Да прос..


Dima пишет:

 цитата:
Да простит меня Has



Слил военную тайну тока так
Теперь все узнают что TsBrowse работает нормально

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




Пост N: 5243
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 25.08.15 22:19. Заголовок: Haz пишет: Слил вое..


Haz пишет:

 цитата:
Слил военную тайну тока так


Чисто на благо форума (темы). Все , к стенке меня...

PS
Могу убрать если надо

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




Пост N: 635
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 25.08.15 22:23. Заголовок: Dima пишет: Все , ..


Dima пишет:

 цитата:
Все , к стенке меня... )))


Ага, через оформление примера для минигуя
жаль для примера этого маловато. В следующий раз - по всей строгости

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




Пост N: 5244
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 25.08.15 22:34. Заголовок: Haz пишет: жаль для..


Haz пишет:

 цитата:
жаль для примера этого маловато.


Пример в порядке что бы исправить другой пример.

PS
По ходу можно назначить тебя админом что бы иногда разгребать.......ну ты понял что.
Если готов скажи

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




Пост N: 636
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 25.08.15 22:35. Заголовок: Dima пишет: разгреб..


Dima пишет:

 цитата:
разгребать.......ну ты понял что.



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




Пост N: 5245
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 25.08.15 22:44. Заголовок: Haz ))))))..


Haz


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




Пост N: 4469
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.08.15 16:17. Заголовок: Dima пишет: Что бы ..


Dima пишет:

 цитата:
Что бы не флудить еще пару-тройку страниц , самодостаточный пример.


Спасибо Дима !

Только жалко, что там нет 1-ой колонки с нумерацией DATA oBrw:nLogicPos ....
-----
Помнишь, говорили в этом фильме : Да гранаты у него не той системы...
Жалко на ютубе не нашёл этого кусочка...

Ну да ладно, буду смотреть.



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




Пост N: 639
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 26.08.15 16:30. Заголовок: Andrey пишет: Ну да..


Andrey пишет:

 цитата:
Ну да ладно, буду смотреть.


Ну куда там еще смотреть , все разжевано - пережевано дальше некуда

 цитата:
жалко, что там нет 1-ой колонки с нумерацией DATA oBrw:nLogicPos ....


так добавь с DATA ( oBrw:cAlias)->(OrdkeyNo()) , это же можно сделать самостоятельно

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




Пост N: 4488
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.09.15 09:40. Заголовок: Всем привет ! Можно..


Всем привет !

Можно ли при построение узнать размер пустой строки перед подвалом ?


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




Пост N: 5263
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 01.09.15 10:22. Заголовок: Andrey Типа так Fu..


Andrey
Типа так
 
Func GetHole(obrw)
local WorkHeight := oBrw:nHeight-oBrw:nHeightHead-oBrw:nHeightSuper-;
oBrw:nHeightFoot-oBrw:nHeightSpecHd-if(!oBrw:lNoHScroll,16,0)
RETURN (WorkHeight-Int(WorkHeight/oBrw:nHeightCell)*oBrw:nHeightCell)


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




Пост N: 4489
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.09.15 11:16. Заголовок: Dima пишет: Типа та..


Dima пишет:

 цитата:
Типа так


Спасибо !
А как узнать кол-во строк в бровсе ?
Хочу размер дырки/на кол-во строк в бровсе и добавить в oBrw:nHeightCell

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




Пост N: 808
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 01.09.15 11:24. Заголовок: Andrey пишет:Хочу ра..


Andrey пишет:
 цитата:
Хочу размер дырки/на кол-во строк в бровсе и добавить в oBrw:nHeightCell


Если бы ровно делилось - не было бы дырки. Разницу надо относить к header, footer или менять размер по высоте tsb

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




Пост N: 5264
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 01.09.15 11:36. Заголовок: Andrey пишет: Хочу ..


Andrey пишет:

 цитата:
Хочу размер дырки/на кол-во строк в бровсе и добавить в oBrw:nHeightCell



типа так
 
ngh:=GetHole(oBrw)

END TBROWSE

oBrw:nHeightHead+=ngh+1



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




Пост N: 4490
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.09.15 14:22. Заголовок: Dima пишет: oBrw:n..


Dima пишет:

 цитата:
oBrw:nHeightHead+=ngh+1



Нет, так не пойдёт. Нужно ngh/ кол-во строк бровса !
Так как узнать кол-во строк в бровсе ?

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




Пост N: 5265
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 01.09.15 14:35. Заголовок: Andrey пишет: Так к..


Andrey пишет:

 цитата:
Так как узнать кол-во строк в бровсе ?


Да писали тебе уже 100 раз
oBrw:nrowcount()

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




Пост N: 4491
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.09.15 15:11. Заголовок: Dima пишет: oBrw:nr..


Dima пишет:

 цитата:
oBrw:nrowcount()


Спасибо !

Получилось ! Дырки больше нет !

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




Пост N: 4492
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.09.15 19:56. Заголовок: Показываю массив в T..


Показываю массив в Tsbrowse.
4 элемент массива логический T/F

Как сделать блок кода для цвета, чтобы с F была окраска другим цветом ?
oBrwF:SetColor( { 2 }, { ????

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




Пост N: 647
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 01.09.15 20:53. Заголовок: Andrey пишет: Как с..


Andrey пишет:

 цитата:
Как сделать блок кода для цвета, чтобы с F была окраска другим цветом ?
oBrwF:SetColor( { 2 }, { ????


Ты это серьезно , а что непонятно в примере который Dima неделю назад сюда же кидал показ/непоказ удаленных записей ?
Там же если Deleted() красилось серым. Заменить Deleted() на oBrw:aArray[oBrw:nAt][4] проблема ...
Или настолько лень читать что тебе же и пишут ...


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




Пост N: 4493
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.09.15 21:15. Заголовок: Haz пишет: oBrw:aAr..


Haz пишет:

 цитата:
oBrw:aArray[oBrw:nAt][4] проблема


Вот в этом и была проблема. Не понимал логику нумерации в массиве.
Теперь буду знать !

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

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


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




Пост N: 5266
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 01.09.15 21:22. Заголовок: Andrey пишет: Вот в..


Andrey пишет:

 цитата:
Вот в этом и была проблема. Не понимал логику нумерации в массиве.
Теперь буду знать !


Ага и потом спросишь тоже самое спустя месяц.
"Все" развивается по спирали. Похоже ты вышел на новый виток
Может тебе в отпуск нужно.....отдохни , сил наберись , мозги до кучи собери.

Andrey пишет:

 цитата:
Читать не лень. Не всегда нужно сразу что обсуждается, а потом забывается.


Так ты же и спрашиваешь а потом БАЦ и оно у тебя забылось. Зачем спрашивал то ?

PS
Ни чего личного.

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




Пост N: 4494
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.09.15 21:43. Заголовок: Dima пишет: Так ты ..


Dima пишет:

 цитата:
Так ты же и спрашиваешь а потом БАЦ и оно у тебя забылось. Зачем спрашивал то ?


Спросил, не ответили. Потом другим отвлекли на работе. Взялся опять за то что не сделал. Вот и ещё раз спрашиваю.
Всё как у всех, работа отвлекает от освоения нового...
Так что не обижайтесь, на повторное расспрашивание.
Спасибо за помощь !
А в отпуск бы я с удовольствием уехал... Пока не отпускает работа...
Новое приходиться осваивать уже дома, по вечерам-ночам...

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




Пост N: 648
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 01.09.15 22:06. Заголовок: Andrey пишет: Не п..


Andrey пишет:

 цитата:
Не понимал логику нумерации в массиве.
Теперь буду знать !


Хочется верить что надолго

Tsb_Config - твой же пример
 
FUNCTION ColorPicker(oBrw)
LOCAL aColor := {}

aColor := n2RGB(oBrw:aArray[oBrw:nAt][oBrw:nCell] ) // получить цвет из текущей ячейки
aColor := GetColor(aColor) // стандартное меню цвета
IF aColor[1] # NIL
// поместить новый цвет в текущую ячейку
oBrw:aArray[oBrw:nAt][oBrw:nCell] := RGB(aColor[1], aColor[2], aColor[3] )
ENDIF
RETURN NIL


что то быстро забывается
в отпуск

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




Пост N: 4495
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.09.15 22:15. Заголовок: Haz пишет: что то б..


Haz пишет:

 цитата:
что то быстро забывается


Забыл ! Точно, сам же делал...
Из совместного примера с тобой - \MiniGUI\SAMPLES\Advanced\Tsb_colors_2
Да, надо бы в отпуск...

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




Пост N: 4497
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 02.09.15 17:55. Заголовок: Остался еще непоняте..


Остался еще непонятен один вопрос.
Есть ли в TsBrowse переменная ведущая подсчёт кол-ва ОТОБРАЖАЕМЫХ записей в зависимости от условий показа ?

Если использовать (oBrw:cAlias)->(OrdKeyCount()) или oBrw:nLen то они показывают ОБЩЕЕ кол-во записей в индексе и базе.
Держать специально индекс (как в примере что дал Дима) - думаю не совсем верно, доп.расходы на ресурсы и под Leto - не нужно вообще.
Самому считать/пересчитывать - как будет вести на больших базах не знаю...
Как быть ?




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




Пост N: 650
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 02.09.15 18:33. Заголовок: Andrey пишет: Есть ..


Andrey пишет:

 цитата:
Есть ли в TsBrowse переменная ведущая подсчёт кол-ва ОТОБРАЖАЕМЫХ записей в зависимости от условий показа


TsBrowse тут не приделах , сам подумай где TS брать данные ?
Если ты знаешь как получить это число напрямую из RDD DBFCDX - используй его. Я знаю только метод тупого пересчета или OrdKeyCount() по условному индексу.
Другие RDD , например ADS позволяют дернуть количество записей в фильтре или получить нумератор в SQL запросе.

Andrey пишет:

 цитата:
Как быть ?


Если хочешь что бы было сделано хорошо - сделай сам. Так что или считай или индексуй сам

PS Вспомнил еще метод для подсчета удаленки - чтение файла FRead() блоками = длинне записи и подсчет '*' в заголовке записей



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




Пост N: 4499
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 02.09.15 18:48. Заголовок: Haz пишет: TsBrowse..


Haz пишет:

 цитата:
TsBrowse тут не приделах , сам подумай где TS брать данные ?


А завести в TsBrowse специальную функцию, чтобы возвращала кол-во записей в TsBrowse ?
Там же есть переменные типа oBrw:nLogicPos()

В примере Tsb_Config.prg - Григорий делал подсчет:
oBrw:bLogicLen := {|| iif( Empty(( oBrw:cAlias )->( DbFilter() )), ;
( oBrw:cAlias )->( LastRec() ), ;
( oBrw:cAlias )->( DbEval( { || M->nRecnoDbFilter++ }, &("{||" + ( oBrw:cAlias )->( DbFilter() ) + "}") ) ) ) }

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

Разве только у меня такая проблема стоит - показать общее кол-во выбранных записей ? Всем нужно !

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




Пост N: 651
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 02.09.15 18:51. Заголовок: Andrey пишет: А зав..


Andrey пишет:

 цитата:
А завести в TsBrowse специальную функцию


а нафиг она там нужна ?
с таким же успехом и сам посчитать можешь через dbEval()

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




Пост N: 652
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 03.09.15 11:54. Заголовок: Поясню почему "с..


Поясню почему "специальная функция" НЕ НУЖНА и бровс тут не причем.
1. Это НЕ функционал бровса который может и не знать какие условия (ограничения) наложены на базу ( фильтры, скопы, условные индексы , удаленные записи и пр и их комбинации ).
Функционал бровса отображать то что ему кормят. Эта задача RDD, который, в данном случае ее не поддерживает ни в каком виде.
2. При смене индекса, фильтра, скопа эта "специальная функция" должна будет пересчитать всю таблицу, а если в таблице несколько миллионов записей ? Все готовы ждать пока посчитает перед прорисовкой ?
3. Всем или не всем это нужно ... Мне например - нет , а если потребуется посчитаю своей функцией прямиком базе.
4. Гораздо полезнее была бы возможность авто суммы в футинги по выбранным колонкам и если кто то заглядывал в сырцы TS - та там это возможность закладывалась, но была брошена в силу п.1 и п.2.
5 Главное от этой "специальной функции" главное назначение бровса - отображать записи, ну никак не улучшается, только растет размер паразитного кода т.к. должен учитывать все особенности возможных RDD ( dbf, ado, array, text те - которые туда сейчас заложены ). Вообщем, рекомендую не путать "теплое" с "мягким" и наращивать функционал TS только полезными дополнениями именно для TS








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




Пост N: 4502
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.09.15 11:57. Заголовок: Haz пишет: Поясню п..


Haz пишет:

 цитата:
Поясню почему "специальная функция" НЕ НУЖНА и бровс тут не причем.


Спасибо !

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




Пост N: 4506
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.09.15 16:12. Заголовок: Tsbrowse открыт, на ..


Tsbrowse открыт, на экране записи есть.
Делаю условную индексацию, кол-во записей 0. На экране Tsbrowse пустая "фантомная" запись.
Как сделать, чтобы такая запись не отображалась ?

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




Пост N: 5269
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 03.09.15 21:21. Заголовок: Andrey пишет: Делаю..


Andrey пишет:

 цитата:
Делаю условную индексацию, кол-во записей 0


Сюда продублируй свой код который ниже индексации.

PS
Не думаю что там две сотни строк кода

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




Пост N: 4507
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.09.15 22:43. Заголовок: Dima пишет: Сюда пр..


Dima пишет:

 цитата:
Сюда продублируй свой код который ниже индексации.


Спасибо Дима !
Понял где копать. Сделал и заработало !

oBrw:Reset()
oBrw:aColumns[1]:cFooting := { || LTrim( Transform( (oBrw:cAlias)->(OrdKeyCount()), "### ###" ) ) }
oBrw:DrawFooters()
oBrw:Refresh(.T.)
Eval( oBrw:bChange )
Form_9.oBrw.Setfocus


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




Пост N: 822
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.09.15 13:27. Заголовок: Сделал в своем проек..


Сделал в своем проекте следующее h_tsbrowse.prg
 
...
Function _EndTBrowse ()
Local i, oBrw
if _HMG_BeginTBrowseActive
i := ascan ( _HMG_aControlHandles , _HMG_ActiveTBrowseHandle )
if i > 0
oBrw := _HMG_aControlIds [ i ]
oBrw:lRePaint := .t.
oBrw:Display()

oBrw:SetNoHole() // убрать дырку от oBrw:lNoHole

_HMG_ActiveTBrowseName := ""
_HMG_ActiveTBrowseHandle := 0
_HMG_BeginTBrowseActive := .F.
endif
endif
Return Nil
...

CLASS TSBROWSE ...
...
DATA lNoHole AS LOGICAL INIT .T. // убрать дырку при .T. (у себя сразу поставил .T., т.к. пока в основном тесты)
...
METHOD SetNoHole( lNoHole )
...

ENDCLASS
...
METHOD SetNoHole( lNoHole ) CLASS TSBrowse
Local nI, nK, nHeight
Local nHole := ::nHeight - ::nHeightHead - ::nHeightSuper - ;
::nHeightFoot - ::nHeightSpecHd - If( ! ::lNoHScroll, 16, 0 )

DEFAULT lNoHole := ::lNoHole

nHole -= ( Int( nHole / ::nHeightCell ) * ::nHeightCell )
nHole -= 1
nHeight := nHole

If lNoHole // убираем дырку

nI := If( ::nHeightSuper > 0, 1, 0 ) + ;
If( ::nHeightHead > 0, 1, 0 ) + ;
If( ::nHeightSpecHd > 0, 1, 0 ) + ;
If( ::nHeightFoot > 0, 1, 0 )

If nI > 0 // есть заголовки

nK := int( nHole / nI ) // на nI - заголовки разделим дырку

If ::nHeightSuper > 0
::nHeightSuper += nK
nHole -= nK
EndIf
If ::nHeightHead > 0
::nHeightHead += nK
nHole -= nK
EndIf
If ::nHeightSpecHd > 0
::nHeightSpecHd += nK
nHole -= nK
EndIf
If ::nHeightFoot > 0
::nHeightFoot += nHole
EndIf

Else // нет заголовков, уменьшаем размер Height

SetProperty(::cParentWnd, ::cControlName, "Height", ;
GetProperty(::cParentWnd, ::cControlName, "Height") - nHole)

EndIf

::Display()

EndIf

RETURN nHeight

пересобрал свои тесты - работает нормально.

Потестируйте у себя в проектах, а то может косяк есть. Для теста используйте функцию (после END TBROWSE):
FUNCTION SetNoHole( oBrw ) // убрать дырку
LOCAL nI, nK, nHeight
LOCAL nHole := oBrw:nHeight - oBrw:nHeightHead - oBrw:nHeightSuper - ;
oBrw:nHeightFoot - oBrw:nHeightSpecHd - ;
If( ! oBrw:lNoHScroll, 16, 0 )

nHole -= ( Int( nHole / oBrw:nHeightCell ) * oBrw:nHeightCell )
nHole -= 1
nHeight := nHole

nI := If( oBrw:nHeightSuper > 0, 1, 0 ) + ;
If( oBrw:nHeightHead > 0, 1, 0 ) + ;
If( oBrw:nHeightSpecHd > 0, 1, 0 ) + ;
If( oBrw:nHeightFoot > 0, 1, 0 )

If nI > 0 // есть заголовки

nK := int( nHole / nI ) // на nI - заголовки разделим дырку
If oBrw:nHeightSuper > 0
oBrw:nHeightSuper += nK
nHole -= nK
EndIf
If oBrw:nHeightHead > 0
oBrw:nHeightHead += nK
nHole -= nK
EndIf
If oBrw:nHeightSpecHd > 0
oBrw:nHeightSpecHd += nK
nHole -= nK
EndIf
If oBrw:nHeightFoot > 0
oBrw:nHeightFoot += nHole
EndIf

Else // нет заголовков, можно уменьшить размер tsb на размер nHole

SetProperty(oBrw:cParentWnd, oBrw:cControlName, "Height", ;
GetProperty(oBrw:cParentWnd, oBrw:cControlName, "Height") - nHole)

EndIf

oBrw:Display()

RETURN nHeight



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




Пост N: 823
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.09.15 11:27. Заголовок: SergKis пишет:Сделал..


SergKis пишет:
 цитата:
Сделал в своем проекте следующее h_tsbrowse.prg


немного подправил
 
в методе
If nI > 0 // есть заголовки

nK := int( nHole / nI ) // на nI - заголовки разделим дырку

If ::nHeightSuper > 0
::nHeightSuper += nK
nHole -= nK
EndIf
If ::nHeightSpecHd > 0
::nHeightSpecHd += nK
nHole -= nK
EndIf

If ::nHeightFoot > 0
::nHeightFoot += nK
nHole -= nK
EndIf
If ::nHeightHead > 0
::nHeightHead += nHole
EndIf

Else // нет заголовков, уменьшаем размер Height
...
в функции
If oBrw:nHeightSuper > 0
oBrw:nHeightSuper += nK
nHole -= nK
EndIf
If oBrw:nHeightSpecHd > 0
oBrw:nHeightSpecHd += nK
nHole -= nK
EndIf

If oBrw:nHeightFoot > 0
oBrw:nHeightFoot += nK
nHole -= nK
EndIf
If oBrw:nHeightHead > 0
oBrw:nHeightHead += nHole
EndIf

...


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




Пост N: 4523
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.09.15 20:56. Заголовок: Всем привет ! Вот на..


Всем привет !
Вот нашел проблему в Tsb с фонтами....
Делаю так:
Скрытый текст

Использую везде один фонт:
cFont := 'Tahoma' , nFontSize := ModeSizeFont()

Под ХР фонты грузяться правильно, под 8-кой нет !

Кто с таким сталкивался ?


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




Пост N: 5288
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 23.09.15 21:32. Заголовок: Andrey пишет: Кто с..


Andrey пишет:

 цитата:
Кто с таким сталкивался ?



gfilatov2002 пишет:

 цитата:
С учетом этого обсуждения изменил определение размера шрифта на

цитата:
_HMG_DefaultFontSize := Max( 9, GetDefaultFontSize () )



Не оно ?

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




Пост N: 827
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.09.15 08:25. Заголовок: Dima пишет:Не оно ? ..


Dima пишет:
 цитата:
Не оно ?


С фонтами есть не увязочки. см. h_windows.prg line 181
 
_HMG_ActiveFontName := hb_defaultValue( FontName, "" ) // вместо "" надо _HMG_DefaultFontName

_HMG_ActiveFontSize := hb_defaultValue( FontSize, 0 ) // вместо 0 надо _HMG_DefaultFontSize

см. h_tbrowse.prg
Function _DefineTBrowse (...)
...

if ( FontHandle := GetFontHandle( FontName ) ) != 0
aFont := GetFontParam(FontHandle)
FontName := aFont[1]
FontSize := aFont[2]
bold := aFont[3]
italic := aFont[4]
underline := aFont[5]
strikeout := aFont[6]
endif
...
т.е. если фонт не задали, то FontName NIL и FontSize NIL, попадаем с такими значениями на line 244
oBrw := TSBrowse():New( ControlName, nRow, nCol, nWidth, nHeight,;
см. метод New(...) line 1006
Default nRow := 0, ;
...
cFont := _HMG_ActiveFontName,;
nFontSize := _HMG_ActiveFontSize,;
... и далее
::cFont := cFont
::nFontSize := nFontSize
т.е. если не задали фонт на окне и TSB получим пустые значения в ::cFont, ::nFontSize
вернемся в Function _DefineTBrowse (...) line 303
if valtype(fontname) == "U"
FontName := _HMG_DefaultFontName
endif
if valtype(fontsize) == "U"
FontSize := _HMG_DefaultFontSize
endif
oBrw:hFont := _SetFont (ControlHandle,FontName,FontSize,bold,italic,underline,strikeout)
эти строки (без oBrw:hFont), наверно надо перенести, чтобы было
if ( FontHandle := GetFontHandle( FontName ) ) != 0
aFont := GetFontParam(FontHandle)
FontName := aFont[1]
FontSize := aFont[2]
bold := aFont[3]
italic := aFont[4]
underline := aFont[5]
strikeout := aFont[6]
else
if valtype(fontname) == "U"
FontName := _HMG_DefaultFontName
endif
if valtype(fontsize) == "U"
FontSize := _HMG_DefaultFontSize
endif

endif
тогда в создание TSB попадут не NIL значения, правда ::cFont используется только в METHOD Excel2(...), везде работа ::hFont, но для порядка ...


Andrey пишет:
 цитата:
Использую везде один фонт:


Почему установка
oBrw:hFont := _SetFont (ControlHandle,FontName,FontSize,bold,italic,underline,strikeout)

ADD COLUMN TO TBROWSE oBrw // добавить новую колонку в TBROWSE

и получение
hFont := oBrw:aColumns[ 1 ]:hFont // 1-cells font
If hFont != Nil
aFontTmp := GetFontParam(hFont)
AADD( aFonts, aFontTmp )
ENDIF
вместо Tahoma 18 дал, что видим - не понял.

попробуй сделать вариант
DEFINE FONT Font_Tsb FONTNAME "Tahoma" SIZE 18
что бы сработали строки
if ( FontHandle := GetFontHandle( FontName ) ) != 0
aFont := GetFontParam(FontHandle)
...


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




Пост N: 828
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.09.15 09:15. Заголовок: gfilatov2002 Предлаг..


gfilatov2002
Предлагаю для фонтов в class TsBrowse добавить
 
DATA hFontEdit AS NUMERIC // edition font
DATA hFontHead AS NUMERIC // header font
DATA hFontFoot AS NUMERIC // footer font
DATA hFontSpcHd AS NUMERIC // special header font

в метод METHOD TSColumn:New(...) line 290
было
::hFontHead := oBrw:hFont
::hFontFoot := oBrw:hFont
::hFontEdit := oBrw:hFont
::hFontSpcHd := oBrw:hFont

сделать
::hFontHead := If( empty(oBrw:hFontHead ), oBrw:hFont, oBrw:hFontHead )
::hFontFoot := If( empty(oBrw:hFontFoot ), oBrw:hFont, oBrw:hFontFoot )
::hFontEdit := If( empty(oBrw:hFontEdit ), oBrw:hFont, oBrw:hFontEdit )
::hFontSpcHd := If( empty(oBrw:hFontSpcHd), oBrw:hFont, oBrw:hFontSpcHd )

что бы после DEFINE TSBROWSE
уст. handle фонтов на все колонки


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




Пост N: 838
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 24.09.15 10:34. Заголовок: SergKis пишет: Пред..


SergKis пишет:

 цитата:
Предлагаю для фонтов в class TsBrowse добавить


Благодарю за дельное предложение
Уже добавил эти CLASSDATA ...

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




Пост N: 4524
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.09.15 14:54. Заголовок: SergKis пишет: т.е...


SergKis пишет:

 цитата:
т.е. если фонт не задали, то FontName NIL и FontSize NIL,



Да я же задаю:
DEFINE TBROWSE oBrw ;
.....
FONT cFont SIZE nTblFSize ;
.....
END TBROWSE


В доке так написано ! Или не верить что в доке написано ?
Или не так для Tsb задавать фонты нужно ?

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




Пост N: 829
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.09.15 15:31. Заголовок: Andrey А вот это: п..


Andrey
А вот это:
попробуй сделать вариант
DEFINE FONT Font_Tsb FONTNAME "Tahoma" SIZE 18
что бы сработали строки
if ( FontHandle := GetFontHandle( FontName ) ) != 0
aFont := GetFontParam(FontHandle)
...
т.е. работа по handle фонтов в tsb


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




Пост N: 4525
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.09.15 18:22. Заголовок: Вопрос по подвалам T..


Вопрос по подвалам Tsb.
Как идёт подсчёт итого по подвалам (один раз или несколько) ?

Вот такой код.
aFieldItog := { 4, "{ || ALLTRIM( Transform( GetCountFieldFilter('Prixod'), '999 999 999.99' ) ) }" } // для примера

IF nRecAll > 5000
// создаём окно ожидания с потоком
WaitThreadCreate( 'Подсчёт ИТОГО ...' )
ENDIF
FOR nI := 1 TO LEN(aFieldItog)
nCol := aFieldItog[nI,1]
cFooting := aFieldItog[nI,2]
oBrw:aColumns[nCol]:cFooting := &(cFooting)
NEXT
IF nRecAll > 5000
WaitThreadClose() // закрыть окно "ожидания"
ENDIF
oBrw:DrawFooters() // выполнить прорисовку подвала

GetCountFieldFilter() из Tsb_config

На маленьких базах всё летает, если больше 100 тыс. - начинаются тормоза...
Если убрать подсчёт, то тормозов нет.


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




Пост N: 5289
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 25.09.15 21:27. Заголовок: Andrey Ты снова о т..


Andrey
Ты снова о том о чем спрашивал.
Ну скажи зачем в журнале или что там у тебя , считать сумму по полю , если заведомо знаешь
что записей там может быть достаточно много ? Примени похожий подход к терминалке
и тоже будет тормоз.
Нужна цифирка нужная , сделай отчет или выведи цифирку в окно по какой то педали.
Не мучай бровс такими вещами иначе позже тебя будут мучать кошмары юзеры твоей программы


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




Пост N: 4526
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.09.15 23:22. Заголовок: Dima пишет: Не муча..


Dima пишет:

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


Нет, ты не прав !
Нашёл решение, не надо совать кодовый блок туда !
Нужно просто текст (расчёт) засовывать...
Вот так:
cVal := EVAL(&(cFooting))
oBrw:aColumns[nCol]:cFooting := cVal

И тормоза пропали !

А в терминалке, когда ввод записей идёт, внизу всегда итого стоит, чтобы сразу сравнивать, сколько накладных ввели и какая сумма ввода.
Да и по поиску: (за день, за месяц и т.д.) расчёт нужен.

Вообще мне скорость работы в Tsbrowse - нравится !
450 тыс.записей считает быстро, 3 сек. и итого по колонке уже есть. Юзер не будет напрягаться.
По сетке пока не знаю. Но там уже по другому делать надо - на Лето !!!

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




Пост N: 666
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 26.09.15 10:37. Заголовок: Andrey пишет: 450 т..


Andrey пишет:

 цитата:
450 тыс.записей считает быстро, 3 сек.


Андрей, сам TS ничего не считает, он показывает то что ему кормят. Если перед показом нужно оценить блок кода, то разумеется, на это уйдет время. Но TS то тут при чем ? Это тормозит алгоритм , по которому TS должен показывать значения.
PS Кстати 3 сек на 450 тыс записей - это тоже очень долго к примеру SQL запрос в ADS сумма по одному полю выполнится примерно за 100 - 200 мс. Это зависит от RDD от быстродействия компа и алгоритма, .... и, при чем тут TS
Это равносильно тому , если в :bChange присвоить { || Millisec(1000) } и утверждать что в TS тормозит навигация

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




Пост N: 4527
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.09.15 23:22. Заголовок: Пробую показ Tsb на ..


Пробую показ Tsb на разных разрешениях экрана.
Нашёл такую бяку при включённых больших фонтах в системе:


Как считать размеры при включённом LargeFonts() ?

////////////////////////////////////////////////////////////
// высота дырки внизу таблицы перед подвалом
Function GetHoleBrowse(cBrw)
Local nWorkHeight := cBrw:nHeight-cBrw:nHeightHead-cBrw:nHeightSuper-;
cBrw:nHeightFoot-cBrw:nHeightSpecHd-if(!cBrw:lNoHScroll,16,0)
RETURN (nWorkHeight-Int(nWorkHeight/cBrw:nHeightCell)* cBrw:nHeightCell)



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




Пост N: 671
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 28.09.15 11:05. Заголовок: Andrey пишет: Нашёл..


Andrey пишет:

 цитата:
Нашёл такую бяку


1 Вопрос :
Что сначала ?
1 Считаем размер дырки
2 Делаем все установки для бровса ( шрифты, высоты и пр )

Думаю сейчас порядок такой 1, 2

2 Вопрос :
Что покажет функция GetHoleBrowse() после oBrw:Display() ?



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




Пост N: 4528
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.09.15 12:52. Заголовок: Haz пишет: 1 Вопрос..


Haz пишет:

 цитата:
1 Вопрос :
Что сначала ?
1 Считаем размер дырки
2 Делаем все установки для бровса ( шрифты, высоты и пр )



Нет ! Делаю как положено:
1) Делаем все установки - ( шрифты, высоты и пр. )
2) oBrw:Display() // прорисовать второй раз для подсчёта остатка дырки
3) nHole := GetHoleBrowse(oBrw) - 1

При обычном шрифте считает правильно !
При включении БФ (большого фонта) в системе - считает неправильно !



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




Пост N: 673
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 28.09.15 14:02. Заголовок: Andrey пишет: Нет !..


Andrey пишет:

 цитата:
Нет ! Делаю как положено:


Андрей выведи чему равно то чего не хватает:
1) cBrw:nHeight := ?
2) cBrw:nHeightHead := 75
3) cBrw:nHeightSuper := ?
4) cBrw:nHeightFoot := 22
5) cBrw:nHeightSpecHd :=?
6) cBrw:nHeightCell := 50

ЗЫ визуально горизонтальный скроллер у тебя тоже 22 ( в расчете дырки он забит как 16 , 6 пикселей не много но есть )
Остального не видно из твоей картинки. Целиком ее дай с шапкой

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




Пост N: 4529
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.09.15 17:50. Заголовок: http://f6.s.qip.ru/~..


Вот, сделал...
1) Height=516
2) HeightHead=75
3) HeightSuper=0
4) HeightFoot=22
5) HeightSpecHd=0
6) HeightCell=50

GetHoleBrowse()=3
Кол-во строк=7




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




Пост N: 674
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 28.09.15 18:06. Заголовок: Andrey пишет: Вот, ..


Andrey пишет:

 цитата:
Вот, сделал...


при подстановке цифирь в функцию GetHoleBrowse(... ) дает 19 а никак не 3 !! проверил - реально 3
Ищи что не так передается
PS строк должно быть 8 а не 7
Скролл какой высоты ? в расчете дыры забит 16, а на кортинке явно больше чем подвал.
Короче капай в сторону высоты скрола и ставь эту высоту в свою функцию, тогда должно все срастись


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




Пост N: 4530
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.09.15 23:20. Заголовок: Haz пишет: Короче к..


Haz пишет:

 цитата:
Короче капай в сторону высоты скрола и ставь эту высоту в свою функцию, тогда должно все срастись


Спасибо БОЛЬШОЕ за совет ! Получилось !

Вот функция:
////////////////////////////////////////////////////////////
// высота дырки внизу таблицы перед подвалом
Function GetHoleBrowse(cBrw)
Local nWorkHeight, nHScroll := IIF( LargeFonts(), 24, 16)
nWorkHeight := cBrw:nHeight-cBrw:nHeightHead-cBrw:nHeightSuper-;
cBrw:nHeightFoot-cBrw:nHeightSpecHd-if(!cBrw:lNoHScroll,nHScroll,0)
RETURN (nWorkHeight-Int(nWorkHeight/cBrw:nHeightCell)* cBrw:nHeightCell)


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




Пост N: 4546
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.10.15 15:42. Заголовок: Привет всем ! Как по..


Привет всем !
Как получить массив уже созданного суперхидера в таблице ?

Поля таблицы знаю как получить.
For nI := 1 To oBrw:nColCount()
cPole := oBrw:aColumns[nI]:cHeading


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




Пост N: 832
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.10.15 16:33. Заголовок: Andrey так он образ..


Andrey
так он образуется:
AAdd( ::aSuperHead, { nFromCol, nToCol, uHead, nClrText, nClrBack, l3dLook, hFont, uBitMap, lAdjust, nLineStyle, nClrLine, nHAlign, nVAlign, lTransp } )


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




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


SergKis пишет:

 цитата:
так он образуется:
AAdd( ::aSuperHead, { nFromCol, nToCol, uHead, nClrText, nClrBack, l3dLook, hFont, uBitMap, lAdjust, nLineStyle, nClrLine, nHAlign, nVAlign, lTransp } )


А как тогда в цикле вывести значения суперхидера ?

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




Пост N: 833
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.10.15 19:32. Заголовок: Andrey Как ты получ..


Andrey
Как ты получаешь элементы массива {{...},{...},...} ?
глянь MsgDebug(oBrw:aSuperHead)

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




Пост N: 4548
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.10.15 20:19. Заголовок: SergKis пишет: глян..


SergKis пишет:

 цитата:
глянь MsgDebug(oBrw:aSuperHead)


Понял ! Спасибо БОЛЬШОЕ !

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




Пост N: 4555
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.10.15 05:02. Заголовок: Всем привет. Как сд..


Всем привет.

Как сделать вставку из буфера винды в поля таблицы по клавишам Shift+Insert ?

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




Пост N: 834
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 30.10.15 19:33. Заголовок: Andrey пишет:Как сде..


Andrey пишет:
 цитата:
Как сделать вставку из буфера винды в поля таблицы по клавишам Shift+Insert ?



 
...
oBrw:bUserKeys := {|nKy,nFl,oBr| UserKeyDown(nKy, nFl, oBr) }
...


STATIC FUNC UserKeyDown( nKey, nFlag, oBrw )
Local lRet, cBuf

If nKey == VK_INSERT .and. _GetKeyState( VK_SHIFT )
cBuf := System.Clipboard
// тут обработка cBuf
lRet := .F.
EndIf

RETURN lRet


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




Пост N: 4557
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 31.10.15 00:34. Заголовок: Спасибо БОЛЬШОЕ ! :..


Спасибо БОЛЬШОЕ !
Только наверное это нужно делать в GET - когда ячейка уже редактируется.

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




Пост N: 4559
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.11.15 18:01. Заголовок: Как сделать в САМ..


Как сделать в САМОМ TSBROWSE при редактировании ячеек (только при УЖЕ редактировании, при наличии курсора)
вставку/сохранения кармана WINDOWS как во всех других приложениях
по клавишам Shift+Insert/Ctrl+Insert и Ctrl+V/Ctrl+С ?



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




Пост N: 684
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 05.11.15 20:27. Заголовок: Andrey пишет: Как с..


Andrey пишет:

 цитата:
Как сделать в САМОМ TSBROWSE при редактировании ячеек (только при УЖЕ редактировании, при наличии курсора)
вставку/сохранения кармана WINDOWS как во всех других приложениях
п


И так работает , ничего не делел

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




Пост N: 4560
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.11.15 21:27. Заголовок: Haz пишет: И так ра..


Haz пишет:

 цитата:
И так работает , ничего не делел


А у меня нет...
MiniGUI\SAMPLES\Advanced\Tsb_config - в текстовое поле пытаюсть вставить что в буфере, не вставляется.
А в Фаре вставляется...

Где и что править ?

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




Пост N: 685
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 05.11.15 21:37. Заголовок: Andrey пишет: не вс..


Andrey пишет:

 цитата:
не вставляется.


в текстовом поле жму Enter - входит в режим GET. потом Shift+Ins CTRL+V и вставляется то что в буфере обмена было.
Ничего не правил вообще, продвинутые (которым лень набирать) пользователи с этим работают не один год

PS тестил именно в TSB_Config

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




Пост N: 4561
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.11.15 21:49. Заголовок: Хрень какая то... В ..


Хрень какая то...
В мемо-поле (колонка List) - всё вставляется.
Если берем текстовую колонку - Ctrl+V/Ctrl+С РАБОТАЕТ, а Shift+Insert/Ctrl+Insert НЕТ....
У меня 8.1
Буду пробовать на других системах...

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




Пост N: 835
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.11.15 21:51. Заголовок: подтверждаю Ctrl+V т..


подтверждаю Ctrl+V тоже работатет. Tsb_config

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




Пост N: 5332
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 05.11.15 21:52. Заголовок: Shift+INS у меня тож..


Shift+INS у меня тоже не сработал в этом примере , меняется только форма курсора , CTRL+V пашет

зы
Win7

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




Пост N: 686
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 05.11.15 21:53. Заголовок: Andrey пишет: Shif..


Andrey пишет:

 цитата:
Shift+Insert/Ctrl+Insert НЕТ....



Да с шифтом не работает . Сергей пару постов назад сказал куда копать ...
Лови нажатие шифт+инс и пихай содержимое буфера

Хотя .... ловить кнопки скорее надо уже в объекте oGet который создался в бровсе после нажатия ентер

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




Пост N: 4562
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.11.15 22:21. Заголовок: Haz пишет: Лови наж..


Haz пишет:

 цитата:
Лови нажатие шифт+инс и пихай содержимое буфера

Хотя .... ловить кнопки скорее надо уже в объекте oGet который создался в бровсе после нажатия ентер



А нельзя сделать это в самих исходниках TsBrowse ?
Чтобы не делать велосипед... Всем же это нужно !

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




Пост N: 5333
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 05.11.15 22:26. Заголовок: Andrey пишет: Чтобы..


Andrey пишет:

 цитата:
Чтобы не делать велосипед... Всем же это нужно !


Не знаю как всем , лично мне хватает стандарта CTRL+V

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




Пост N: 687
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 05.11.15 23:17. Заголовок: Тоже в основном поль..


Тоже в основном пользую ctrl-c/v
До ins тянуться через всю клаву надо ... лень

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




Пост N: 4563
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.11.15 15:47. Заголовок: Работаю с SetArrayTo..


Работаю с SetArrayTo()
SergKis писал где-то, что после ввода в ячейку таблицы (для отображения границ ячеек таблицы) нужно делать oBrw1:Refresh(FALSE)

А в SetArrayTo() - это oBrw1:Refresh(FALSE) не работает !

oCol:bPostEdit := { || AADD( aStatExit, nYear ), AADD( aStatXTbr, cTbrName ),;
MyPostEdit(), oBrw1:Refresh(FALSE) }

Что делать или что использовать взамен ?




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




Пост N: 688
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 06.11.15 16:54. Заголовок: Andrey пишет: в Se..


Andrey пишет:

 цитата:
в SetArrayTo() - это oBrw1:Refresh(FALSE) не работает



Не совсем понял про :SetArrayTo(), мне казалось этот метод просто позволяет сразу назначать шрифты , размеры , хидинги и футинги при инициализации массива.
В отличие от :SetArray() , где это все нужно делать позже.

как связаны разные методы :Refresh(...) и :SetArrayTo(...) не уловил




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




Пост N: 836
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 06.11.15 18:43. Заголовок: Andrey пишет:SergKis..


Andrey пишет:
 цитата:
SergKis писал где-то, что после ввода в ячейку таблицы (для отображения границ ячеек таблицы) нужно делать oBrw1:Refresh(FALSE)


Запусти Tsb_array_2 и в строке ниже первой включи коректировку по Enter и пройди по нескольким полям и увидишь, что не прорисовываются линии между тек. строкой и предыдущей. Если воставить в bPostedit oBrw:Refresh(.F.), то линии прорисуются. Вот о чем я говорил. Возможно на dbf будет такое же поведение - не помню

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




Пост N: 848
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 06.11.15 21:33. Заголовок: SergKis пишет: про..


SergKis пишет:

 цитата:
пройди по нескольким полям и увидишь, что не прорисовываются линии между тек. строкой и предыдущей.


Благодарю за наводку
Вроде удалось поправить прорисовку разделительной линии в методах GoRight и GoDown

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




Пост N: 4569
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 09.11.15 14:54. Заголовок: Делаю растяжку после..


Делаю растяжку последней колонки в SetArrayTo()
nColSpace := LEN(aDim)
oBrw1:nAdjColumn := nColSpace // растянуть колонку до заполнения пустоты в бровсе справа

Не растягивается.... Почему ?


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




Пост N: 5341
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.11.15 15:08. Заголовок: Andrey Длина массив..


Andrey
Длина массива aDim равна кол-ву видимых колонок ?

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




Пост N: 4570
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 09.11.15 15:19. Заголовок: Dima пишет: Длина м..


Dima пишет:

 цитата:
Длина массива aDim равна кол-ву видимых колонок ?


Да ! На экране 14 колонок, последняя пустая и некрасиво из-за этого.

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




Пост N: 4580
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.11.15 14:33. Заголовок: Привет всем ! Опять ..


Привет всем !
Опять небольшая проблема с цветами в SetArrayTo().

Делаю так:

LOCAL oBrw1
.......
oBrw1:SetColor( { 2 }, { { |a,b,o| iif( Month(o:aArray[o:nAt][5]) % 2 == 0, ;
MyRGB( {0, 204, 255} ) ,;
MyRGB(aBackClr) ) } } )

Потом беру эти цвета помещаю в массив
AADD( aStatColorTable, { oBrw1:cControlName, 1, oBrw1:nClrText, NIL } )
AADD( aStatColorTable, { oBrw1:cControlName, 2, MyRGB({0,204,255}), MyRGB(aBackClr) } )

и записываю в ини-файл:
ObjTable_1={"Set_Columns1", 1, 0, NIL}
ObjTable_2={"Set_Columns1", 2, 16763904, 15515551}
ObjTable_3={"Set_Columns1", 13, 255, NIL}

Потом в ON INIT формы делаю считывание из ини-файла (массив aIni4Clr) и вывожу цвет в бровс:
LOCAL oBrw52
...............
oBrw52 := gBrw52(cForm,"Set_Columns1") // считываю объект SetArrayTo() в локал переменную
FOR nJ := 1 TO LEN(aIni4Clr)
nVal := aIni4Clr[nJ,2]
nColor := aIni4Clr[nJ,3]
nColor2 := aIni4Clr[nJ,4]
IF nVal == 2
oBrw52:SetColor( { 2 }, { { |a,b,o| iif( Month(o:aArray[o:nAt][5]) % 2 == 0, ;
nColor , nColor2 ) } } )
ELSE
IF nColor2 == NIL // если один цвет используется
oBrw52:SetColor( { nVal }, { { || nColor } } )
ELSE
oBrw52:SetColor( { nVal }, { { || { nColor , nColor2 } } } )
ENDIF
ENDIF
NEXT

Цвета становятся ну просто светофор ....

Чего я не учитываю ? Какая тонкость при восстановлении цветов ?
Уже 3 день бьюсь... Помогите пожалуйста.

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




Пост N: 696
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 20.11.15 14:58. Заголовок: Andrey пишет: Чего ..


Andrey пишет:

 цитата:
Чего я не учитываю


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

 цитата:
ну просто светофор



ЗЫ.

 цитата:
Опять небольшая проблема с цветами в SetArrayTo().

не верно локализован источник проблемы

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




Пост N: 4581
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.11.15 15:19. Заголовок: Haz пишет: В блок к..


Haz пишет:

 цитата:
В блок кода передаются локальные переменные и когда этот блок исполняется


Почему ? При первом построении тоже использую локал:
LOCAL aBackClr

Сделал так: PRIVATE nTsbColor, nTsbColor2
Ну и дальше все переменные переименовал.
Всё равно цвета - светофор !



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




Пост N: 697
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 20.11.15 15:33. Заголовок: При чем тут local ....


При чем тут local ... Private
говорю в блоке кода , к примеру в этом oBrw52:SetColor( { nVal }, { { || nColor } } ) .
Чему равно nColor в момент прорисовки бровса при навигации по нему ?
100000% что не значению, которое было в цикле инициализации .... вот этим значением и рисует

ЗЫ сделай так и удивись
oBrw52:SetColor( { nVal }, { { || msgDebug(nVal, nColor), nColor } } )

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




Пост N: 4582
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.11.15 15:53. Заголовок: Haz пишет: ЗЫ сдела..


Haz пишет:

 цитата:
ЗЫ сделай так и удивись
oBrw52:SetColor( { nVal }, { { || msgDebug(nVal, nColor), nColor } } )



Удивился...
А как тогда правильно сделать ?

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




Пост N: 698
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 20.11.15 15:55. Заголовок: Andrey пишет: А как..


Andrey пишет:

 цитата:
А как тогда правильно сделать ?



делал же ... TSB_CONFIG глянь

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




Пост N: 4583
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.11.15 16:12. Заголовок: Haz пишет: делал же..


Haz пишет:

 цитата:
делал же ... TSB_CONFIG глянь


Да, только там цветной блок попроще был.


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




Пост N: 699
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 20.11.15 16:18. Заголовок: Andrey пишет: Да, т..


Andrey пишет:

 цитата:
Да, только там цветной блок попроще был.


какая разница какой блок, важно как реализовано .
или тут http://clipper.borda.ru/?1-1-0-00000399-000-240-0 твой пост N 3712 и два ответа ниже тоже с этой же ошибкой при вызоаве блока связаны

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




Пост N: 4584
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.11.15 17:32. Заголовок: Понял... Спасибо ! ..


Понял... Спасибо !

Кстати насчёт Tsb_config.
Можно исправить ( класс oBrw:Excel2(...) h_tbrowse.prg) вывод чисел ?

Если использовать для вывода в таблице формат "999" или "@Z 999", то в Экселе колонка с числами - пустая.

В Tsb_config пришлось ставить:
IF aPole[nI,6] <> "N" // не использовать шаблон для числовых полей, т.к.
// при печати в Excel поле будет пустое !!!
oBrw:aColumns[nJ]:cPicture := aPole[nI,4] // шаблон колонки
ENDIF


Сейчас такая же беда в рабочих программах....

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




Пост N: 4590
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.12.15 13:38. Заголовок: Ещё вопрос созрел по..


Ещё вопрос созрел по Tsbrowse.
Как можно запретить юзеру смену колонок местами, но оставить возможность юзеру изменить размеры колонок ?
Нашёл флаги:
oBrw:lNoMoveCols := TRUE
oBrw:lMChange := .F.

Но они запрещают и изменение размеров колонок...


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




Пост N: 705
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 03.12.15 14:15. Заголовок: Andrey пишет: Как м..


Andrey пишет:

 цитата:
Как можно запретить юзеру смену колонок местами


Простого способа похоже нет
-или менять исходник , вводя и контролируя новые флаги
-или на ON DRAW повесить процедуру, которая будет проверять нужный порядок колонок и приводить его в норму если юзер там чего поменял

Посмотрел исходник и нашел один костыль ...
Если у колонки есть суперхидер то размеры менять можно , а двигать нельзя.
Сделай один суперхидер на все колонки с высотой 0 и будет тебе счастье ( правда супрхид будет не нулевой высоты )

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




Пост N: 4591
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.12.15 15:27. Заголовок: Haz пишет: Если у к..


Haz пишет:

 цитата:
Если у колонки есть суперхидер


У меня есть он в программе.

Haz пишет:

 цитата:
нашел один костыль


Какой он и как его использовать ?

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




Пост N: 706
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 03.12.15 15:48. Заголовок: Andrey пишет: Какой..


Andrey пишет:

 цитата:
Какой он и как его использовать ?



читай по слогам

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



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




Пост N: 4592
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.12.15 16:10. Заголовок: Суперхидер в таблице..


Суперхидер в таблице есть с 1 по 13 колонки высотой 38.
Колонки местами меняются.
Ставлю запрет на обмен колонками oBrw:lNoMoveCols := TRUE или oBrw:lMChange := .F.
Колонки местами не меняются и нельзя уже изменить размер колонок !


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




Пост N: 707
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 03.12.15 16:20. Заголовок: Andrey пишет: Супер..


Andrey пишет:

 цитата:
Суперхидер в таблице есть.



Убери его , и добавь только такой ( для колонки 1 )
oBrw:AddSuperHead( 1 , 1 , '' )
После этого все колонки перестанут меняться местами
PS. Говорю же , это "костыль"
На счет всех, я не прав, не проверял а на одну работает!

Советую лучше сюда смотреть
-или менять исходник , вводя и контролируя новые флаги
-или на ON DRAW повесить процедуру, которая будет проверять нужный порядок колонок и приводить его в норму если юзер там чего поменял

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




Пост N: 4593
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.12.15 17:21. Заголовок: Понял ! Спасибо БОЛЬ..


Понял ! Спасибо БОЛЬШОЕ !

Haz пишет:

 цитата:
Советую лучше сюда смотреть
-или менять исходник , вводя и контролируя новые флаги
-или на ON DRAW повесить процедуру, которая будет проверять нужный порядок колонок и приводить его в норму если юзер там чего поменял


Боюсь пока не осилить данное предложение. Опыта пока маловато...

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




Пост N: 708
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 04.12.15 11:11. Заголовок: Andrey пишет: Боюсь..


Andrey пишет:

 цитата:
Боюсь пока не осилить данное предложение. Опыта пока маловато.


какой тут опыт нужен ?
Используется имя колонки, если оно не присвоено - работать не будет
 
// Сохранения порядка колонок по их именам
Func SaveColPos( oBrw )
Local aSave := {}
aEval( oBrw:aColumns, { |oCol| AADD( aSave, oCol:cName ) } )
Return aSave

// Восстановление порядка колонок по их именам
Func RestColPos( oBrw, aSave )
aEval( aSave, { |cName| oBrw:MoveColumn( oBrw:nColumn(cName), Ascan( aSave, cName)) } )
Return nil


При первой прорисовке бровса запоминаешь порядок в массив
Проверку на соответствие текущего порядка и сохраненного в массиве уверен сделаешь.
И если порядок нарушен по ON DRAW восстанавливаешь как oBrw:bOnDraw := {|| IF( ЕслиНарушен(), RestColPos( oBrw, aSave), NIL ) }
Пользователь после этого может таскать колонки куда хочет, но при этом быстро устает т.к. они сразу возвращаются на место.
PS. НЕ ПРОВЕРЯЛ , просто описал идею. Должна работать
PPS проверку нужно в том же он драу поводить )))

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




Пост N: 4600
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 07.12.15 14:57. Заголовок: Всем привет. Как зам..


Всем привет.
Как заменить ОДНУ картинку в уже созданной таблице ?
Допустим есть
LOCAL ahBmpPlus := { LoadImage( "bFolder48.bmp" ) }
LOCAL ahBmpMinus:= { LoadImage( "bFolder48x2.bmp" ) }
.....
// создать первую колонку с картинкой
ADD COLUMN TO oBrwP HEADER "" ;
DATA { || ahBmpPlus } ;
SIZE 50 BITMAP ;
.....
EDITABLE
oBrwP:aColumns[1]:bPrevEdit := {|| MenuPlusMinus(ahBmpPlus,ahBmpMinus), FALSE }
...............

Function MenuPlusMinus(ahBmpPlus,ahBmpMinus)
.....
// вот здесь заменить одну картинку на другую. Как написать ?





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




Пост N: 4605
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.12.15 14:01. Заголовок: Всем привет ! Пытаюс..


Всем привет !
Пытаюсь для отладки добавить в свой проект h_tbrowse.prg
Не собирается проект:
Error: Unresolved external '_HB_FUN_GETSYSMETRICS' referenced from W:\HB_PROJECT\


Откуда взять эту функцию GETSYSMETRICS ?

Раньше собиралось всё нормально.

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




Пост N: 5404
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 14.12.15 15:21. Заголовок: Andrey пишет: Откуд..


Andrey пишет:

 цитата:
Откуда взять эту функцию GETSYSMETRICS ?


в TSBROWSE.CH он заявлен

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




Пост N: 4606
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.12.15 15:35. Заголовок: Dima пишет: в TSBRO..


Dima пишет:

 цитата:
в TSBROWSE.CH он заявлен


Положил этот файл в свой проект. Всё равно пишет, нет такой функции...

P.S. Удалил все obj - проект собрался !

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




Пост N: 4607
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.12.15 15:55. Заголовок: Отлавливаю ошибку дл..


Отлавливаю ошибку для SetArrayTo().
Вот такая ошибка:
Error BASE/1122 Неверный аргумент: TRANSFORM
Called from TRANSFORM(0)
Called from TSBROWSE:DRAWLINE(2925)
Called from TSBROWSE:PAINT(8713)
Called from TSBROWSE:DISPLAY(2306)
Called from _ENDTBROWSE(367)
Called from CREATEBROWSEUSE(430)


Лезу в исходник и хочу там установить просмотр.
Как это сделать, чтобы ручками не считать какую строку ProcName(5) смотреть ?
IF UPPER(ProcName( 5 )) == "CREATEBROWSEUSE"
MsgDebug(uData, VALTYPE(uData), cPicture)
ENDIF
uData := If( uData == NIL, "", Transform( uData, cPicture ) )




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




Пост N: 4608
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.12.15 16:21. Заголовок: Странно, отладка раб..


Странно, отладка работает ОДНУ строку из массива, а потом прога сваливается:
Called from TRANSFORM(0)
Called from TSBROWSE:DRAWLINE(2928)
Called from TSBROWSE:PAINT(8701)
Called from TSBROWSE:DISPLAY(2306)
Called from _ENDTBROWSE(367)
Called from CREATEBROWSEUSE(430)
Called from FORM_USEDBF(220)

.....
Else
IF UPPER(ProcName( 5 )) == "CREATEBROWSEUSE"
MsgDebug(uData, VALTYPE(uData), cPicture)
ENDIF
uData := If( uData == NIL, "", Transform( uData, cPicture ) ) // строка 2928
EndIf

Как поймать ошибку ?

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




Пост N: 5405
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 14.12.15 16:53. Заголовок: Andrey Сунь массив ..


Andrey
Сунь массив в MsgDebug и позырь что в нем живет.

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




Пост N: 4609
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.12.15 17:01. Заголовок: Dima пишет: Сунь ма..


Dima пишет:

 цитата:
Сунь массив в MsgDebug и позырь что в нем живет.



Позырил...
До этого смотрел, не увидел.
Один элемент вместо строки - массив.... И как такие ошибки в будущем отлавливать ?
Может проверку какую сделать в самом исходнике ?
Function SetArrayTo( ControlName, ParentForm, Arr, uFontHF, aHead, aSizes, uFooter, aPicture, aAlign, aName )
Local ix, oBrw
ix := GetControlIndex (ControlName,ParentForm)
oBrw:= _HMG_aControlIds [ix]
oBrw:SetArrayTo(Arr, uFontHF, aHead, aSizes, uFooter, aPicture, aAlign, aName)
Return oBrw


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




Пост N: 5406
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 14.12.15 17:03. Заголовок: Andrey пишет: И как..


Andrey пишет:

 цитата:
И как такие ошибки в будущем отлавливать ?


Чрезмерно не косячить при написании

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




Пост N: 4668
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.01.16 12:18. Заголовок: Привет всем... Делаю..


Привет всем...
Делаю новую таблицу на Tsbrowse.
Ширину таблицы меняю в зависимости от окна, как Tsb_config.
Скрытый текст

При изменения размера окна мышкой, какие то артефакты вылазят:


Как исправить ?

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




Пост N: 4669
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.01.16 15:51. Заголовок: Добился такого же эф..


Добился такого же эффекта (расползания подвала таблицы) в примере MiniGUI\SAMPLES\Advanced\Tsb_config
Разница небольшая:
1) Окно WINDOWTYPE STANDARD TOPMOST ;

При первом запуске "расползание подвала" нет. Если мышкой перейти в ячейки, а потом попробовать изменить размер экрана, то начинается "расползание подвала" :


Вот исправленный проект с демонстрацией - https://cloud.mail.ru/public/FBzx/BzqAUUxZz
Вопрос остается таким же: как исправить (убрать расползание подвала таблицы ) ?

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




Пост N: 840
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.01.16 19:41. Заголовок: Andrey пишет: распол..


Andrey пишет:
 цитата:
расползание подвала таблицы


Это эффект фантомной строки (обсуждали в теме о ней), т.е. если строк сделать больше, высоту tsb меньше и увеличивать постепенно, проявляется фант. строка, когда строк становится меньше - остается прорисованный ранее подал, т.е. нет метода очистить часть экрана, после факт. строк :nRowCount() и подвалом.
Как лечить ?
Не менять высоту tsb, если реальная высота (расчет см. в SetNoHole(oBrw) ) всех строк и заголовков\подвалов меньше\равно new высоте после Resize окна и в расчете new высоты использовать :nRowCount() * :nHeightCell + высоты заголовков\подвалов (что бы те было фантомной строки).


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




Пост N: 753
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 25.01.16 20:51. Заголовок: SergKis пишет: Это ..


SergKis пишет:

 цитата:
Это эффект фантомной строки


Сергей, тут другая проблема. Глядя на скрины до фантома еще далеко т.к. строк в таблице мало. Тут лекарство к другому месту прикладывать надо.
Andrey пишет:

 цитата:
Как исправить ?


Во первых внимательно посмотреть на код и задать себе вопрос по каждой строке зачем это написано.
1)
 
// По методу Move() запускается ReSize() - описание параметров см. ???,

По этому методу никакой Resize() не запускается, в исходниках метод 4 строки , где там Resize()?, кокое описание параметров
 
METHOD Move( nTop, nLeft, nWidth, nHeight, lRepaint ) CLASS TControl
MoveWindow( ::hWnd, nTop, nLeft, nWidth, nHeight, lRepaint )
::CoorsUpdate()
return nil


2) это зачем ? есть же простой и понятный метод Refresh(.T.)
  
//oBrw:Display()
oBrw:Paint() // Иначе не перерисовываются вертикальные разделители


3) в примере ColorConfig еще какой то вызов CorrectFirstLast() ? Какого художника ... он вообще нужен ? Это была не совсем удачная попытка избавиться от залипания последней строки, как показала практика - не помогает. В теме про дырку , все расписали как надо с этим бороться и Сергей и Дима там все доступно рассказали

Резюме
Убрать неправильные комменты
вместо паинта и дисплая поставить рефреш( Т)
и чуть не забыл ... повыкидывать везде этот корректфёстласт

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




Пост N: 841
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.01.16 21:13. Заголовок: Haz Я использовал ..


Haz
Я использовал
 

FUNCTION ResizeBrowse()
LOCAL cForm := oBrw:cParentWnd
LOCAL hWnd := GetFormHandle(cForm)
LOCAL nHStBar := GetWindowHeight(GetControlHandle('STATUSBAR', cForm)) // height StatusBar
Local actpos:={0,0,0,0}
Local i, w, h

GetClientRect(hWnd, actpos)
w := actpos[3]-actpos[1]
h := actpos[4]-actpos[2] - nHStBar - oBrw:nTop

IF w !=0 .and. h != 0
SetProperty(oBrw:cParentWnd, oBrw:cControlName, "Enabled", .F.)
_SetControlHeight( oBrw:cControlName, oBrw:cParentWnd, h)
_SetControlWidth ( oBrw:cControlName, oBrw:cParentWnd, w)
oBrw:Paint()
SetProperty(oBrw:cParentWnd, oBrw:cControlName, "Enabled", .T.)
// oBrw:Display()
Endif

Return Nil

все видно в работе exe, как, я описал


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




Пост N: 754
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 25.01.16 21:26. Заголовок: SergKis пишет: oB..


SergKis пишет:

 цитата:
oBrw:Paint()
SetProperty(oBrw:cParentWnd, oBrw:cControlName, "Enabled", .T.)
// oBrw:Display()



Сергей, в примере у Андрея Tsb_config это код видимо с тебя списан , как и написал Андрей - в этом же примере приводит к залипанию футингов. При замене на банальный рефреш - залип исчезает

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




Пост N: 842
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.01.16 21:37. Заголовок: Haz пишет:банальный ..


Haz пишет:
 цитата:
банальный рефреш - залип исчезает


работает
я пробнул display() - не то (а с фантомной решалось через это), а Paint() перерисовал, но криво, на рефреш и не подумал - оказывается зря

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




Пост N: 4670
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.01.16 23:42. Заголовок: Haz пишет: Сергей, ..


Haz пишет:

 цитата:
Сергей, в примере у Андрея Tsb_config это код видимо с тебя списан


Мне этот код Григорий помогал писать.
Если окно MAIN - работает без проблем.
Я сделал окно WINDOWTYPE STANDARD - появился этот эффект.
CorrectionFirstLast() убрал совсем, я Григорию предлагал новую версию этого примера для библиотеки, он не захотел.
Из-за этого в старом примере и делал этот эффект, чтобы всем другим было понятней, от чего я исходил.

Haz пишет:

 цитата:
При замене на банальный рефреш - залип исчезает



Да действительно исчез. Спасибо БОЛЬШОЕ !

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




Пост N: 755
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 26.01.16 10:55. Заголовок: Andrey пишет: Из-за..


Andrey пишет:

 цитата:
Из-за этого в старом примере и делал этот эффект, чтобы всем другим было понятней, от чего я исходил.


Андрей , Вот это главное.
Не важно кто кому помогал, но если пример для обучения тех кто вообще впервые минигуи видит , то там не стоит оставлять комментарии которые могут запутать.
Пример у тебя получился объемный и сложный, всего не углядишь и косяки могут вылезти внезапно. По мне , так вместо одного глобального примера - лучше 10 маленьких узко тематических И для понимания проще и поиграться проще при изучении. Вот ресайз тока что накидал , ничего лишнего и все понятно
 
#include "minigui.ch"
#include "tsbrowse.ch"

FUNC Main()
Local aArray := { ;
{'AAAAAAAAAAAAAAAA', 1, Date() }, ;
{'BBBBBBBBBBBBBBBB', 2, Date() }, ;
{'CCCCCCCCCCCCCCCC', 3, Date() }, ;
{'DDDDDDDDDDDDDDDD', 4, Date() }, ;
{'EEEEEEEEEEEEEEEE', 5, Date() }, ;
{'FFFFFFFFFFFFFFFF', 6, Date() }, ;
{'GGGGGGGGGGGGGGGG', 7, Date() } ;
}

DEFINE WINDOW Form_1 ;
AT 0,0 ;
WIDTH 400 ;
HEIGHT 300 ;
TITLE "TsBrowse ReSize Test" ;
MAIN ;
FONT 'Tahoma' SIZE 9;
ON SIZE { || ResizeBrw( oBrw )} ;
ON MINIMIZE { || ResizeBrw( oBrw )} ;
ON MAXIMIZE { || ResizeBrw( oBrw )}


DEFINE TBROWSE oBrw ;
AT 5,5 ;
OF Form_1 ;
WIDTH GetProperty("Form_1", 'Width') - 25 ;
HEIGHT GetProperty("Form_1", 'Height') - 50 ;
FONT "Tahoma" ;
SIZE 9 ;
GRID ;
EDIT

oBrw:SetArray( aArray, .T. )
oBrw:nAdjColumn := 1

oBrw:aColumns[1]:cFooting := "STRING"
oBrw:aColumns[2]:cFooting := "NUM"
oBrw:aColumns[3]:cFooting := "DATE"

oBrw:aColumns[1]:nFAlign := DT_LEFT
oBrw:aColumns[2]:nFAlign := DT_LEFT
oBrw:aColumns[3]:nFAlign := DT_CENTER


oBrw:lFooting := .T.
oBrw:lDrawFooters := .T.
oBrw:nHeightFoot := 20
oBrw:DrawFooters()


END TBROWSE

END WINDOW

ACTIVATE WINDOW Form_1

RETURN NIL

FUNC ReSizeBrw( oBrw )
local nTop := GetProperty("Form_1", 'Row') + 5, ;
nLeft := GetProperty("Form_1", 'Col') + 5, ;
nWidth := GetProperty("Form_1", 'Width') - 25, ;
nHeight := GetProperty("Form_1", 'Height') - 50

oBrw:Move( nTop,nLeft, nWidth, nHeight, .T. )
Return oBrw:Refresh(.T.)







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




Пост N: 4671
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.01.16 12:46. Заголовок: Haz пишет: По мне ,..


Haz пишет:

 цитата:
По мне , так вместо одного глобального примера - лучше 10 маленьких узко тематических И для понимания проще и поиграться проще при изучении. Вот ресайз тока что накидал , ничего лишнего и все понятно



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

Когда делал свой пример, много не понимал. Что сделал - то сделал, нужно править.
Выкладывал на форуме пробную версию - писал: комментарии и исправления приветствуются !

Haz пишет:

 цитата:
nTop := GetProperty("Form_1", 'Row') + 5, ;
nLeft := GetProperty("Form_1", 'Col') + 5,



Только вместо этого лучше oBrw:nLeft ,oBrw:nTop ( новичку понятней буде как можно делать)

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




Пост N: 4672
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.01.16 12:54. Заголовок: SergKis пишет: IF w..


SergKis пишет:

 цитата:
IF w !=0 .and. h != 0
SetProperty(oBrw:cParentWnd, oBrw:cControlName, "Enabled", .F.)
_SetControlHeight( oBrw:cControlName, oBrw:cParentWnd, h)
_SetControlWidth ( oBrw:cControlName, oBrw:cParentWnd, w)
oBrw:Paint()
SetProperty(oBrw:cParentWnd, oBrw:cControlName, "Enabled", .T.)
// oBrw:Display()
Endif



Уточни пожалуйста для чего это нужно ?


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




Пост N: 756
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 26.01.16 14:51. Заголовок: Andrey пишет: Уточн..


Andrey пишет:

 цитата:
Уточни пожалуйста для чего это нужно ?


так тут все и так все понятно
oBrw:cParentWnd вернет имя формы в которой бровс определен
oBrw:cControlName вернет имя самого бровса
А дальше если ширина и высота после ресайса больше нуля, то бровсу говорят Enabled := F, затем меняют его размеры, прорисовывают и Enabled := T
Видимо так тоже сработает, мне больше через :Move() нравится

PS:
Andrey пишет:

 цитата:
Только вместо этого лучше oBrw:nLeft ,oBrw:nTop ( новичку понятней буде как можно делать)


В примере nTop , nLeft и пр. это координаты формы Form_1 , а не самого бровса.
Тогда уж не oBrw:nTop , а Form_1.Row.
Мне больше через GetProperty нравится , т.к. универсально ( не требуется DECLARE WINDOW указывать если окно не объявлено выше по тексту ), но это дело привычки

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




Пост N: 4688
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.02.16 12:48. Заголовок: Привет всем ! Как ра..


Привет всем !
Как работать с TBROWSE при перепоказе записей ?
Описание проблемки:
Установлен условный индекс по полю метка, меняем это значение, кол-во записей в TBROWSE изменилось.
Указатель записи нужно поставить на следующую запись.

cAlias := (oBrw:cAlias)
....
CASE nKey == VK_SPACE
cField := "MARK"
IF FIELDNUM(cField) > 0 // есть ли такое поле в БД
nRecno := (oBrw:cAlias)->(OrdKeyNo())
xVal := mFieldGet(cField, cAlias)
xVal := ! xVal
mFieldPut(cField, xVal, cAlias)
oBrw:DrawSelect()
IF LEN(aCargoFilter) > 0
// если стоит индекс-фильтр по этому полю, то обнулить бровс
IF AT( cField, UPPER(aFilter[2]) ) > 0
oBrw:Reset()
//oBrw:GoToRec( nRecno-1 ) // вот здесь не знаю как делать....
ENDIF
ENDIF
oBrw:Refresh(.F.)
EndIf



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




Пост N: 771
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.02.16 17:05. Заголовок: Andrey пишет: Указа..


Andrey пишет:

 цитата:
Указатель записи нужно поставить на следующую запись.


Посмотри как это делает TSBrowse при удалении записи , т.к. суть одинакова

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




Пост N: 4689
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.02.16 19:25. Заголовок: Haz пишет: Посмотри..


Haz пишет:

 цитата:
Посмотри как это делает TSBrowse при удалении записи



Вот это - METHOD TSBrowse:DeleteRow() ?

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




Пост N: 772
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 13.02.16 11:54. Заголовок: Andrey пишет: Вот э..


Andrey пишет:

 цитата:
Вот это - METHOD TSBrowse:DeleteRow() ?



Да, именно это

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




Пост N: 4690
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.02.16 15:38. Заголовок: Спасибо ! :sm36: ..


Спасибо !

И ещё один вопрос созрел.
Делаю:
Add Super Header To oBrw1 From Column 1 To Column 8 ;
Color CLR_BLACK, { CLR_RED , CLR_YELLOW } ;
Title "Мой СУПЕРХИДЕР таблицы" 3DLook

Можно ли на него создать обработку своей функции ? Как это сделать ?
И как поменять центровку строк в этом суперхидере ?


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




Пост N: 773
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 13.02.16 16:31. Заголовок: Andrey пишет: Можно..


Andrey пишет:

 цитата:
Можно ли на него создать обработку своей функции


какую обработку ? если клик по хидеру - то вроде есть такая
Andrey пишет:

 цитата:
И как поменять центровку строк в этом суперхидере


опять таки какую центровку - горизонтальная есть




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




Пост N: 4691
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.02.16 17:12. Заголовок: Haz пишет: если кли..


Haz пишет:

 цитата:
если клик по хидеру - то вроде есть такая


Да, клик по хидеру.
Я не нашел как повесить, допустим MsgDebug("Мой СУПЕРХИДЕР таблицы") ?

Haz пишет:

 цитата:
опять таки какую центровку - горизонтальная есть


А мне нужно влево центровать, а не по центру.


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




Пост N: 774
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 13.02.16 20:00. Заголовок: Andrey пишет: А мне..


Andrey пишет:

 цитата:
А мне нужно влево центровать, а не по центру.


влево вправо по центру - это все ГОРИЗОНТАЛЬНОЕ выравнивание
По сути вопроса -гляну в исходниках позже

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




Пост N: 852
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.02.16 21:26. Заголовок: Andrey пишет:А мне н..


Andrey пишет:
 цитата:
А мне нужно влево центровать, а не по центру.


 
#command ADD [ SUPER ] HEADER TO <oBrw> ;
FROM [ COLUMN ] <nFrom> ;
TO [ COLUMN ] <nTo> ;
[ <head:TITLE, HEADER> <cHead> ] ;
[ HEIGHT <nHeight> ] ;
[ <color:COLOR, COLORS> <aColors,...> ] ;
[ <l3dLook: 3DLOOK, LOOK3D> ] ;
[ FONT <uFont> ] ;
[ <lGrid:NOGRID, NOLINES> ] ;
[ BITMAP <uBmp> ] ;
[ <lAdj:ADJUST> ] ;
[ <lTra:TRANSPARENT> ] ;
[ <horz:HORZ, HORZ ALIGN> <nHAlign> ] ;
[ <vert:VERT, VERT ALIGN> <nVAlign> ] ;
=> ;
<oBrw>:AddSuperHead( <nFrom>, <nTo>, <cHead>, [ <nHeight> ], ;
[ \{<aColors>\} ], <.l3dLook.>, <uFont>, ;
<uBmp>, <.lAdj.>, <.lTra.>, <.lGrid.>, ;
<nHAlign>, <nVAlign> )


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

Method AddSuperHead( nFromCol, nToCol, uHead, nHeight, aColors, l3dLook, uFont, uBitMap, lAdjust, lTransp, ;
lNoLines, nHAlign, nVAlign ) CLASS TSBrowse

Local cHeading, nAt, nLheight, nOcurs, cRest, nLineStyle, nClrText, nClrBack, nClrLine, ;
hFont := If( ::hFont != Nil, ::hFont, 0 )

Default lAdjust := .F., ;
l3DLook := ::aColumns[ nFromCol ]:l3DLookHead, ;
nHAlign := DT_CENTER, ;
nVAlign := DT_CENTER, ;
lTransp := .T., ;
uHead := ""
...


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




Пост N: 4692
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.02.16 21:55. Заголовок: Делаю: Add Super Hea..


Делаю:
Add Super Header To oBrw1 From Column 1 To Column 8 ;
Color CLR_BLACK, { CLR_RED , CLR_YELLOW } ;
Title "Мой СУПЕРХИДЕР таблицы" 3DLook
HORZ DT_LEFT
Ура, заработало !

И как еще повесить при нажатии на этот "Super Header", допустим MsgDebug("Мой СУПЕРХИДЕР таблицы") ?




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




Пост N: 853
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.02.16 22:00. Заголовок: Andrey ... HORZ AL..


Andrey
... HORZ ALIGN DT_LEFT // Default DT_CENTER

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




Пост N: 854
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 13.02.16 22:19. Заголовок: Andrey пишет:И как е..


Andrey пишет:
 цитата:
И как еще повесить при нажатии на этот "Super Header"


есть блоки кода на колонку
oCol:bHLClicked := {|nRowPix, nColPix, nAt| MsgDebug(nRowPix, nColPix, nAt) } // Block to be evaluated on header left clicked
oCol:bHRClicked := {|nRowPix, nColPix, nAt| MsgDebug(nRowPix, nColPix, nAt) } // Block to be evaluated on header right clicked
пикселы в nRow, nCol:
nRow := oBrw:GetTxtRow( nRowPix )
nCol := oBrw:nAtCol( nColPix )
выведи их и по ним орентировка где кликали на header или SuperHeader
вроде так в тестах делал.



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




Пост N: 4713
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.02.16 17:23. Заголовок: Я так понял, что мож..


Я так понял, что можно заменять картинки для сортировки Tsbrowsa даже на PNG !
Сделал тест - работает ! Спасибо SergKis !!!



Замена:
// --------- заменяем сортировку на свои картинки индикации ---------
oBrw5:aSortBmp := { LoadImage("Arrow_down.png"), LoadImage("Arrow_up.png") }

И не обязательно делать картинки квадратными.
Для того чтобы круг (см.картинку) не касался шапки заголовка справа я сделал картинки размером 30х34.
А высоту шапки заголовка сделал чуть больше - oBrw5:nHeightHead := 32





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




Пост N: 4714
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.02.16 17:59. Заголовок: Перешёл на новую вер..


Перешёл на новую версию 16.02 и сразу вопрос:

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


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




Пост N: 856
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.02.16 18:23. Заголовок: Andrey http://clipp..

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




Пост N: 4726
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.02.16 03:19. Заголовок: Как сделать, чтобы в..


Как сделать, чтобы в контекстном меню высвечивалась текущая строка колонки на которой стоит маркер ?
Т.е. делаю так:
// по правой кнопки мышки - контекстное меню TBROWSE
DEFINE CONTEXT MENU CONTROL oBrw1
MENUITEM "File open 1: " + InfoFile(1,oBrw1:nAt) ACTION { || RunFile(1,oBrw1:nAt) }
MENUITEM "File open 2: " + InfoFile(2,oBrw1:nAt) ACTION { || RunFile(2,oBrw1:nAt) }
SEPARATOR
.....


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




Пост N: 797
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 20.02.16 13:16. Заголовок: Andrey пишет: высве..


Andrey пишет:

 цитата:
высвечивалась текущая строка колонки



не проверял , но примерно так Eval( oBrw:aColumns[oBrw:nCell]:bData )

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




Пост N: 4727
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.02.16 13:22. Заголовок: Andrey пишет: Так ?..


Andrey пишет:

 цитата:
Так ?


Нет. Вот так:



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




Пост N: 4728
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.02.16 14:10. Заголовок: Haz пишет: не прове..


Haz пишет:

 цитата:
не проверял , но примерно так Eval( oBrw:aColumns[oBrw:nCell]:bData )



Не прокатило....
DEFINE CONTEXT MENU CONTROL oBrw1
MENUITEM "File open 1: " + SUBSTR( Eval( oBrw1:aColumns[4]:bData ) ,1,60) ACTION { || RunFile(1) }
MENUITEM "File open 2: " + SUBSTR( Eval( oBrw1:aColumns[4]:bData ) ,61 ) ACTION { || RunFile(2) }
SEPARATOR

Мне нужно из 4 колонки выбрать первую строчку, а потом вторую строчку. колонка сборная из 2х полей базы собрана:
ADD COLUMN TO oBrw1 HEADER "Файлы" ;
.........
DATA {|| (cAlias)->DIR1 + (cAlias)->FILE1 + CRLF + ;
(cAlias)->DIR2 + (cAlias)->FILE2 }




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




Пост N: 799
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 20.02.16 14:20. Заголовок: Andrey пишет: Не пр..


Andrey пишет:

 цитата:
Не прокатило....


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

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




Пост N: 4729
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.02.16 14:29. Заголовок: Haz пишет: ты по пр..


Haz пишет:

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


Да !

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




Пост N: 800
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 20.02.16 14:32. Заголовок: чтобы сменить строку..


чтобы сменить строку меню есть функция
_SetMenuItemCaption ( cName , cWin , cCaption )

где cName задается при
MENUITEM cCaption ACTION bAction NAME cName IMAGE cImage

в твоем случае получается _SetMenuItemCaption() нужно вешать на ::bChange

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




Пост N: 4731
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.02.16 14:38. Заголовок: Спасибо БОЛЬШОЕ ! :..


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

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




Пост N: 4732
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.02.16 15:15. Заголовок: Сделал так: ..


Сделал так:
MENUITEM "File open 1: " ACTION { || RunFile(1) } NAME MYNAMEOPENFILE1
MENUITEM "File open 2: " ACTION { || RunFile(2) } NAME MYNAMEOPENFILE2

........
cCaption1 := "File open 1: " + (oBrw1:cAlias)->FILE1
_SetMenuItemCaption ( "MYNAMEOPENFILE1" , cForm , cCaption1 ) // строка 496
cCaption2 := "File open 2: " + (oBrw1:cAlias)->FILE2
_SetMenuItemCaption ( "MYNAMEOPENFILE2" , cForm , cCaption2 )

Выдаёт ошибку:
Error BASE/1132 Переполнение массива: Неверное количество аргументов
Called from _GETMENUIDS(561)
Called from _SETMENUITEMCAPTION(757)
Called from CHANGETABLE(496)
Called from (b)MYCREATETABLE(432)
Called from TSBROWSE:PAINT(8746)
Called from TSBROWSE:DISPLAY(2306)


Полез в h_menu.prg
LOCAL x := GetControlIndex ( ItemName , FormName )
LOCAL h := _HMG_aControlPageMap [ x ] // строка 561

Я пока не знаю что это такое ....
Что делать ?

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




Пост N: 802
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 20.02.16 15:22. Заголовок: Andrey пишет: Я пок..


Andrey пишет:

 цитата:
Я пока не знаю что это такое ....


это скорее всего значит что нет такого меню еще
т.е на момент вызова bChange ничего не известно про меню

примерный порядок
DEFINE TSBROWSE
END BROWSE

DEFINE MENU
END MENU

oBrw:bChange := .......






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




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


Haz пишет:

 цитата:
примерный порядок



Да и у меня тоже такой же:
DEFINE TBROWSE oBrw1 ;
...............
ON CHANGE { || ChangeTable() } ;
ON GOTFOCUS ChangeTable() ;
BACKCOLOR aBackColorTbr ;
CELL

END TBROWSE
MyCreateTable()
MyCreateTableMenu()

STATIC FUNCTION ChangeTable()
.....


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




Пост N: 804
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 20.02.16 16:43. Заголовок: Andrey пишет: Да и ..


Andrey пишет:

 цитата:
Да и у меня тоже такой же


Разный , бровс который обращается к меню в ON СHANGE объявляется когда этого меню еще и нет
обрати внимание где у меня oBrw:bChange := .......


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




Пост N: 4737
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.02.16 16:55. Заголовок: Тогда нужно так: ..


Тогда нужно так:

DEFINE TBROWSE oBrw1 ;
END TBROWSE

MyCreateTable()

MyCreateTableMenu()

oBrw1:bChange := { |oBrw| ChangeTable(oBrw) }
.......

STATIC FUNCTION ChangeTable()



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




Пост N: 805
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 20.02.16 16:56. Заголовок: Andrey пишет: Тогда..


Andrey пишет:

 цитата:
Тогда нужно так:


так скорее всего получиться

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




Пост N: 4738
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.02.16 17:14. Заголовок: Нет, не пашет... Вал..


Нет, не пашет... Валится сразу при входе в программу.
А как проверить наличие "MYNAMEOPENFILE1" ?

LOCAL cForm := oBrw1:cParentWnd
MsgLog( cForm , cCaption1, cCaption2 )
_SetMenuItemCaption ( "MYNAMEOPENFILE1" , cForm , cCaption1 )
_SetMenuItemCaption ( "MYNAMEOPENFILE2" , cForm , cCaption2 )


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




Пост N: 4739
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.02.16 17:18. Заголовок: Победил сваливание т..


Победил сваливание так:
IF nStaticViewRecno # 0 // при первом показе - не выводить

cCaption1 := "File open 1: " + (oBrw1:cAlias)->FILE1
cCaption2 := "File open 2: " + (oBrw1:cAlias)->FILE2
_SetMenuItemCaption ( "MYNAMEOPENFILE1" , cForm , cCaption1 )
_SetMenuItemCaption ( "MYNAMEOPENFILE2" , cForm , cCaption2 )

oBrw1:aColumns[1]:cFooting := { || ALLTRIM(Transform( nLen, "9 999" )) }
cText := IIF( M->nPubLang == 1, " Записи: ", " Recno: ")
oBrw1:aColumns[4]:cFooting := { || cText + cVal + "/" + cLen }
oBrw1:DrawFooters() // выполнить прорисовку подвала
TblFocus()
ENDIF

Но всё равно в контекстном меню нет имени файла ?
В лог-файл выводится имена файлов, а в менюшку нет.

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




Пост N: 806
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 21.02.16 11:08. Заголовок: Andrey пишет: Но вс..


Andrey пишет:

 цитата:
Но всё равно в контекстном меню нет имени файла ?
В лог-файл выводится имена файлов, а в менюшку нет.


Дарю ( вместо _SetMenuItemCaption ), вешай на ::bChange.
Проверил на своем примере , все работает как надо
 

Func MenuCaptionSet( ItemName , FormName, Caption )
LOCAL a := _GetMenuIds ( ItemName , FormName )
LOCAL x := GetControlIndex ( ItemName , FormName )
LOCAL Id := _HMG_aControlIds [ x ]

ModifyMenuItem ( a [1] , a [2] , Id , Caption )
return nil




PS. подсмотрено в исходниках minigui - h_menu.prg - FUNCTION _ModifyMenuItem ( ItemName , FormName , Caption , action , name , Image )


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




Пост N: 4740
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.02.16 15:12. Заголовок: Haz пишет: Дарю ( в..


Haz пишет:

 цитата:
Дарю ( вместо _SetMenuItemCaption ), вешай на ::bChange.


Благодарю !

Сделаю пример - выложу.

Только функцию _GetMenuIds() придётся тоже тащить из исходников к себе в проект.
Там она STATIC FUNCTION _GetMenuIds().

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




Пост N: 807
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 21.02.16 17:12. Заголовок: Andrey пишет: Тольк..


Andrey пишет:

 цитата:
Только функцию _GetMenuIds() придётся тоже тащить из исходников к себе в проект.
Там она STATIC FUNCTION _GetMenuIds().



да придется

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




Пост N: 4749
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.02.16 20:05. Заголовок: Кодировка базы 866. ..


Кодировка базы 866.
Выводил таблицу всю сразу на экран, было отлично.
Юзера захотели чтобы последний поиск (фильтр по базе) сохранялся и потом сразу показывался вместо всей базы.
Сделал. Использую условную индексацию, т.е. показ базы по индексу.
Теперь при показе таблицы на несколько секунд все записи в кракозябах (другая кодировка), потом строится индекс и всё записи показываются нормально !
Вопрос - как убрать показ этих кракозяб на экран ?
Пробовал делать:
SetProperty(oBrw:cParentWnd, oBrw:cControlName, "Enabled", .F.)
TsbNewIndex(cForm,nTable,aFilter[2], aFilter[1], aFilter[3] )
SetProperty(oBrw:cParentWnd, oBrw:cControlName, "Enabled", .T.)


Если ставишь отладку через MsgDebug() - кракозяб не видно !


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




Пост N: 810
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 27.02.16 11:05. Заголовок: Andrey пишет: Вопро..


Andrey пишет:

 цитата:
Вопрос - как убрать показ этих кракозяб на экран ?


Зачем в windows задаче кодировка 866 ? перекодируй в 1251 и проблема сама исчезнет.
А по сути вопроса - лучше выложи самодостаточный, а то не получается угадать какой код и где что не так

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




Пост N: 4750
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.02.16 14:39. Заголовок: Haz пишет: Зачем в ..


Haz пишет:

 цитата:
Зачем в windows задаче кодировка 866 ? перекодируй в 1251 и проблема сама исчезнет.


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

Проблему решил таким кодом:
InkeyGui(10)
и всё ....
Я сам в шоке от такой простоты.

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




Пост N: 811
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 27.02.16 14:56. Заголовок: Andrey пишет: Пробл..


Andrey пишет:

 цитата:
Проблему решил таким кодом:
InkeyGui(10)
и всё ....


Заплатку поставил. Ведь причина глюка осталась неясной, значит выскочит в другом месте.
Andrey пишет:

 цитата:
Не могу. Терминалку перевожу постепенно, сразу все таблицы не перевести.
Некоторые не хотят нового интерфейса, оставь им старый, привычный.
Так что год-два придётся использовать базы с 866 кодировкой.


Если консольную программу уже не развивать то нет и смысла сползать с 866
Я уже много много лет не использую 866 , а только 1251 и никаких проблем ни в консоли ни в гуи.
Правда с консолью почти не работаю , только мелкие сервисные утилиты, да и базы у меня все нативные от RDDADS.
в ADS кодировка ANSI используется по умолчанию , а OEM требует вызова перекодирования, это по исходникам видно.

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




Пост N: 4751
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.02.16 16:46. Заголовок: 1) Как в Tsbrowse за..


1) Как в Tsbrowse заменить картинки для oCol:lCheckBox := .T. // virtual checkbox ?

И менюшку обработки по мышке:


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




Пост N: 812
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 27.02.16 17:35. Заголовок: Andrey пишет: 1) Ка..


Andrey пишет:

 цитата:
1) Как в Tsbrowse заменить картинки для oCol:lCheckBox := .T. // virtual checkbox ?
2) Как организовать в Tsbrowse свои дополнительные поля со своими картинками ?
т.е. в одной таблице нужен стандартный CheckBox и еще 2 дополнительных CheckBox со своими картинками.

Примерно так же как в The Bat!


элементарно
только не чеквокс это
Организовать в базе 3 логических поля и по значению в них показывать или не показывать картинку
см в примерах tsb_cursor я там календарь в текущей строке рисовал, замени lDrawSelect на значение из поля
значение в поле должно инвертиться в bPrevEdit , который должен вернуть ложь чтоб не пустить в редактирование
PS
. если картинок в поле должно быть много то логическое поле не подойдет, сделай числовое и показывай нужную картинку в зависимости от числа в поле
PSS в чекбоксе картинки определены из массива функции StockBmp() менять их там еще тот гемор ... но если есть желание - то желающие могут попробовать.


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




Пост N: 867
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.02.16 18:05. Заголовок: Haz пишет: в чекбокс..


Haz пишет:
 цитата:
в чекбоксе картинки определены из массива функции StockBmp() менять их там еще тот гемор


это не совсем так
 
METHOD DrawLine( xRow ) CLASS TSBrowse
...
If lCheck
Default ::aCheck := { StockBmp( 6 ), StockBmp( 7 )}

hBitMap := ::aCheck[ If( Upper( uData ) == "T", 1, 2 ) ]

делаем просто oBrw:aCheck := {LoadImage(<для .T.>), LoadImage(<для .F.>)} и все работает с новыми "галочками" (это может быть и файл и ресурс)

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




Пост N: 868
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.02.16 18:13. Заголовок: Andrey пишет:InkeyGu..


Andrey пишет:
 цитата:
InkeyGui(10)
и всё ....
Я сам в шоке от такой простоты.


ты просто дал возможность обработать очередь, приостановив код на 10 мс., DO EVENTS тоже помогло бы, надо в гуи иногда давать возможность обрабатывать очередь сообщений

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




Пост N: 813
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 27.02.16 18:18. Заголовок: Andrey пишет: И мен..


Andrey пишет:

 цитата:
И менюшку обработки по мышке:



мат в форуме запрещен ?
тогда иди пожалуйста почитай хелп по контекстному меню

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




Пост N: 814
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 27.02.16 18:23. Заголовок: SergKis пишет: дела..


SergKis пишет:

 цитата:
делаем просто oBrw:aCheck := {LoadImage(<для .T.>), LoadImage(<для .F.>)} и все работает с новыми "галочками" (это может быть и файл и ресурс)


Сергей , это да... но позволяет задать общий aCheck на все колонки, а Андрею нужны свои на каждую
если бы было так aColumns[]:aCheck := ...
надо подумать над этой идеей

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




Пост N: 4752
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.02.16 18:46. Заголовок: Haz пишет: мат в фо..


Haz пишет:

 цитата:
мат в форуме запрещен ?
тогда иди пожалуйста почитай хелп по контекстному меню


Да понял я.... Не надо матерится.
Пример ты давал, я реализовал эту идею.
Просто хотелось бы попроще эти галочки в контекстном меню реализовать. Может что то изменить в самом Tsbrowse ?
Уж больно код выглядит не очень понятно для новичков !
Тестовый пример делаю. Как сделаю - выложу.

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




Пост N: 5490
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 27.02.16 18:57. Заголовок: Haz пишет: мат в фо..


Haz пишет:

 цитата:
мат в форуме запрещен ?


Нет

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




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


Andrey пишет:

 цитата:
Просто хотелось бы попроще эти галочки в контекстном меню реализовать. Может что то изменить в самом Tsbrowse ?


я и не матерюсь
контекстное меню реализовано проще некуда. А с картинками в колонках - только так , я пока не вижу как проще сделать кроме как Сергей навел на мысль про aColumns[]:aCheck
И потом TS не для новмчков , также как browse класс в clipper / harbour т.к. не только новички а и некоторые старички в этот класс не лезут.
То что имеет внутри множество инструментов для реализации почти любой хотелки - простым быть не может.



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




Пост N: 816
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 27.02.16 19:05. Заголовок: Dima пишет: Нет ..


Dima пишет:

 цитата:
Нет


а чего ты молчал?
теперь многие посты на форуме будут короткими и четкими как выстрел )

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




Пост N: 869
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.02.16 21:50. Заголовок: Haz пишет:если бы бы..


Haz пишет:
 цитата:
если бы было так aColumns[]:aCheck := ... надо подумать над этой идеей


так вроде не сложно:
 
1. добавляем в TsColumn DATA aCheck
2. чуть правим
METHOD DrawLine( xRow ) CLASS TSBrowse
...
If lCheck
Default ::aCheck := { StockBmp( 6 ), StockBmp( 7 )}
If Valtype(oColumn:aCheck) =="A" .and. Len(oColumn:aCheck) > 1
hBitMap := oColumn:aCheck[ If( Upper( uData ) == "T", 1, 2 ) ]
Else

hBitMap := ::aCheck[ If( Upper( uData ) == "T", 1, 2 ) ]
EndIf


и все

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




Пост N: 870
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 27.02.16 22:05. Заголовок: SergKis пишет:и все ..


SergKis пишет:
 цитата:
и все


надо добавить
 
METHOD Destroy() CLASS TSBrowse
...
If ::aCheck != Nil //V90
DeleteObject ( ::aCheck[ 1 ] )
DeleteObject ( ::aCheck[ 2 ] )
EndIf

AEval(::aColumns, {|oCol| If( Valtype(oCol:aCheck) == "A", AEval(oCol:aCheck, {|hBmp| DeleteObject (hBmp) }), ) })



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




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


SergKis пишет:

 цитата:
так вроде не сложно:


Сергей, отлично все сделал и реально не сложно.
Я под "подумать" имел ввиду, а нужен ли такой функционал вообще. Да он дает гибкость чекбоксам , но в силу логики тогоже чекбокса имеет только 2 состояния.
Думаю все же полезен будет т.к. на будущее не оставляю идею сделать раскрывающееся дерево на базе TS а там значки [+] и [-] будут.
Так же на потом оставил чекбокс с тремя состояниями true. false. nil т.к. работаю с ADS а там как порядочной SQL есть NULL

Подождем что скажет Григорий про aColumns:[]:aCheck

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




Пост N: 871
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.02.16 11:55. Заголовок: Haz пишет: а нужен л..


Haz пишет:
 цитата:
а нужен ли такой функционал вообще ..
... чекбокс с тремя состояниями true. false. nil


функционал нужен (разные image в колонках) и с тремя состояниями тоже
вот доработал по случаю
 
METHOD DrawLine( xRow ) CLASS TSBrowse
...
Local cCheckType, nCheckLen

...
было
lCheck := oColumn:lCheckBox .and. ValType( uData ) == "L" //V90

If lCheck .and. ValType( uData ) == "L"
cPicture:= ""
nVertText := If( uData, 3, 4 )
EndIf

стало
lCheck := oColumn:lCheckBox
cCheckType := ValType( uData )

If lCheck .and. cCheckType == "L"
cPicture:= ""
nVertText := If( uData, 3, 4 )
EndIf

было
If lCheck
Default ::aCheck := { StockBmp( 6 ), StockBmp( 7 )}
hBitMap := ::aCheck[ If( Upper( uData ) == "T", 1, 2 ) ]
nAlign := nMakeLong( DT_CENTER, DT_CENTER )
uData := ""
EndIf

стало
If lCheck
Default ::aCheck := { StockBmp( 6 ), StockBmp( 7 )}
If Valtype(oColumn:aCheck) =="A"
nCheckLen := Len(oColumn:aCheck)
If cCheckType == "L" .and. nCheckLen > 1
hBitMap := oColumn:aCheck[ If( Upper( uData ) == "T", 1, 2 ) ]
ElseIf nCheckLen > 2
hBitMap := oColumn:aCheck[ 3 ]
EndIf
ElseIf cChecType == "L"
hBitMap := ::aCheck[ If( Upper( uData ) == "T", 1, 2 ) ]
EndIf
nAlign := nMakeLong( DT_CENTER, DT_CENTER )
uData := ""
EndIf



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




Пост N: 872
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.02.16 11:59. Заголовок: PS. ошибочка закрала..


PS.
ошибочка закралась
 
ElseIf cCheckType == "L"
hBitMap := ::aCheck[ If( Upper( uData ) == "T", 1, 2 ) ]
EndIf


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




Пост N: 4753
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.02.16 15:33. Заголовок: Прикрутил к полю выб..


Прикрутил к полю выбор из меню:


Через DEFINE CONTEXT MENU OF &cForm


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




Пост N: 4754
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.02.16 16:08. Заголовок: Вот вопрос возник: h..


Вот вопрос возник:


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




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


Andrey пишет:
 цитата:
Вот вопросик ...


вот ответик, в TsColumn.prg
...
DATA uBmpCell // bitmap in cell (oBmp, hBmp or bBlock)
DATA uBmpFoot // bitmap in footer (oBmp, hBmp or bBlock)
DATA uBmpHead // bitmap in header (oBmp, hBmp or bBlock)
DATA uBmpSpcHd // bitmap in special header (oBmp, hBmp or bBlock)


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


Пост N: 206
Зарегистрирован: 29.05.10
ссылка на сообщение  Отправлено: 28.02.16 21:02. Заголовок: Haz пишет: Думаю вс..


Haz пишет:

 цитата:
Думаю все же полезен будет т.к. на будущее не оставляю идею сделать раскрывающееся дерево на базе TS а там значки [+] и [-] будут.


Вот такой бровс с деревом в FWH



если надо , могу исходник бровса прислать :)

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




Пост N: 4755
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.02.16 21:12. Заголовок: SergKis пишет: вот ..


SergKis пишет:

 цитата:
вот ответик, в TsColumn.prg


Спасибо ! Не сообразил сразу там посмотреть !

Использую прозрачный PNG. Может по другому надо ?

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




Пост N: 818
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 28.02.16 21:17. Заголовок: ММК пишет: если над..


ММК пишет:

 цитата:
если надо , могу исходник бровса прислать :)



Ага
Скинь в почту 047545(собака)mail(точка)ru плиз или ссылку на облако дай. Скачаю с интересом гляну как там реализовано.
Мне нужно дерево с ветвями до восьмого уровня, пока не пойму как его сделать , пока на фильтрах пытаюсь делать

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




Пост N: 4756
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 01.03.16 14:49. Заголовок: Григорий ! Предлага..


Григорий !
Предлагаю код, который сделал SergKis поместить в исходник TsBrowsa !
Скрытый текст

Я в своё время намучился, но так и не сделал такую функцию.



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




Пост N: 822
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 02.03.16 13:18. Заголовок: Andrey пишет: // ко..


Andrey пишет:

 цитата:
// координаты и размеры ячейки TsBrowse


Два вопроса :
1) а если ячейка за пределами окна бровса , что вернет ?
2) Для чего нужно ?


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




Пост N: 874
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.03.16 13:44. Заголовок: Haz пишет:1) а если ..


Haz пишет:
 цитата:
1) а если ячейка за пределами окна бровса , что вернет ?
2) Для чего нужно ? /quote]
1) проверяешь сам видима\не видима колонка
2) для доп. действий на Edit
3) для реализации external edition
...
 

If oCol:bExtEdit != Nil // external edition

::lNoPaint := ::lEditing := .F.
uVar := Eval( oCol:bExtEdit, uValue, Self )
::lChanged := ValType( uVar ) != ValType( uValue ) .or. uVar != uValue
::lPostEdit := .T.
::oWnd:nLastKey := VK_RETURN
::PostEdit( uVar, nCell, bValid )
Return Nil
EndIf


пример на базе Tsb_array_2 Скрытый текст


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




Пост N: 875
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.03.16 13:46. Заголовок: PS вкл. Edit на коло..


PS
вкл. Edit на колонке 7

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




Пост N: 823
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 02.03.16 14:35. Заголовок: Сергей привет Serg..


Сергей привет

SergKis пишет:

 цитата:
проверяешь сам видима\не видима колонка


1) а не проще сразу ::nCell использовать ? ( сам отвечу, проще но так универсальнее )
2) как использовать и для чего я сразу понял , т. к. делал почти тоже но уже из oEdit объекта

PS Пример хороший , сам присматривался к получению координат по аналогии с методом ::Edit()
,как раз то что ты реализовал.

PSS правда не увидел в нем внешнего редактирования )

Григорий , действительно полезная функция, добавьте в библиотеку пожалуйста
Пра мыслей как можно ее использовать
1) Организация всплывающий подсказок при редактировании ячейки
2) Псевдо комбобоксы под ячейкой ( бровс по вариантам )



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




Пост N: 876
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.03.16 14:55. Заголовок: Haz пишет: а не прощ..


Haz пишет:
 цитата:
а не проще сразу ::nCell использовать ?


не всегда нужен ::nCell иногда нужен nCell - 2 и т.д. и т.п.
Haz пишет:
 цитата:
делал почти тоже но уже из oEdit объекта


в bPrevEdit, bExtEdit нет oEdit, потому нужен механизм размеров (в моем проекте это метод ::GetCellSize(...))
Haz пишет:
 цитата:
правде не увидел в нем внешнего редактирования


под BROWSE такой механизм (несколько GetBox на Label) работает, почему тут не будет ?
что исп. для внешнего редактирования GetBox или др. TSB - по ситуации

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




Пост N: 824
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 02.03.16 15:04. Заголовок: SergKis пишет: пото..


SergKis пишет:

 цитата:
потому нужен механизм размеров (в моем проекте это метод ::GetCellSize(...))



Сергей , раз уж начал .....
Может в метод переделаешь
METHOD GetCellInfo()

Возвращает объект oCell c данными ( примерно эти , дальше нарастет по необходимости )
::nRow
::nCol
::nWidth
::nHeight

и код из твоего примера станет таким
oCell := oBrw:GetCellinfo(nRowPos, nCell, lSH)
nY := oCell:nRow + If( lSH, 0, oCell:nHeight )
nX := oCell:nCol
nW := oCell:nWidth
nH := oCell:nHeight

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




Пост N: 877
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.03.16 20:22. Заголовок: Haz пишет:Может в ме..


Haz пишет:
 цитата:
Может в метод переделаешь
METHOD GetCellInfo()


хорошее название - сделаю

пример на 2-а GetBox для ввода в 7-ю колонку (Label не прикрутил - прорисовка линий на нем от TSB)
Скрытый текст


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




Пост N: 878
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 02.03.16 21:19. Заголовок: Haz переделал CLAS..


Haz
переделал Скрытый текст


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




Пост N: 825
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 02.03.16 22:33. Заголовок: SergKis пишет: пере..


SergKis пишет:

 цитата:
переделал


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

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




Пост N: 891
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 02.03.16 22:33. Заголовок: SergKis пишет: пере..


SergKis пишет:

 цитата:
переделал


Благодарю за помощь
Подключил новый метод к классу, проверил работу примера с этим методом - полет нормальный

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