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


Пост 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 
ПрофильЦитата Ответить
Ответов - 286 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]


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




Пост N: 6072
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.10.18 18:36. Заголовок: Вот ещё одна непонят..


Вот ещё одна непонятка для меня.
Беру пример \SAMPLES\Advanced\Tsb_array_2\demo.prg
Меняю:
   LOCAL cFontName := "Comic Sans MS" 
LOCAL nFontSize := 16

DEFINE TBROWSE oBrw ;
....
FONT cFontName SIZE nFontSize ;
GRID

Фонт меняется в таблице, визуально видно.

Запрашиваю размер фонта так:
 
hFont := oBrw:hFont // считать хендл фонта ячеек таблицы
//hFont := oBrw:aColumns[2]:hFont // 1-cells font
If hFont != Nil
aFontGet := GetFontParam(hFont)
nFSize2 := aFontGet[2] // узнать истинный размер фонта в ячейке
ENDIF
? "nFontSize=", nFontSize, "|nFSize2=", nFSize2, hb_ValToExp(aFontGet)
Получаю:
[pre2] nFontSize=16 |nFSize2=9 {"Segoe UI", 9, .F., .F., .F., .F., 0}

Почему так получается ?
Или я неправильно делаю ?
Тогда подскажите пожалуйста как нужно определить размер фонта в ячейках.

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



Пост N: 2089
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 14.10.18 19:13. Заголовок: Andrey пишет Почему ..


Andrey пишет
 цитата:
Почему так получается ?
Или я неправильно делаю ?


Может игнорируешь исходники, для понимания ситуации ?

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



Пост N: 150
Зарегистрирован: 10.07.07
ссылка на сообщение  Отправлено: 22.10.18 11:58. Заголовок: Andrey пишет: Юзер ..


Andrey пишет:

 цитата:
Юзер хочет добавить запись под/перед курсором/маркером бровса, а не в конец базы.


Haz пишет:

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


Привожу пример грубой реализации - https://cloud.mail.ru/public/2CQk/xrGVyF58D
В примере также реализовал "движение" записи вверх-вниз. Действительно совет Haz:

 цитата:
далее нужно всего лишь применить новую редакцию ::gotorec() с указанием нужной строки


очень помог.
Я еще мало что могу в использовании MiniGui и TsBrowse в частности. А есть задача, в которой желательно
реализовать следующее.
Во-первых, реализовать отметку нескольких записей по SHIFT/CTRL + клик мышью (как в проводнике, например) и затем
перемещение / копирование этих записей после указанной курсором записи, т.е. "привычный" copy/past.
Во-вторых, хотелось бы, чтобы перемещенная запись меняла цвет шрифта или фона, например,
как в Total Commander. Это только на момент работы с БД. После выхода из TsBrowse сохранять цвет измененных записей не надо.

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


Пост N: 1366
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 22.10.18 15:25. Заголовок: TimTim пишет: Во-пе..


TimTim пишет:

 цитата:
Во-первых, реализовать отметку нескольких записей по SHIFT/CTRL + клик мышью (как в проводнике, например)


Реализовать отметку можно добавив в бровс объект массив с номерами отмеченных записей.
Сделать это можно так
 
__objAddData( oBrw, 'aRecordds' )
oBrw:aRecords := {}

Далее по bLClick добавлять в этот массив номера записей, проверяя предварительно нажата ли CTRL или SHIFT.
С SHIFT придется повозится на предмет получения не одного а списка номеров записей
TimTim пишет:

 цитата:
затем
перемещение / копирование этих записей после указанной курсором записи, т.е. "привычный" copy/past.


можно через контекстное меню с пересчетом ключа индекса для копируемых (перемещаемых) записей
TimTim пишет:

 цитата:
хотелось бы, чтобы перемещенная запись меняла цвет шрифта или фона,


в условии oBrw:SetColor() проверять есть ли запись в массиве помеченных.
См. пример TSB_CALENDAR как там сделана отметка и покраска . Правда там отметка относится к ячейке, но логика одинакова

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



Пост N: 151
Зарегистрирован: 10.07.07
ссылка на сообщение  Отправлено: 22.10.18 15:40. Заголовок: Спасибо за ответ. Пр..


Спасибо за ответ. Пример с календарем посмотрю.
А чем и как ловить нажатие клавиш CTRL и / или SHIFT?

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


Пост N: 1367
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 22.10.18 16:05. Заголовок: TimTim пишет: А чем..


TimTim пишет:

 цитата:
А чем и как ловить нажатие клавиш CTRL и / или SHIFT?



KBDSTAT()

Bit Key
------------------------------------------------------------------------
1 Right shift currently pressed
2 Left shift currently pressed
3 Ctrl currently pressed (left or right)
4 Alt currently pressed (Alt or Shift-Alt)
5 Scroll-Lock ON/OFF
6 Num-Lock ON/OFF
7 Caps-Lock ON/OFF
8 Insert ON/OFF

IF ISBIT(KBDSTAT(), 3)
MsgDebug("CTRL pressed")
END

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



Пост N: 2094
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.10.18 18:32. Заголовок: Haz Что то new :Got..


Haz
Что то new :GotoRec(...) как то не так срабатывает.
Пример https://my-files.ru/4e57lz
Работа кнопок Up, Down и перепоказ после них
1. New вариант :GotoRec положил в функцию myGotoRec
2. Old вариант oBrw:GotoRec(...)
3. галочки переключают на функцию и доп параметр nRowPos
На родном (old) варианте отрабатывает ок, по показ с 1-ой строки
На new варианте ломается показ, нажмем Home показ восстановится
Или я что то потерял ?

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



Пост N: 2095
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.10.18 18:59. Заголовок: PS чуть перепутал, н..


PS
чуть перепутал, но это не влияет на результат
 
If lPos
MyGotoRec(oBrw, nRec, nRow)
Else
MyGotoRec(oBrw, nRec)
EndIf


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


Пост N: 1368
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 22.10.18 20:15. Заголовок: SergKis пишет: new ..


SergKis пишет:

 цитата:
new варианте ломается показ,


Завтра посмотрю

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


Пост N: 1369
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 23.10.18 10:43. Заголовок: SergKis пишет: Что ..


SergKis пишет:

 цитата:
Что то new :GotoRec(...) как то не так срабатывает.


Сергей, вроде со скипами там косяк был
 
FUNC myGotoRec( oBrw, nRec, nRowPos )
LOCAL cAlias
LOCAL nSkip := 0
LOCAL lMore := .T.
LOCAL lSkip := .F.
LOCAL lRet := .F.
LOCAL lReCount := .F.

with object oBrw
If :lIsDbf

lRet := .T.
cAlias := :cAlias
:nLastPos := (cAlias)->( RecNo() )
hb_default( @nRowPos, :nRowPos )
(cAlias)->( dbGoto(nRec) )

DO WHILE (cAlias)->( !EOF() ) .and. nSkip < ( :nRowCount() - nRowPos )
(cAlias)->( dbSkip(1) )
nSkip ++
ENDDO

If (cAlias)->( EOF() )
lReCount := .T.
nRowPos := :nRowCount() - nSkip + 1
EndIf

(cAlias)->( dbGoto(nRec) )
nSkip := 0
:nRowPos := 1

DO WHILE lMore
(cAlias)->( dbSkip(-1) )
nSkip ++
lMore := !(cAlias)->(BOF()) .and. nSkip < (nRowPos)
// lSkip := !(cAlias)->(BOF())
ENDDO





// :Refresh(lReCount, lReCount)

//If lSkip
:Skip( nSkip -1 )
//EndIf

:Refresh(lReCount, lReCount)

:nRowPos := nSkip
:nAt := :nLogicPos()

:Refresh(lReCount, lReCount)

:ResetVscroll()

If :bChange != Nil
Eval( :bChange, Self, 0 )
EndIf

:lHitTop := :lHitBottom := .F.



DO EVENTS

EndIf
end with

RETURN lRet



твой пример погонял - все норм

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



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


Haz пишет
 цитата:
твой пример погонял - все норм


Игорь добавь до 21 строки в таблице (в районе 7 к примеру) и жмем End
С записью Line 15 проделываем Up, Down во всех режимах
С new вариантом перескок отображения на Line 13, что не совсем правильно

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


Пост N: 1370
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 23.10.18 20:49. Заголовок: SergKis пишет: доба..


SergKis пишет:

 цитата:
добавь до 21 строки в таблице (в районе 7 к примеру) и жмем End


Да, все увидел. Пару дней возьму на правку и тестирование.

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




Пост N: 6079
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.10.18 19:22. Заголовок: Всем привет. Сделал ..


Всем привет.
Сделал у себя выгрузку базы через SetArrayTo() и обломался.
Оказывается таблица больше 41 колонок НЕ ДЕЛАЕТСЯ.
А у меня в базе 120 колонок, есть и ещё чуть больше.

Этот параметр наверное как то задан по умолчанию ?
Увеличить можно сейчас ?
Раньше компы были слабее, а сейчас на порядок быстрее.

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



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


Andrey пишет
 цитата:
Оказывается таблица больше 41 колонок НЕ ДЕЛАЕТСЯ.


Странное утверждение. Tsb_array_2\demo.prg меняем слегка
 

STATIC FUNCTION CreateDatos()

LOCAL a, i, k := 1000, aDatos, aHead, aSize, aFoot, aPict, aAlign, aName

aDatos := Array( k )
FOR i := 1 TO k
aDatos[ i ] := { " ", ; // 1
i, ; // 2
ntoc( i ) + "_123", ; // 3
Date() + i, ; // 4
PadR( "Test line - " + ntoc( i ), 20 ), ; // 5
Round( ( 10000 -i ) * i / 3, 2 ), ; // 6
100.00 * i, ; // 7
0.12, ; // 8
Round( 100.00 * i * 0.12, 2 ), ; // 9
Round( 1234567.00 / i, 3 ), ; // 10
PadR( "Line " + StrZero( i, 5 ), 20 ), ; // 11
Date(), ; // 12
Time(), ; // 13
i % 2 == 0 } // 14
a := AClone(aDatos[ i ])
AEval(a, {|xv| AAdd(aDatos[ i ], xv) })
AEval(a, {|xv| AAdd(aDatos[ i ], xv) })
AEval(a, {|xv| AAdd(aDatos[ i ], xv) })
AEval(a, {|xv| AAdd(aDatos[ i ], xv) })
AEval(a, {|xv| AAdd(aDatos[ i ], xv) })
AEval(a, {|xv| AAdd(aDatos[ i ], xv) })
AEval(a, {|xv| AAdd(aDatos[ i ], xv) })
AEval(a, {|xv| AAdd(aDatos[ i ], xv) })

NEXT
...

126 колонок есть

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


Пост N: 1373
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 25.10.18 20:02. Заголовок: SergKis пишет: Стра..


SergKis пишет:

 цитата:
Странное утверждение


Да, тоже не понял как клеятся слова выгрузка и setarrayto.
Куда выгрузка, где эти колонки?
У меня Tsbrowse был с 1000 колонок

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




Пост N: 6080
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.10.18 21:06. Заголовок: Haz пишет: У меня T..


Haz пишет:

 цитата:
У меня Tsbrowse был с 1000 колонок


У меня почему то 41 колонка и всё, больше не идёт.

SergKis пишет:

 цитата:
126 колонок есть


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

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




Пост N: 6084
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.10.18 16:42. Заголовок: Понял почему это про..


Понял почему это происходит.
Так как у меня выгружается иногда и по 40-50 тыс.записей, я сделал для того чтобы юзер не смотрел и не видел пустой экран, создание формы и показ таблицы из одной записи на 41 колонку.
Потом я в ON INIT передаю новый массив. А далее делаю:
   oBrw8:DeleteRow( .T. )       // Delete All 
oBrw8:aArray:={} // очистить массив

aArray := aDim // переопределяем на новый входящий массив

For nI := 1 TO Len(aArray)
if ! empty(aArray[ nI ])
ADD ITEM aArray[ nI ] TO &cBrw OF &cForm
EndIf
Next

Из-за этого у меня и режется до 41 колонки.

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




Пост N: 6085
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 26.10.18 17:48. Заголовок: Непонятка возникает ..


Непонятка возникает при обновлении массива.
Показываю прелодер, а он при создании таблицы не показывает лепестки - белый экран и всё.
Делаю так:
   // создаём окно ожидания с потоком 
WaitThreadCreate( 'Расчёт по отчёту ...' ) // как в SAMPLES\BASIC\WAIT_WINDOW_2\demo2.prg

SetProperty(oBrw8:cParentWnd, oBrw8:cControlName, "Enabled", .F.)

oBrw8:DeleteRow( .T. ) // Delete All
oBrw8:aArray:={} // очистить массив

aArray := aDim // переопределяем на новый входящий массив

For nI := 1 TO Len(aArray)
if ! empty(aArray[ nI ])
ADD ITEM aArray[ nI ] TO &cBrw OF &cForm // вариант 1
EndIf
IF nI % 500
DO EVENTS // чтобы показывать прелодер из WaitThreadCreate()
ENDIF
Next

Если поместить DO EVENTS то таблица на экране вся показывается и мелькает, потом подвисает ещё иногда.
Если убрать DO EVENTS то таблицы на экране нет (что хорошо), но прелодер не работает, белый экран на нём, без лепестков и время сбоку в секундах стоит, отображает 00:00:00.

Как можно заставить прелодер отображаться ?

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


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


Andrey пишет:

 цитата:
таблица на экране вся показывается и мелькает,


Зачем? Зачем в ts добавлять по одному элементу?
Формируй массив данных любуюсь на свой прелодер. А потом добавляй целиком. Хоть через SetArray(To) или прямым присвоением в oBrw:aArray с последующей синхронизации бровса ( тоже все уже разжевано на форуме) . Даже был пример как не массив а dbf подменить на лету.

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




Пост N: 6086
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.10.18 15:56. Заголовок: Haz пишет: А потом ..


Haz пишет:

 цитата:
А потом добавляй целиком.


Переделал это добавление. Действительно быстрее намного получилось.
Только прелодер все равно белый, без лепестков.
На 1-2 секунды появляется всего, потом уже Tsbrowse показывается.

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

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