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


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


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




Пост N: 4135
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.06.22 09:05. Заголовок: alex_II тогда попад..


alex_II
тогда попадете в выделенный цветом код, см. Скрытый текст выше, т.к. двойной клик выполняет
 
IF ValType( ::bDataEval( ::aColumns[ nCol ] ) ) == "L" .AND. ;
::aColumns[ nCol ]:lCheckBox // virtual checkbox
::PostMsg( WM_CHAR, VK_SPACE, 0 )


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



Пост N: 164
Зарегистрирован: 12.07.06
ссылка на сообщение  Отправлено: 09.06.22 09:30. Заголовок: Пардон, может я что-..


Пардон, может я что-то не догоняю
Как выбраться из этой ситуации?

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




Пост N: 4136
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 09.06.22 10:24. Заголовок: alex_II Если объект..


alex_II
Если объект oBrw Public\Private\Static, то
PREEDIT {|| oBrw:lCheckBoxAllReturn := preMod('lm1')} ;
POSTEDIT {|| oBrw:lCheckBoxAllReturn := .T. }
Если oBrw Local, то надо исп. внутренние переменные параметры блоков кода :bPrevEdit и :bPostEdit

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



Пост N: 165
Зарегистрирован: 12.07.06
ссылка на сообщение  Отправлено: 09.06.22 13:01. Заголовок: Редактирование логического поля


SergKis
Большое спасибо за помощь, всё заработало корректно
Только маленькая поправка:
PREEDIT {|| oBrw:lCheckBoxAllReturn := preMod('lm1')}
но это уже детали.

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





Пост N: 227
Зарегистрирован: 17.10.05
ссылка на сообщение  Отправлено: 12.07.22 15:04. Заголовок: После того, как я в..


После того, как я включил блок кода ::bFilter, метод GotoRec( nRec, nRowPos )
Игоря Назарова стал работать некорректно.
Сам крутил - не получилось. Игорь, если будет возможность - гляньте, плз.

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




Пост N: 4139
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.07.22 15:55. Заголовок: krutoff пишет я вклю..


krutoff пишет
 цитата:
я включил блок кода ::bFilter


Используйте лучше методы:
:FilterData( cFilter, lBottom, lFocus )
:FilterFTS( cFind, lUpper, lBottom, lFocus, lAll )

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





Пост N: 228
Зарегистрирован: 17.10.05
ссылка на сообщение  Отправлено: 12.07.22 17:09. Заголовок: SergKis Сергей, спа..


SergKis
Сергей, спасибо за ответ.
Но в моей ситуации я хотел уйти от DbSetFilter, чтобы Seek работало по всей базе без фильтра (тут мне важны все записи),
а через TSBrowse показывать фильтрованые записи.

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




Пост N: 4140
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.07.22 17:53. Заголовок: krutoff пишет Но в м..


krutoff пишет
 цитата:
Но в моей ситуации я хотел уйти от DbSetFilter, чтобы Seek работало по всей базе без фильтра (тут мне важны все записи),а через TSBrowse показывать фильтрованые записи.


Используя :bFilter вам надо исп. все установки окружения тсб в ручном режиме (:nLen входящих строк в просмотр ...), если глянуть метод DbSkipper( nToSkip ) видно - все делается руками, т.е.
 
ELSEIF nToSkip < 0 .AND. !( ::cAlias )->( Bof() ) // going up

WHILE nSkipped > nToSkip

( ::cAlias )->( dbSkip( -1 ) )

IF ::bFilter != NIL .AND. !( ::cAlias )->( Bof() )
While ! Eval( ::bFilter ) .AND. !( ::cAlias )->( Bof() )
( ::cAlias )->( dbSkip( -1 ) )
ENDDO

IF ( ::cAlias )->( Bof() )
( ::cAlias )->( dbGoto( nRecNo ) )
RETURN nSkipped
ENDIF
ENDIF

IF ( ::cAlias )->( Bof() )
( ::cAlias )->( dbGoTop() )
EXIT
ENDIF

nSkipped--
ENDDO

по мне, :GotoRec(...) не имеет к :bFilter никакого отношения.
Почему бы после Seek не накапливать RecNo() в объекте контейнере (oRec := oHmgData() ; iif( dbSeek(...), oRec:Set(RecNo(), RecNo()), ) ) или в строке (cRec := "," ; cRec += iif(dbSeek(...), hb_ntos(RecNo())+',', "")) (oRec или cRec private\public). потом ставить
:FilterData("oRec:Get(RecNo(), 0) > 0",...)
или на строку
:FilterData("','+hb_ntos(RecNo())+',' $ cRec", ...)
PS
Если из RecNo() или ID записей сделать в mem:file.dbf , то тсб простым способом, с SET RELATION ... на осн. базу можно показывать нужные поля, т.е. ваш просмотр

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





Пост N: 229
Зарегистрирован: 17.10.05
ссылка на сообщение  Отправлено: 13.07.22 11:21. Заголовок: SergKis Сергей, спа..


SergKis
Сергей, спасибо за
    подсказку! Поправил метод GotoRec( nRec, nRowPos ) -> включил ::DbSkipper
    Протестировал. Все работает!
    Скрытый текст


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




    Пост N: 4141
    Зарегистрирован: 17.02.12
    ссылка на сообщение  Отправлено: 17.07.22 22:53. Заголовок: krutoff пишет Поправ..


    krutoff пишет
     цитата:
    Поправил метод GotoRec( nRec, nRowPos ) -> включил ::DbSkipper
    Протестировал. Все работает!


    Попробуйте пример Tsb_addrecord cо старым\родным вариантом :Gotorec(...) и вариант с вашими поправками.
    Родной метод работает после кнопки "AddRecord" (курсор, например, на 3-й строке) правильно, ваш вариант - нет

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




    Пост N: 2050
    Зарегистрирован: 11.02.10
    ссылка на сообщение  Отправлено: 21.07.22 12:00. Заголовок: SergKis пишет: Родн..


    SergKis пишет:

     цитата:
    Родной метод работает после кнопки "AddRecord" (курсор, например, на 3-й строке) правильно, ваш вариант - нет


    Я уже поправил код Олега (тестировал на том же примере Tsb_addrecord).
    Хочу включить эти изменения в новую сборку.

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




    Пост N: 7288
    Зарегистрирован: 12.09.06
    ссылка на сообщение  Отправлено: 04.02.23 09:15. Заголовок: Заметил у себя две б..


    Заметил у себя две бяки в ТСБ.
    1) Если делаем так в ON INIT окна
        oBrw:Enabled( .F. )  // блокировка таблицы  
    ...удаляем столбцы, ставим свои размеры колонок
    oBrw:Enabled( .T. ) // разблокировка таблицы

    То в ТСБ размер колонок и сами колонки восстанавливаются ДО ПЕРВОНАЧАЛЬНЫХ значений.
    Это так должно быть ?
    Тогда это не есть хорошо, т.к. построение окна с таблицей занимает время и нужна блокировка всего окна от шаловливых ручек юзера.

    2) Использую у себя условную индексацию. Очень удобно.
    Но на больших базах 1 тыс.записей и выше при смене текущего индекса курсор ТСБ впадает в ступорт, вешает ТСБ.
    До сих пор лечу это таким кодом после создания условного индекса:
       // ------------- добавка обязательна ----------  
    nTags := ( oBrw_2:cAlias )->( ordCount() )
    oBrw_2:aTags := {}
    FOR nI := 1 TO nTags
    AAdd( oBrw_2:aTags, { ( ALIAS() )->( ordName( nI ) ), ( ALIAS() )->( ordKey( nI ) ) } )
    NEXT
    oBrw_2:uLastTag := ( ALIAS() )->( ordName( nTags ) ) // без этого индекс слетает

    А можно этот код добавить сразу в ТСБ ?
    Раньше, года 2-3 назад такого не было, ТСБ работал без этого.

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




    Пост N: 4201
    Зарегистрирован: 17.02.12
    ссылка на сообщение  Отправлено: 04.02.23 10:22. Заголовок: Andrey пишет Если де..


    Andrey пишет
     цитата:
    Если делаем так в ON INIT окна ...удаляем столбцы, ставим свои размеры колонок


    На мой взгляд это неправильно, надо формировать список рабочих колонок на уровне
    DEFINE TBROWSE ...
    ...удаляем столбцы, ставим свои размеры колонок
    END TBROWSE
    или делать не обрамляя методом :Enabled, т.к., если смотреть метод :Enabled, то увидишь сохранение\восстановление данных колонок
     
    ...
    IF ::lEnabled
    ::aOldEnabled := { ::hBrush, {}, ::nClrPane, {}, ::nClrLine }
    FOR nI := 1 TO Len( ::aColumns )
    AAdd( ::aOldEnabled[ 2 ], ::aColumns[ nI ]:Clone() )

    ::aColumns[ nI ]:SaveColor()
    NEXT
    ...
    IF ! ::lEnabled
    FOR nI := 1 TO Len( ::aColumns )
    ::aColumns[ nI ]:RestColor()
    SetColor( , ::aColumns[ nI ]:aColors, nI )
    NEXT
    IF ! Empty( ::oPhant )
    ::oPhant:RestColor()
    ENDIF
    IF HB_ISARRAY( ::aOldEnabled ) .AND. ! Empty( ::aOldEnabled[ 1 ] )
    AEval( ::aOldEnabled[ 2 ], {| oc, nc | ::aColumns[ nc ] := oc:Clone() } )

    ...

     цитата:
    Использую у себя условную индексацию


    что это ?

     цитата:
    Очень удобно.


    Все в мире относительно

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




    Пост N: 7289
    Зарегистрирован: 12.09.06
    ссылка на сообщение  Отправлено: 09.02.23 12:15. Заголовок: Вопрос по ТСБ, возмё..


    Вопрос по ТСБ, возмём пример Tsb_composite !
    Для сортировки ПО СТОЛБЦАМ там нужно создавать ОДИН индекс по колонкам.

    1) Почему нужно делать ТОЛЬКО ОДИН файл ?
    При использование нескольких индексных файлов сортировка не работает.

    2) Если мне надо свой индекс сделать, то как тогда сделать чтобы сортировка работала ?
    Типа STR(KCity)+UPPER(STREET)

    Раньше (года 2 назад) сортировка работала по нескольким индексным файлам, теперь нет.
    Что нужно прикрутить в ТСБ чтобы вернулась прежняя сортировка ?

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




    Пост N: 7302
    Зарегистрирован: 12.09.06
    ссылка на сообщение  Отправлено: 21.02.23 03:53. Заголовок: Опять непонятка в ТС..


    Опять непонятка в ТСБ с массивом.
    Таблица построена, делаю сортировку по колонке с датой вот так:
    STATIC FUNCTION myTsbSort(oBrw) 
    LOCAL nCol := oBrw:nColumn("NAME_3")
    LOCAL oCol, lDescend := .F.

    oBrw:lNoChangeOrd := .F. // включить сортировку
    oBrw:nColOrder := 4 // поставить значок сортировки по колонке
    oBrw:SetOrder(nCol, , lDescend)

    RETURN Nil

    И нифига не получаю - т.е. правильной сортировки нет !
    Вот так в таблице:


    Как победить эту сортировку ?

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




    Пост N: 7303
    Зарегистрирован: 12.09.06
    ссылка на сообщение  Отправлено: 21.02.23 18:58. Заголовок: Танцы с бубном показ..


    Танцы с бубном показали, что использование виртуальной колонки в ТСБ с массивом - ПРОТИВОПОКАЗАНО !!!
    Т.е. в ТСБ НЕ НАДО использовать COLNUMBER { 1, 20 } - если нужна сортировка по колонке.
    Не помогают всякие ухищрения типа:
       IF oBrw:nColumn("ARRAYNO") > 0  
    nCol -= 1
    ENDIF
    IF oBrw:lSelector
    nCol -= 1
    ENDIF

    Придётся делать как и в 2015 году - свою собственную виртуальную колонку и отслеживать самому нумерацию этой колонки.

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




    Пост N: 7321
    Зарегистрирован: 12.09.06
    ссылка на сообщение  Отправлено: 13.03.23 09:25. Заголовок: Всем привет ! Что по..


    Всем привет !
    Что посоветуете делать для хранения и показа картинки в ТСБ ?
    Нужно показывать в одной колонке ТСБ картинки из базы.
    Картинки небольшие BMP или PNG размером 48х48 или 64х64.
    Есть 2 варианта:
    загонять все картинки в массив и показывать в ТСБ, или записывать эти картинки в поле базы, а потом уже показывать.
    Количество записей в базе может быть и 100 записей, а может и 10-20 тыс.
    Как показывать картинки из массива - знаю:
          oBrw:aBitMaps := M->ahPubBmp 
    oBrw:GetColumn(2):lBitMap := .T. // колонка с картинками
    oBrw:aColumns[2]:uBmpCell := {|| M->ahPubBmp[oBrw:nAt] }
    oBrw:aColumns[2]:uBmpHead := {|| Nil }
    oBrw:aColumns[2]:bData := {||Nil}
    oBrw:aColumns[2]:cData := '{||Nil}'
    oBrw:aColumns[2]:nAlign := nMakeLong( DT_CENTER, DT_CENTER )
    oBrw:aColumns[2]:nHAlign := nMakeLong( DT_CENTER, DT_CENTER )

    А как делать показ напрямую из мемо-поля не делал или уже забыл....
    Подскажите как это сделать ?

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




    Пост N: 2111
    Зарегистрирован: 11.02.10
    ссылка на сообщение  Отправлено: 13.03.23 12:38. Заголовок: Andrey пишет: как д..


    Andrey пишет:

     цитата:
    как делать показ напрямую из мемо-поля


    Можно попробовать использовать BLOB мемо-поля для хранения картинок.
    В Харборе есть такие функции для этой цели:

     цитата:
    BLOBDirectExport( <nPointer>, <cTargetFile> [, <kMode>] )
    BLOBDirectGet( <nPointer> [, <nStart> [, <nCount> ]] )
    BLOBDirectImport( <nOldPointer>, <cSourceFile> )
    BLOBDirectPut( [<nOldPointer>], <xBlob> )
    BLOBGet( <nFieldNo> [, <nStart> [, <nCount>]] )
    BLOBExport( <nFieldNo>, <cTargetFile>, <nMode> )
    BLOBImport( <nFieldNo>, <cSourceFile> )


    В поставке Минигуи есть рабочий пример в папке \SAMPLES\BASIC\BLOBfiles

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




    Пост N: 7322
    Зарегистрирован: 12.09.06
    ссылка на сообщение  Отправлено: 13.03.23 13:08. Заголовок: Есть ещё такой приме..


    Есть ещё такой пример - MiniGUI\SAMPLES\Advanced\Tsb_BitMaps
    Но там не совсем понятно, грузятся картинки из файла.
    А как сделать показ из мемо-поля уже записанную туда картинку ?

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




    Пост N: 7323
    Зарегистрирован: 12.09.06
    ссылка на сообщение  Отправлено: 13.03.23 13:56. Заголовок: gfilatov2002 пишет: ..


    gfilatov2002 пишет:

     цитата:
    Можно попробовать использовать BLOB мемо-поля для хранения картинок


    Спасибо !
    Сделал пример и загрузил в базу картинки (bmp).
    Как показать эти картинки в ТСБ - не знаю ?
    Пример тут - https://cloud.mail.ru/public/FvKA/sFktSMppQ
    и сделан на базе примера MiniGUI\SAMPLES\Advanced\Tsb_BitMaps
    Народ, отзовитесь ... Как это можно реализовать ?

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

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