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


Пост 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:....

























<a href=http://www.bestmarket.com.ua >ноутбуки</a>























<a href=http://www.bestmarket.com.ua >ноутбуки</a>
Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 86 , стр: 1 2 3 4 5 All [только новые]





Пост N: 2478
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.04.19 13:24. Заголовок: Haz пишет Может обра..


Haz пишет
 цитата:
Может обработку bEditLog поднять перед этой подготовкой?


По мне, не стоит. Это в If ... else ... min 2 раза вставлять.
Не пробовал, но если :nEditMove := 0, то :nCell и nCol должны быть равными.
Достаточно, по мне, сохранить, установить и восстановить :nCell, как показал выше

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 2479
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.04.19 13:36. Заголовок: PS Но если :nEditMod..


PS
Но если :nEditMode будет с перескоком на другую строку тсб, то RecNo(), (:cAlias)->ID, ... будут неверными.
И поэтому, Игорь, твое предложение будет, наверно, правильнее.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 2480
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 28.04.19 13:56. Заголовок: Haz пишет Может обра..


Haz пишет
 цитата:
Может обработку bEditLog поднять перед этой подготовкой?


Поднял
 
METHOD PostEdit( uTemp, nCol, bValid ) CLASS TSBrowse
...
( cAlias )->( DbSkip( 0 ) ) // refresh relations just in case that a relation field changes

xNewEditValue := ::bDataEval( ::aColumns[ nCol ], , nCol ) //Igor Nazarov

If hb_isBlock( ::bEditLog ) .and. ::aColumns[ nCol ]:xOldEditValue != xNewEditValue
Eval( ::bEditLog, ::aColumns[ nCol ]:xOldEditValue, xNewEditValue, Self )
EndIf

::SetFocus()

If nLastKey == VK_UP .and. ::lPostEditGo
...
If lAppend .and. ::bChange != Nil
Eval( ::bChange, Self, ::oWnd:nLastKey )
EndIf

xNewEditValue := ::bDataEval( ::aColumns[ nCol ], , nCol ) //Igor Nazarov

If hb_isBlock( ::bEditLog ) .and. ::aColumns[ nCol ]:xOldEditValue != xNewEditValue
Eval( ::bEditLog, ::aColumns[ nCol ]:xOldEditValue, xNewEditValue, Self )
EndIf

::SetFocus()

If nLastKey == VK_UP .and. ::lPostEditGo
...
// xNewEditValue := ::bDataEval( ::aColumns[ nCol ], , nCol ) //Igor Nazarov

// If hb_isBlock( ::bEditLog ) .and. ::aColumns[ nCol ]:xOldEditValue != xNewEditValue
// Eval( ::bEditLog, ::aColumns[ nCol ]:xOldEditValue, xNewEditValue, Self )
// EndIf

Return Nil
...

Пример отработал нормально

Спасибо: 1 
ПрофильЦитата Ответить
moderator


Пост N: 1498
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 28.04.19 14:09. Заголовок: SergKis пишет: Прим..


SergKis пишет:

 цитата:
Пример отработал нормально


Сергей, спасибо за помощь.

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




Пост N: 6276
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.04.19 14:26. Заголовок: Наверное всё таки жу..


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

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


Пост N: 828
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 28.04.19 15:50. Заголовок: А то за несколько ле..



 цитата:
А то за несколько лет текстовый лог разрастётся


Веди в разрезе года. Новый год, новый файл

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




Пост N: 6325
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.07.19 18:22. Заголовок: Искал, искал и не на..


Искал, искал и не нашёл.
Как убрать в таблице в колонках дата пустые даты - ". ." ?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 2623
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.07.19 20:05. Заголовок: Andrey пишет Как убр..


Andrey пишет
 цитата:
Как убрать в таблице в колонках дата пустые даты - ". ." ?


oCol:lEmptyValToChar := .T.
нули тоже убирает

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




Пост N: 6326
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.07.19 20:35. Заголовок: SergKis пишет: oCol..


SergKis пишет:

 цитата:
oCol:lEmptyValToChar := .T.
нули тоже убирает


Не совсем понял... Это по колонкам нужно пробежаться ?
А сразу на всю таблицу нет команды ?

Как например oBrw:lPickerMode := .F.

P.S. Да проверил, нужно самому пробежаться по колонкам.
      For nI := 1 To :nColCount() 
oCol := :aColumns[ nI ]
// центровка подвала таблицы
oCol:nFAlign := DT_CENTER
If oCol:cName == 'Name_1'
oCol:nAlign := DT_CENTER // центровка колонки 'Name_1'
EndIf
// фонты для строк таблицы
oCol:hFont := {|nr,nc,ob| TsbFont(nr, nc, ob)}
// убрать пустую дату и 0 в колонках
oCol:lEmptyValToChar := .T.

Next

СПАСИБО БОЛЬШОЕ !

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 2624
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.07.19 20:44. Заголовок: Andrey пишет Это по ..


Andrey пишет
 цитата:
Это по колонкам нужно пробежаться ?


Да.

 цитата:
А сразу на всю таблицу нет команды ?


AEval(oBrw:aColumns, {|oc| oc:lEmptyValToChar := .T. })
У меня в tscolumns.prg стоит
DATA lEmptyValToChar AS LOGICAL INIT .T. // .F. True if show of empty string for empty values of D,N,T,L types

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




Пост N: 6340
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.07.19 10:06. Заголовок: Очередная непонятка ..


Очередная непонятка с SetArrayTo()
Создаю массив для него, создается 9 элементов.
Когда считываю его размер oBrw:nLen, пишет что 8.
Как такое может быть ? Что неправильно делаю ?

Вот код:
Скрытый текст


Вот лог-файл:
Скрытый текст


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 2651
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 17.07.19 16:07. Заголовок: Andrey пишет Очередн..


Andrey пишет
 цитата:
Очередная непонятка с SetArrayTo()


Что то ты мутишь с массивами.
Вот пример https://TransFiles.ru/bq2op
Работает

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




Пост N: 6341
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.07.19 19:45. Заголовок: SergKis пишет: Что ..


SergKis пишет:

 цитата:
Что то ты мутишь с массивами.
Вот пример
Работает



Что то в коде у тебя не наблюдаю:
  oBrw:DeleteRow( .T. )           // Delete All         

И нет конструкции создания массива...
У меня не пойдёт - oBrw:AddItem(aDim), нужно увеличить на 1 элемент массив.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 2652
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 17.07.19 20:13. Заголовок: Andrey пишет Что то ..


Andrey пишет
 цитата:
Что то в коде у тебя не наблюдаю:
oBrw:DeleteRow( .T. ) // Delete All


Как бы и не надо, заново массив создаем

 цитата:
У меня не пойдёт - oBrw:AddItem(aDim), нужно увеличить на 1 элемент массив.


1. Можно иметь больше колонок и не нужным сделать oCol:Visible := .F. или :nWidth := 1 или 2 пикселя
2. Можно попробовать использовать вместо :AddItem(...) метод:SetArray( aArray, lAutoCols, aHead, aSizes )

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 2653
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.07.19 10:19. Заголовок: Andrey пишет У меня ..


Andrey пишет
 цитата:
У меня не пойдёт - oBrw:AddItem(aDim), нужно увеличить на 1 элемент массив


Немного модифицировал пример https://TransFiles.ru/5zbz9
На кнопке All на 1 колонку больше, чем на др. кнопках
Вместо :AddItem использовал :SetArray

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 2654
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.07.19 13:01. Заголовок: Andrey Забыл про :H..


Andrey
Забыл про :HideColumns(...).
С ним еще проще и можно на несколько колонок распространить Скрытый текст


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




Пост N: 6344
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.07.19 19:36. Заголовок: SergKis пишет: 2. М..


SergKis пишет:

 цитата:
2. Можно попробовать использовать вместо :AddItem(...) метод:SetArray( aArray, lAutoCols, aHead, aSizes )


Дошли руки разбираться дальше.
Не понял как в моём случае это поможет.
Куда в мой код это вставить, что заменить и т.д.
Код примера Tsb_ReportAge.7z трудно читаемый для меня.
Пока у себя сделал просто (работает однако):
FOR nI := 1 TO LEN(aMassiv) + 1  
// нужно сделать массив на +1 больше
aRows := Array(1, 13)


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




Пост N: 6361
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.07.19 15:14. Заголовок: Всем привет ! Делаю ..


Всем привет !
Делаю новый пример на базе примера MiniGUI\SAMPLES\Advanced\Tsb_Basic\demo2.prg
Поймал вот такой косяк с таймером (2 окна одной и той же программы):


Т.е. таймер не пашет и Refresh по таймеру не происходит.
Перезапустил, пропало.
А частенько так таймер работает в МиниГуи ?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 2687
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.07.19 16:21. Заголовок: Andrey пишет Код при..


Andrey пишет
 цитата:
Код примера Tsb_ReportAge.7z трудно читаемый для меня.


Что конкретно (какое место) трудно читается ?
Хочется знать, что бы пояснить.

 цитата:
Куда в мой код это вставить, что заменить и т.д.


Формируй тсб с max кол-вом колонок (чтобы не делать Insert\Add\Delete columns) и массивы в мах кол-ве колонок (нужны надписи Header, Footer для колонок) и лишние колонки делай :HideColumns(...) в примере см. AgeReport() ф-ю, там
 
...
:SetArray(aArray, .T.) // замена предыдущего массива в тсб массивом aArray
:Reset()
:GetColumn('AGE'):cFooting := hb_ntos(:nLen) // последнюю колонку убираем
:ResetVScroll( .T. )
:oHScroll:SetRange(0,0)
...


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 2688
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.07.19 16:47. Заголовок: PS Извини с HidColum..


PS
Извини с HidColumns др. кусок кода
 
nCol := :nCell
AEval(:aColumns, {|oc,nc| oc:nWidth := aSize[ nc ] }) // восстанавливаем размеры колонок базовые
:HideColumns( 'STREET', ! 'All' $ cCapt ) // убираем колонку не нужную
// :cTextSupHdSet( 1, This.ToolBar_1.Caption + ' ' + cCapt )
:aSuperHead[1][3] := This.ToolBar_1.Caption + ' ' + cCapt // навание в superheader
:Display()
:AdjColumns() // растягиваем колонки до размеров тсб


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




Пост N: 6362
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.07.19 17:07. Заголовок: SergKis пишет: Что ..


SergKis пишет:

 цитата:
Что конкретно (какое место) трудно читается ?
Хочется знать, что бы пояснить.



Не могу использовать его для своего случая.
Свой код привел выше.
Как его модифицировать ?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 2689
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.07.19 17:38. Заголовок: Andrey пишет Не могу..


Andrey пишет
 цитата:
Не могу использовать его для своего случая


Ты даже не попробовал разобраться.

 цитата:
Как его модифицировать ?


Сделай 2а массива
1-ый используй при создании тсб
2-ой на замену (без изм. nWidth колонок), у меня он aArray в AgeReport

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




Пост N: 6419
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.09.19 23:23. Заголовок: Правлю свои таблицы...


Правлю свои таблицы. До этого сделал временно и оставил.
Как сделать авторасширение всех столбцов таблицы чтобы справа фантомного столбца не было видно ?
Что-то ранее видел, но не успел попробовать.
Читал про oBrw:lAdjColumn := .T. и oBrw:AdjColumns()
Не совсем понял как их применять ?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 2807
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 05.09.19 23:40. Заголовок: Andrey С тек. верси..


Andrey
С тек. версии hmg стало 2а алгоритма по растягиванию колонок
- :AdjColumns() // если ширина всех колонок < ширины тсб,
- :lAdjColumn := .F.\.T. // если есть горизонтальный скролинг колонок, при .T. предпоследняя колонка растягивается до конца ширины тсб, если последняя не вмещается

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




Пост N: 6420
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.09.19 23:55. Заголовок: Спасибо ! :sm36: :..


Спасибо !
:AdjColumns() - отработал очень хорошо.
:lAdjColumn := .F.\.T. - никак не отработал, хотя версия 19.08 (Update 1)

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




Пост N: 6560
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.01.20 15:42. Заголовок: Всем привет ! Что т..


Всем привет !
Что то опять бровс чудит.
Вот такая ошибка:
Error BASE/1004 Message not found: NIL:GOTO 
--------------------------------- Stack Trace ---------------------------------
Called from __ERRRT_SBASE(0)
Called from NIL:ERROR(0)
Called from (b)HBOBJECT(0)
Called from NIL:MSGNOTFOUND(0)
Called from NIL:GOTO(0)
Called from LOADSITEPASSDIM(236) in module: Source\form_transferM1pass.prg
Called from MYINITM1SITEPASS(129) in module: Source\form_transferM1pass.prg

Куда копать ?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3008
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 17.01.20 19:30. Заголовок: Andrey пишет Error ..


Andrey пишет
 цитата:
Error BASE/1004 Message not found: NIL:GOTO


Ты потерял объект oBrw в переменной
NIL:GOTO

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




Пост N: 6577
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 09.02.20 00:00. Заголовок: Всем привет ! А мож..


Всем привет !

А можно сделать выгрузку всего объекта бровса на диск в файл,
а потом в другой программе просто загрузить этот файл ?
Именно весь, с цветами, полями, значениями и т.д.
Это нужно для небольших таблиц.

Типа такого:
 
TsbrowseSave( M->oBrw3, "fileBrw3.obrw" )
TsbrowseRestore( "fileBrw3.obrw", M->oBrw3 )


P.S. Можно и без цветов для начала.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3033
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.02.20 00:13. Заголовок: Andrey пишет Именно ..


Andrey пишет
 цитата:
Именно весь, с цветами, полями, значениями и т.д.


Поиграйся ф-ями объкта ( А.Кресин http://www.kresin.ru/hrbfaq_3.html#Doc3 )
Далее следует список функций для манипуляции классами и объектами:
смотрим и пробуем
+ ф-ии сохранения\восстановления блоков кода (забыл названия в ночи, но тема была где то)
или организовывать их строковое представление для сохранения\восстановления

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




Пост N: 6578
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 09.02.20 00:26. Заголовок: SergKis пишет: смот..


SergKis пишет:

 цитата:
смотрим и пробуем


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

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3034
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.02.20 00:28. Заголовок: PS При исп. :SetArra..


PS
При исп. :SetArrayTo(...) сохраняй\восстанавливай массивы - уже практичечки все готово, делай
В примере о курсах валют от ЦБ РФ (во флайме) у меня сделано
 
DEFINE TBROWSE oBrw AT nY, nX ALIAS cAlias WIDTH nW HEIGHT nH GRID ;
FONT { "Normal", "Header", "Footer" } ;
COLORS { CLR_BLACK, CLR_BLUE } ;
HEADERS { "Char;Code", "Num;Code", "Name" , "Nominal", "Value" } ;
COLSIZES { 40 , 40 , 250 , 50 , 50 } ;
PICTURE { , , "@R "+Repl('X',50), , } ;
JUSTIFY { DT_CENTER , DT_CENTER , DT_LEFT , DT_CENTER, DT_CENTER } ;
COLUMNS { "CHARCODE" , "NUMCODE" , "NAME" , "NOMINAL", "VALUE" } ;
COLNAMES { "CHAR" , "NUM" , "NAME" , "NOM" , "VAL" } ;
FOOTERS { "Char;Code", "Num;Code", "Name" , "Nominal", "Value" } ;

BRUSH { 255, 255, 240 } ;
LOADFIELDS FIXED
:InsColumn( 1, oColsData( cAlias ):Get('OrdKeyNo') ) // колонку # добавили
:GetColumn( 1 ):nWidth := 30
:nCell := 2
:nFreeze := 1
:lLockFreeze := .T.
:nHeightFoot := :nHeightCell
:nHeightCell += 4
:nClrLine := RGB(180,180,180) // COLOR_GRID
// :SetColor( { 11 }, { { || RGB( 255, 255, 255 ) } } )
:SetColor( { 11 }, { { || RGB(0,0,0) } } )
:SetColor( { 2 }, { { || RGB(255,255,240) } } )
:SetColor( { 5 }, { { || RGB(0,0,0) } } )
:SetColor( { 6 }, { { |a,b,c| iif( c:nCell == b, -CLR_HRED , -RGB(128,225,225) ) } } )
:SetColor( { 12 }, { { |a,b,c| iif( c:nCell == b, -RGB(128,225,225), -RGB(128,225,225) ) } } )
:AdjColumns()
END TBROWSE

Тоже практически все готово для save\restore (кроме блоков кода цветов)
Цветом выделена строка (как пример), которая есть в ch файле, но нет в программе из флайма

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




Пост N: 6620
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.04.20 22:14. Заголовок: Дали задачку, создат..


Дали задачку, создать таблицу и экспортировать его в Эксель.
Вопрос возник, как делать ?
Писать в Dbf-файл, а потом показывать в бровсе или сразу делать через массив с помощью SetArrayTo().
Что будет быстрей по скорости для Экспорта ?
База небольшая, 2500-3000 записей, кол-во столбцов примерно 50 штук.

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 1541
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 23.04.20 17:23. Заголовок: Andrey пишет: Что б..


Andrey пишет:

 цитата:
Что будет быстрей по скорости


Само собой чтение массива быстрее чем чтение файла dbf. Но это ничтожная разница по сравнению с самим экспортом.

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




Пост N: 6621
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.04.20 19:01. Заголовок: Спасибо ! А какая ра..


Спасибо !
А какая разница будет по времени по экспорту из DBF и SetArrayTo() ?
Всё равно данные уже в бровсе.
Я думаю что в SetArrayTo() быстрей будет строится (так всегда делаю).
Но интересно знать бы насколько быстрей...

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




Пост N: 6622
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.04.20 19:13. Заголовок: А как отсортировать ..


А как отсортировать SetArrayTo() по колонке дата только в обратном порядке ?
В обычном знаю:
 
// --------- функции сортировки колонок ---------
oBrw:nColOrder := oBrw:nColumn("FDATE")


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3138
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 23.04.20 21:22. Заголовок: Andrey Добавь или п..


Andrey
Добавь или поправь (Advanced\Tsb_array_2\demo.prg)
 
...
oBrw:lNoChangeOrd := .F.

END TBROWSE

Делай двойной click на заголовке колонки, сортировка будет тудой-сюдой

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




Пост N: 6623
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.04.20 21:28. Заголовок: SergKis пишет: Дела..


SergKis пишет:

 цитата:
Делай двойной click на заголовке колонки, сортировка будет тудой-сюдой


Нельзя, нужно сразу юзеру таблицу предоставить отсортированной по дате в обратном порядке.
Спасибо !

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




Пост N: 6624
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.04.20 22:50. Заголовок: А как в SetArrayTo()..


А как в SetArrayTo() удалять строки в таблице.
На отдельную кнопку повесил функцию удаления TsbDeleteMemo() , не работает.
      IF MG_YesNo( cMsg, , "Удаление записи" ) 
oStatBrw:DeleteRow( ) // Delete selected row
oStatBrw:Reset()
oStatBrw:SetOrder(3, , .T. ) // сортировка по столбцу
ItogoNN(oStatBrw) // GetColumn("NN")
oStatBrw:Refresh(.T.)
ENDIF

Если подключить следующий код:
 
// --------- блок удаления записи ---------
bDelete := { | nAt, oBrw | nAt:=nil, ItogoNN(oBrw) } // отрабатыват после DEL !!!
oBrw:SetDeleteMode( .T., .F., bDelete ) // так включаем клавишу DEL !!!

То удаление работает, но у меня отдельные проверки в TsbDeleteMemo(), при некоторых условиях удалять запись НЕЛЬЗЯ !
Как запретить удаление по клавише DEL и оставить отдельную кнопку удаления ?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3139
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 23.04.20 23:01. Заголовок: Andrey пишет Как зап..


Andrey пишет
 цитата:
Как запретить удаление по клавише DEL и оставить отдельную кнопку удаления ?


Делай массив (строка) на несколько элементов больше (по потребности). К примеру 2 доп. элемента
1 .T.\.F. - можно ли удалять
2 RecNo() в таблице dbf из которой создавался массив (для внесения изменений из массива в dbf)
Тогда в массиве Head пишешь только нужные колонки без 2х последних
На кнопку и в bDelete пишешь ф-ю, которая контролирует можно ли удалять (предпоследний элемент строки\записи массива) и
далее удаляешь или нет

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




Пост N: 6625
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.04.20 23:06. Заголовок: SergKis пишет: 2 Re..


SergKis пишет:

 цитата:
2 RecNo() в таблице dbf из которой создавался массив (для внесения изменений из массива в dbf)
Тогда в массиве Head пишешь только нужные колонки без 2х последних
На кнопку и в bDelete пишешь ф-ю, которая контролирует можно ли удалять (предпоследний элемент строки\записи массива) и
далее удаляешь или нет


Нет вообще DBF, чистый массив из мемо-поля.

Допустим написал отдельную функцию проверки - CheckDel(), возвращает T.\.F. - можно ли удалять
Как её использовать в коде ?
 
// --------- блок удаления записи ---------
bDelete := { | nAt, oBrw | nAt:=nil, ItogoNN(oBrw) } // отрабатыват после DEL !!!
oBrw:SetDeleteMode( .T., .F., bDelete ) // так включаем клавишу DEL !!!


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3140
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 23.04.20 23:22. Заголовок: Andrey смотри METHO..


Andrey
смотри
METHOD DeleteRow( lAll ) CLASS TSBrowse
там для dbf, array удаление, как работает :bDelete

 цитата:
Нет вообще DBF, чистый массив из мемо-поля.


2е колонки я давал для примера, добавляй одну для .T.\.F. и читай ее в bDelete,
если .T., к примеру, удалять можно,
если .F., то нельзя. Т.е. возвращай это значение из блока bDelete

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




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


SergKis пишет:

 цитата:
если .F., то нельзя. Т.е. возвращай это значение из блока bDelete



Спасибо ! Получилось методом тыка !
   // --------- блок удаления записи --------- 
bDelete := { | nAt, oBrw, lDel | nAt:=nil, lDel := TsbDostupMemo(oBrw), ItogoNN(oBrw), lDel }
oBrw:SetDeleteMode( .T., .F., bDelete ) // так включаем клавишу DEL !!!


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




Пост N: 6627
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.04.20 08:42. Заголовок: Всем доброго утра ! ..


Всем доброго утра !
Сделал рабочий код для SetArrayTo():
   oBrw:aColumns[2]:bPostEdit := {|xVal | xVal := oBrw:aArray[oBrw:nAt][oBrw:nCell] ,; 
xVal := CharRepl( "|\", xVal, " " ) ,;
oBrw:aArray[oBrw:nAt][oBrw:nCell] := xVal }

А по другому написать можно это действие ?
И как сделать такое же действие для Dbf

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3141
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.04.20 11:30. Заголовок: Andrey пишет А по др..


Andrey пишет
 цитата:
А по другому написать можно это действие ?


oBrw:aColumns[2]:bPostEdit := {|xv,ob,ncol| xv := CharRepl("|\", xv, " "), ob:SetValue(ncol,xv) }

 цитата:
И как сделать такое же действие для Dbf


Есть методы и ты их использовал в своих примерах, но подзабыл
xVal := oBrw:GetValue(nCol)
oBrw:SetValue(nCol, xVal)

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3142
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.04.20 12:55. Заголовок: PS В качестве nCol (..


PS
В качестве nCol (номера колонки) могут быть и имена колонок, т.е.
xVal := oBrw:GetValue("FDATE")
oBrw:SetValue("FDATE", xVal)

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




Пост N: 6628
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.04.20 07:18. Заголовок: Фонты не работаю в S..


Фонты не работаю в SetArrayTo()
Нашёл по хелпу типов таблицы: [ CELL | CELLED | GRID ] - а разница в чём между ними...

Как тогда для SetArrayTo() использовать фонты чтобы всегда работало ?
Фонты использую так:
 
cTbrName := "oBrwTxt"
DEFINE TBROWSE &cTbrName ;
AT nY, nX ;
WIDTH nW ;
HEIGHT nH ;
GRID ; // это oBrw:lCellBrw := TRUE
EDIT // все колонки с lEdit := .T.

END TBROWSE

// cell, head, foot
aFont := { GetFontHandle("Italic"), GetFontHandle("Bold"), GetFontHandle("Norm") }

// создаём таблицу из массива
oBrw := SetArrayTo( cTbrName, "test", aArray, aFont, aHead,;
aSize, aFoot, aPict, aAlign, aName )


Можно на лету изменять типы таблицы ?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3143
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.04.20 08:32. Заголовок: Andrey Может повним..


Andrey
Может повнимательнее посмотришь на исп. SetArrayTo() с фонтами Tsb_array_2\demo.prg
 
// hFontHead := aFont[1] // normal Header
// hFontFoot := aFont[2] // bold Footer
// aFontHF := { hFontHead, hFontFoot }

// aFontHF := aFont[1] // normal Header, Footer
aFontHF := aFont[2] // bold Header, Footer

oBrw := SetArrayTo( "oBrw", "test", aArray, aFontHF, aHead, aSize, aFoot, aPict, aAlign, aName )

в aFontHF мах 2а элемента, если задан не массивом, то это один handle font для Header и Footer
1 handle font Header
2 habdle font Footer
Для строк в DEFINE TBROWSE ... есть FONT cFontName SIZE nFontSize
Если вместо имени хочешь исп. handle font, то это переносится после DEFINE TBROWSE ... в уст. свойства объекта
oBrw:hFont := GetFontHandle(cFontName)


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3144
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.04.20 09:03. Заголовок: PS Твой вариант долж..


PS
Твой вариант должен выглядеть, к примеру так
 
DEFINE FONT Italic FONTNAME "DejaVu Sans Mono" SIZE 11 BOLD ITALIC
DEFINE FONT Norm FONTNAME _HMG_DefaultFontName SIZE _HMG_DefaultFontSize
DEFINE FONT Bold FONTNAME _HMG_DefaultFontName SIZE _HMG_DefaultFontSize BOLD
...
aFont := { GetFontHandle("Bold"), GetFontHandle("Norm") }
...
cTbrName := "oBrwTxt"
DEFINE TBROWSE &cTbrName OBJ oBrw ;
AT nY, nX ;
WIDTH nW ;
HEIGHT nH ;
FONT "Italic" ;
CELL /*GRID*/ ; // это oBrw:lCellBrw := TRUE
EDIT // все колонки с lEdit := .T.

mySetTsb(oBrw)

:SetArrayTo( aArray, aFont, aHead, aSize, aFoot, aPict, aAlign, aName )

:AdjColumns()

END TBROWSE ON END {|obr| obr:SetNoHoles(), obr:SetFocus() }
...


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




Пост N: 6629
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.04.20 12:29. Заголовок: SergKis пишет: Твой..


SergKis пишет:

 цитата:
Твой вариант должен выглядеть, к примеру так



Спасибо ! Дошло наконец то до меня...
Может в примере demo3.prg показать под комментариями:
 
/* 1 вариант написания
aFont := { "Italic", "Bold", "Norm" } // cell, head, foot
DEFINE TBROWSE oBrw ;
AT nY, nX ALIAS aArray WIDTH nW HEIGHT nH CELL ;
FONT aFont ;
BRUSH { 255, 255, 240 } ;
HEADERS aHead ;
COLSIZES aSize ;
PICTURE aPict ;
JUSTIFY aAlign ;
COLNAMES aName ;
COLNUMBER { 1, 40 } ;
COLUMNS aField ;
FOOTERS aFoot ;
FIXED ADJUST COLEMPTY ;
ENUMERATOR ;
EDIT GOTFOCUSSELECT

mySetTsb( oBrw )
myColorTsb( oBrw )

END TBROWSE ON END {|ob| ob:SetNoHoles(), ob:SetFocus() } */

// 2 вариант написания
aFont := { GetFontHandle("Bold"), GetFontHandle("Norm") } // head, foot
cTbrName := "oBrwTxt"
DEFINE TBROWSE &cTbrName OBJ oBrw ;
AT nY, nX ;
WIDTH nW ;
HEIGHT nH ;
FONT "Italic" ; // cell
CELL /*GRID CELLED */ ;
EDIT // все колонки с lEdit := .T.

mySetTsb(oBrw)

:SetArrayTo( aArray, aFont, aHead, aSize, aFoot, aPict, aAlign, aName )

:AdjColumns()

END TBROWSE ON END {|obr| obr:SetNoHoles(), obr:SetFocus() }

Попробовал компилировать пример demo3.prg с
CELL /*GRID CELLED */ ;
Не увидел разницы. На внешний вид таблицы одинаковые.
Зачем такое разнообразие ?

Спасибо: 0 
ПрофильЦитата Ответить
moderator


Пост N: 1542
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 25.04.20 22:23. Заголовок: Andrey пишет: А как..


Andrey пишет:

 цитата:
А какая разница будет по времени по экспорту из DBF и SetArrayTo() ?
Всё равно данные уже в бровсе.


Не хотел отвечать, но надо для всех.
Что значит данные в бровсе? Если это бровс по массиву, то да, массив передаётся в бровс. Если по базе, то рабочая область передаётся в бровс. Следует изучить наконеец исходники бровса, чтобы понять - бровс только рисует на экране окно данных и все. И сам бровс через свои методы может читать только текущую запись или строку массива, при этом выполняя очень много технических операций ( прорисовка, скрытые столбцы, блоки выборки данных и пр.) Если говорить о том., что данные получаем средствами бровса, то это значит что тратиться время на все эти операции и это в разы дольше прямой выборки из источника. Всё примеры типа tsb_export показавают только возможность работы с источником данных методами бровса, но ценой производительности. Разница в скорости между массивом и дбф в разнице доступа к элементу массива и полю базы, дальше математика, сколько запросов во столько раз умножение. И на закуску, SetArrayTo это всего лишь метод, позволяющий удобно инициализировать бровс по МАССИВУ. Это как что быстрее работает с дбф МиниГуи или харбур? Андрей, Вами проделана огромная работа по подготовке примеров новичкам, но такие речевые обороты сносят мозг тем же новичкам напрочь. Будьте внимательнее, хотя-бы на правах ветерана этого форума

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




Пост N: 6630
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.04.20 22:31. Заголовок: Спасибо за пояснения..


Спасибо за пояснения. Я это и хотел услышать и для других тоже !

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




Пост N: 6650
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 05.05.20 16:18. Заголовок: видишь суслика нет и..


видишь суслика нет и я не вижу а он есть

Использую последнюю версию МиниГуи 20.04
Сделал отдельный модуль .prg - работает отлично.
Таблица просто загляденье, столбики цветом подсвечены, шапка и подвал есть.
Добавляю его к себе в большой проект, просто его копирую в папку проекта и добавляю его в МуПроект.hbp
После сборки тестирую эту менюшку.
Таблица есть, шапка есть, а подвала НЕТ !!!
Вместо него дырка и всё...
Кто шаманский бубен продаст ?

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




Пост N: 6660
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.05.20 15:14. Заголовок: Andrey пишет: Табли..


Andrey пишет:

 цитата:
Таблица есть, шапка есть, а подвала НЕТ !!!


Разобрался я с этой загадкой. Как сделать это научился, а как исправить нет !
По коду это происходит так:
   .... 
aRet := myMenu(...) // отдельный prg, в нём 2 тсб, где указываю :nHeightFoot := 0 // высота подвала таблицы
....
// работа с базой
....
myTsb(...) // отдельный prg, в нём тсб, где указываю :nHeightFoot := 30
...

Вот так подвал в myTsb(...) не показывается.
Если в myMenu(...) поставить :nHeightFoot := 10, то и в myTsb(...) будет 10 и больше не делается.
Почему ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7191
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.05.20 15:56. Заголовок: Andrey пишет: Почем..


Andrey пишет:

 цитата:
Почему ?


Объект тсб по разному хоть называется ?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3184
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.05.20 16:31. Заголовок: Andrey пишет:Почему ..


Andrey пишет:
 цитата:
Почему ?


Видимость переменной тсб Public ?

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




Пост N: 6661
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.05.20 17:52. Заголовок: Dima пишет: Объект ..


Dima пишет:

 цитата:
Объект тсб по разному хоть называется ?


SergKis пишет:

 цитата:
Видимость переменной тсб Public ?


 
Для myMenu(...)
LOCAL oBrw1, oBrw2, cTbrName1, cTbrName2
...
///////////////////// первая таблица ////////////////////////////////
aDatos := CreateDatosAdres()
aArray := aDatos[ 1 ]
.....
cTbrName1 := "oBrwTxt1"
DEFINE TBROWSE &cTbrName1 OBJ oBrw1 ;
...
:SetArrayTo( aArray, aFontHF, aHead, aSize, aFoot, aPict, aAlign, aName )
:AddSuperHead(1, 2, "Выбор адреса" ) // суперхидер
:aColumns[2]:lEdit := .F. // НЕ редактировать

mySetTsb( oBrw1 )
TsbColor( oBrw1, , , , , )
...
///////////////////// вторая таблица ////////////////////////////////
aDatos := CreateMonthYears()
aArray := aDatos[ 1 ]
.....
cTbrName2 := "oBrwTxt2"
DEFINE TBROWSE &cTbrName2 OBJ oBrw2 ;
....
:SetArrayTo( aArray, aFontHF, aHead, aSize, aFoot, aPict, aAlign, aName )
:AddSuperHead(1, 3, "Выбор месяца/года" ) // суперхидер
mySetTsb( oBrw2 )
TsbColor( oBrw2, , , , , )
....
Для myTsb(...)
LOCAL oBrw,
....
DEFINE TBROWSE oBrw ;
...
mySetTsb( oBrw ) // настройки таблицы
myColorTsb( oBrw ) // цвета на таблицу
mySumTsb( oBrw ) // суммирование колонок таблицы
myColorTsbElect( oBrw ) // цвета избранные


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3186
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.05.20 18:10. Заголовок: Andrey Поставь знач..


Andrey
Поставь значения в myMenu()
oBrw1:lFooting := .F. и oBrw1:lDrawFooters := .F.
oBrw2:lFooting := .F. и oBrw2:lDrawFooters := .F.
в myTsb()
oBrw:lFooting := .T. и oBrw:lDrawFooters := .T.
oBrw:nHeightFoot := 30
Что получишь ?

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




Пост N: 6662
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.05.20 18:52. Заголовок: SergKis пишет: Что ..


SergKis пишет:

 цитата:
Что получишь ?


Нет подвала !
Наверное нужно отдельный пример делать...

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




Пост N: 6663
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.05.20 20:32. Заголовок: Разобрался я с этой ..


Разобрался я с этой загадкой !!!
Опять моя ошибка.
  aRet := myMenu(...) // отдельный prg, в нём 2 тсб, где указываю :nHeightFoot  := 0  // высота подвала таблицы   
myTsb(...) // отдельный prg, в нём тсб, где указываю :nHeightFoot := 30

В обоих отдельных prg есть одинаковая функция.
FUNCTION mySetTsb() 
.......

Забыл сделать в обоих случаях
STATIC FUNCTION mySetTsb()
А при сборке проекта линковщик-зараза, ошибку не выдавал !
Сейчас заработало !

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3187
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.05.20 20:43. Заголовок: Andrey пишет В обоих..


Andrey пишет
 цитата:
В обоих отдельных prg есть одинаковая функция.
FUNCTION mySetTsb()


Эта функция + myColorTsb() были специально оставлены FUNCTION, чтобы применять во всех тсб.
mySetTsb() - задание общих переменных для всех тсб
myColorTsb() - задание общих цветов тсб, что бы выглядели одинаково на всех окнах
Все частные установки для тсб конкретного окна, делаешь в STATIC FUNCTION своего prg файла
К примеру
mySet_Tsb() - задание значений переменных для конкретного тсб
myColor_Tsb() - задание значений цветов для конкретного тсб

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




Пост N: 6665
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.05.20 19:07. Заголовок: А зачем в demo7.prg ..


А зачем в demo7.prg в конце функций my0(oBrw) и my1(oBrw)
ставится вот этот код:
   :lDrawLine := .T. 
:Reset()
AEval( :aColumns ,{|oc| oc:oCell := NIL, ;
oc:oCellHead := NIL, ;
oc:oCellEnum := NIL, ;
oc:oCellFoot := NIL } )



Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3196
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.05.20 19:18. Заголовок: Andrey пишет А зачем..


Andrey пишет
 цитата:
А зачем в demo7.prg в конце функций my0(oBrw) и my1(oBrw) ставится вот этот код:


Эти переменные, после :DarawLine(, .F.), :DrawHeader(, .F.), DrawFooters(, .F.) хранят данные, которые можно убрать, что и делается в AEval(), т.к. с тсб можно работать еще долго. Если этого не делать, ничего страшного, повисят до окончания работы этого тсб.

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




Пост N: 6669
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.05.20 15:18. Заголовок: Всем привет ! Нашёл ..


Всем привет !
Нашёл тут большую непонятку в примере.
Если кол-во колонок равно 45 и стрелками вправо-влево до конца и начала таблицы, то всё, таблица ломается и
пример вешается.
Если сделать 44 или 46 колонок, то всё нормально.
Почему так ?
Цифру 45 нашёл в mySet2Tsb(), может из-за этого ?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3201
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.05.20 18:25. Заголовок: Andrey пишет Почему ..


Andrey пишет
 цитата:
Почему так ?


Ты пропустил, почитай http://clipper.borda.ru/?1-1-0-00000559-000-60-0 Пост 1 Отправлено: 29.11.19 10:25
и далее
ChangeLog.txt
 цитата:

2019/12/12: HMG Extended Edition version 19.12.
...
* Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG:
- added the new variable :lMoreFields in the TSBrowse class;
- added the new method MoreFields( nMsg, nWParam ).
...


Надо подбирать кол-во полей или переменную
DATA nMaxKeysLR AS NUMERIC INIT 3
Значение для MySet2Tsb() взял (see demo in folder \Utils\mgDBU)
У меня с такими значениями работает норм.

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




Пост N: 6670
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.05.20 20:12. Заголовок: SergKis пишет: Ты п..


SergKis пишет:

 цитата:
Ты пропустил, почитай


А как тогда сделать этот пример чтобы всегда работал ?
Сломал на 34 колонках...
Проект положил к тебе.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3202
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.05.20 20:51. Заголовок: Andrey пишет Уменьш..


Andrey пишет [quote]`
Уменьшил 45 на 30 и у меня работает, т.е.
:lMoreFields := ( :nColCount() > 30 )

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




Пост N: 6671
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.05.20 21:17. Заголовок: SergKis пишет: Умен..


SergKis пишет:

 цитата:
Уменьшил 45 на 30 и у меня работает, т.е.


Да, так заработало !
Спасибо !

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




Пост N: 6672
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.05.20 21:51. Заголовок: Если делать цвета че..


Если делать цвета через контейнер:
 
FUNCTION mySetTsb( oBrw )
WITH OBJECT oBrw
:Cargo := oKeyData() // создает объект без переменных (условно пустой) используем ниже по коду
.....
FUNCTION myColorTsb( oBrw )
LOCAL O
WITH OBJECT oBrw:Cargo
:nText := GetSysColor( COLOR_WINDOWTEXT )
:nPane := GetSysColor( COLOR_WINDOW )
....

то начинает ломаться экспорт в эксель.
Выдаёт такую ошибку:
Error BASE/1004 Метод не экспортирован: CARGO Args: [1] = N 10 
--------------------------------- Stack Trace ---------------------------------
Called from CARGO(0)
Called from MYTSBCOLORBACKFOOT(552) in module: demo7.prg
Called from (b)MYCOLORTSBELECT(278) in module: demo7.prg
Called from MYCOLORN(785) in module: Tsb5xlsOle1.prg
Called from EXCELOLE4EXTERN(706) in module: Tsb5xlsOle1.prg
Called from (b)TOEXCEL5(86) in module: Excel5.prg
Called from BRW4XLSOLE(357) in module: Tsb5xlsOle1.prg

И как теперь быть ?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3203
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.05.20 22:00. Заголовок: Andrey пишет Да, так..


Andrey пишет
 цитата:
Да, так заработало !


Если бы ты вставил команду
 
:lNoHScroll := .F. // добавить\вкл. ползунок горизонтальный
? procname(), :nColCount()
?
:lMoreFields := ( :nColCount() > 45 )

то по результату все увидел бы сам
MYSET2TSB 44

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3204
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 16.05.20 22:13. Заголовок: Andrey пишет И как т..


Andrey пишет
 цитата:
И как теперь быть ?


Переделать на oCol:oСell ( :DrawLine(, .F.) ), все брать оттуда и :hFont, цвета, :cValue, :uValue, valtype(:uValue)
Там все готовые данные к выводу, бери нужные, формат excel от них ...

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




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


SergKis пишет:

 цитата:
Переделать на


Понял...

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




Пост N: 6687
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.05.20 10:44. Заголовок: Всем доброго утра ! ..


Всем доброго утра !
Возникли вопросы по tsbrowse

1) Почему при создании тсб нельзя сразу задать все фонты ? вот так:
   aFont  := { "TsbCellNorm", "TsbHeadBold", "TsbFootBold", "TsbSpHd" }  

DEFINE TBROWSE oBrw ;
AT nY, nX ALIAS aArray WIDTH nWTsb HEIGHT nHTsb CELL ;
FONT aFont ;
.....

Сейчас 3 фонта работают. Добавить 4 фонт возможно ?

2) Сейчас в тсб можно добавить первую виртуальную колонку для tsbrowse-Dbf и tsbrowse-Array
А можно ещё сделать добавление своих доп.колонок ?
Для tsbrowse-Array понятно, что делать этого не нужно.
А вот для tsbrowse-Dbf иногда нужно, допустим когда нельзя править структуры базы.
Можно создавать свое поле в базе, но иногда этого делать нельзя, допустим при работе с чужой базой.
Если это сложно сделать, то вопрос можно пропустить.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3218
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.05.20 13:00. Заголовок: Andrey пишет А можно..


Andrey пишет
 цитата:
А можно ещё сделать добавление своих доп.колонок ?


Сколько угодно
 
LOCAL oCol
DEFINE COLUMN oCol ...
...
oBrw:InsColumn( nPos, oCol ) // nPos номер перед которой вставить
...
Для dbf в списке полей одно имя поля повторяешь 2 раза (можешь 3 и ...), потом для колонки по номеру меняешь
oCol:bData или oCol:bValue и даешь новое имя oCol:cName := "...". можно поправить oCol:cField и т.д. если надо

 цитата:
Сейчас 3 фонта работают. Добавить 4 фонт возможно ?


Куда ?
Есть oBrw:hFont, oBrw:hFontHead, oBrw:hFontFoot. Для колонок, SuperHead, SpecHd есть переменные в своих местах



Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3219
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.05.20 13:26. Заголовок: PS Если ты говоришь ..


PS
Если ты говоришь о заполнении, выделенное цветом
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


то надо добавлять в массив в каком то порядке и присваивать в _DefineTBrowse ()

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




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


SergKis пишет:

 цитата:
то надо добавлять в массив в каком то порядке и присваивать в _DefineTBrowse ()


Ну да, я про это.
При создании ТСБ задать сразу все фонты 4 штуки, таблица же из 4 секций состоит.
Для основных задач будет простое и понятное заполнение.
Ну а потом, кто хочет делает фонты какие сам захочет.


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3220
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.05.20 19:57. Заголовок: Andrey пишет При соз..


Andrey пишет
 цитата:
При создании ТСБ задать сразу все фонты 4 штуки, таблица же из 4 секций состоит.


Для этого поправить немного надо
 
FUNCTION _DefineTBrowse( ControlName, ParentFormName, nCol, nRow, nWidth, nHeight, ;
...
IF ! Empty( FontName ) .and. HB_ISARRAY( FontName )
AEval( FontName, { |cf| AAdd( aFonts, cf ) } )
aFont := ASize( aFonts, 4 )
FontName := aFont[1]
...
oBrw := TSBrowse():New( ControlName, nRow, nCol, nWidth, nHeight, ;
bFields, aHeaders, aWidths, ParentFormName, ;
change, bDblClick, bRClick, fontname, fontsize, ;
hCursor, aTmpColor, aBmp, cMsg, update, uAlias, uWhen, value, cell, ;
nStyle, bLClick, aFlds, aHeadClick, nLineStyle, lRePaint, ;
Delete, aJust, lock, appendable, lEnum, ;
lAutoSearch, uUserSearch, lAutoFilter, uUserFilter, aPicture, ;
lTransparent, uSelector, lEditable, lAutoCol, aColSel, tooltip )

IF HB_ISARRAY( aFont ) .and. Len(aFont) > 3 .and. HB_ISCHAR(aFont[ 4 ])
oBrw:hFontSpcHd := GetFontHandle(aFont[ 4 ])
ENDIF
...

Проверил, работает

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




Пост N: 6689
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.05.20 20:04. Заголовок: SergKis пишет: Ты,..


SergKis пишет:

 цитата:
Ты, наверно, путаешь SpecHeader (ENUMERATOR) и SuperHeader - это две разницы


Да, я наверное путаю.
Имеется таблица, в ней 4 части: ячейки, подвал, шапка и та часть над шапкой.
Я её называю суперхидером. Или я неправ ?
Вот для неё и нужно сразу задавать фонт.
Хотя идея автора наверное была что суперхидер имеет одинаковый шрифт как у шапки таблицы.
Но это для юзера не наглядно !
Заголовок таблицы нужно делать крупней для юзера, чтобы в глаза бросалась.
Из-за этого и возник вопрос.

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




Пост N: 6690
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.05.20 20:57. Заголовок: SergKis пишет: Пров..


SergKis пишет:

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


Да я тоже проверил.
Так лучше !

Но тогда напрашивается вопрос размещения 5 фонта.
      aFont  := { "TsbNorm", "TsbBold", "TsbBold", "TsbSpecH", "TsbSuperH" } 

Можно ли это реализовать ?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3221
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.05.20 20:59. Заголовок: Andrey пишет Я её на..


Andrey пишет
 цитата:
Я её называю суперхидером.


Это специальный заголовок, для нумерации колонок
SuperHeader это над Header, объединяет колонки.
Используй для фонта для него команду
#command ADD [ SUPER ] HEADER TO <oBrw> ;
...
[ FONT <uFont> ] ;
...
или метод с параметрами
:AddSuperHead( nFromCol, nToCol, uHead, nHeight, aColors, l3dLook, uFont, uBitMap, lAdjust, lTransp, ...)

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




Пост N: 6691
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.05.20 21:04. Заголовок: SergKis пишет: Supe..


SergKis пишет:

 цитата:
SuperHeader это над Header, объединяет колонки.


Ну да, я так и пишу - "шапка и та часть над шапкой."

SergKis пишет:

 цитата:
или метод с параметрами
или после
:AddSuperHead(...)
:hFontSupHdSet( nCol, hFontSuper )


А как можно отдельно задать фонт для суперхидера, сразу.
Пробовал так:
:hFontSupHdSet := GetFontHandle("CardSuperH") // 5-доп.фонт
Прога вылетает с ошибкой:
 
Error BASE/1005 Message not found: TSBROWSE:_HFONTSUPHDSET Args: [1] = O TSBROWSE
--------------------------------- Stack Trace ---------------------------------
Called from __ERRRT_SBASE(0)
Called from TSBROWSE:ERROR(0)
Called from (b)HBOBJECT(0)
Called from TSBROWSE:MSGNOTFOUND(0)
Called from TSBROWSE:_HFONTSUPHDSET(0)
Called from MYSUPERHEADER(595) in module: cardcomp.prg
Called from MAIN(159) in module: cardcomp.prg


Там 2 параметра в METHOD hFontSupHdSet( nCol, uFont )
А как правильно задать мне в :hFontSupHdSet := ???????

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3222
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.05.20 21:08. Заголовок: Andrey пишет А как м..


Andrey пишет
 цитата:
А как можно отдельно задать фонт для суперхидера, сразу.
Пробовал так:
:hFontSupHdSet := GetFontHandle("CardSuperH") // 5-доп.фонт
Прога вылетает с ошибкой:


У тебя богатая фантазия
Делай так как написал выше, команда и метод

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




Пост N: 6692
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.05.20 21:14. Заголовок: SergKis пишет: У те..


SergKis пишет:

 цитата:
У тебя богатая фантазия


Да не фантазия, а простая невнимательность. Слишком тороплюсь сделать.
Понял в чём дело, нужно так:
  :hFontSupHdSet( , GetFontHandle("TsbSuperH") )   // 5-доп.фонт 

Спасибо !

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3223
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.05.20 21:32. Заголовок: Andrey Это будет на..


Andrey
Это будет на 1-ю колонку, а остальные ... + высота у фонта будет другая, т.е. этого мало.
Лучше команда или метод AddSuperHeader(), в них "букав больше"

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




Пост N: 6693
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.05.20 22:06. Заголовок: SergKis пишет: Лучш..


SergKis пишет:

 цитата:
Лучше команда или метод AddSuperHeader(), в них "букав больше"



Тогда так примерно ?
   // суперхидер 
//:AddSuperHead( nFromCol, nToCol, uHead, nHeight, aColors, l3dLook, uFont, uBitMap, lAdjust, lTransp, ...)
:AddSuperHead( 1 , :nColCount() , aSupHd[1], , , , GetFontHandle("TsbSuperH") )


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 3224
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.05.20 22:09. Заголовок: Andrey пишет Понял в..


Andrey пишет
 цитата:
Понял в чём дело, нужно так:
:hFontSupHdSet( , GetFontHandle("TsbSuperH") ) // 5-доп.фонт


5-ый фонт и 6-ой можно сделать тоже, в целом, наверно, удобно будет
 
FUNCTION _DefineTBrowse( ControlName, ParentFormName, nCol, nRow, nWidth, nHeight, ;
...
IF ! Empty( FontName ) .and. HB_ISARRAY( FontName )
AEval( FontName, { |cf| AAdd( aFonts, cf ) } )
aFont := ASize( aFonts, 6 )
FontName := aFont[1]
...
oBrw := TSBrowse():New( ControlName, nRow, nCol, nWidth, nHeight, ;
bFields, aHeaders, aWidths, ParentFormName, ;
change, bDblClick, bRClick, fontname, fontsize, ;
hCursor, aTmpColor, aBmp, cMsg, update, uAlias, uWhen, value, cell, ;
nStyle, bLClick, aFlds, aHeadClick, nLineStyle, lRePaint, ;
Delete, aJust, lock, appendable, lEnum, ;
lAutoSearch, uUserSearch, lAutoFilter, uUserFilter, aPicture, ;
lTransparent, uSelector, lEditable, lAutoCol, aColSel, tooltip )

IF HB_ISARRAY( aFont ) .and. Len(aFont) > 3
IF HB_ISCHAR(aFont[ 4 ])
oBrw:hFontSpcHd := GetFontHandle(aFont[ 4 ])
ENDIF
IF HB_ISCHAR(aFont[ 5 ])
oBrw:hFontSupHd := GetFontHandle(aFont[ 5 ])
ENDIF
IF HB_ISCHAR(aFont[ 6 ])
oBrw:hFontEdit := GetFontHandle(aFont[ 6 ])
ENDIF
ENDIF

...
CLASS TSBrowse FROM TControl
...
DATA hFontSpcHd AS NUMERIC // special header font
DATA hFontSupHd // super header font

...
Method AddSuperHead( nFromCol, nToCol, uHead, nHeight, aColors, l3dLook, uFont, uBitMap, lAdjust, lTransp, ;
...
Default lAdjust := .F., ;
...
uHead := "", ;
uFont := ::hFontSupHd

...


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




Пост N: 6694
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.05.20 23:00. Заголовок: SergKis пишет: 5-ый..


SergKis пишет:

 цитата:
5-ый фонт и 6-ой можно сделать тоже, в целом, наверно, удобно будет


Да удобней и логичней !
И проще программировать, один раз задать и не делать потом различных манипуляций !
Везде параметры задал и всё, а с фонтами фокусами нужно заниматься...

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 86 , стр: 1 2 3 4 5 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 319
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет