Автор | Сообщение |
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:....
| |
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|
SergKis
|
| постоянный участник
|
Пост N: 3222
Зарегистрирован: 17.02.12
|
|
Отправлено: 22.05.20 21:08. Заголовок: Andrey пишет А как м..
Andrey пишет цитата: | А как можно отдельно задать фонт для суперхидера, сразу. Пробовал так: :hFontSupHdSet := GetFontHandle("CardSuperH") // 5-доп.фонт Прога вылетает с ошибкой: |
| У тебя богатая фантазия Делай так как написал выше, команда и метод
| |
|
Andrey
|
| постоянный участник
|
Пост N: 6692
Зарегистрирован: 12.09.06
|
|
Отправлено: 22.05.20 21:14. Заголовок: SergKis пишет: У те..
SergKis пишет: Да не фантазия, а простая невнимательность. Слишком тороплюсь сделать. Понял в чём дело, нужно так: :hFontSupHdSet( , GetFontHandle("TsbSuperH") ) // 5-доп.фонт Спасибо !
| |
|
SergKis
|
| постоянный участник
|
Пост N: 3223
Зарегистрирован: 17.02.12
|
|
Отправлено: 22.05.20 21:32. Заголовок: Andrey Это будет на..
Andrey Это будет на 1-ю колонку, а остальные ... + высота у фонта будет другая, т.е. этого мало. Лучше команда или метод AddSuperHeader(), в них "букав больше"
| |
|
Andrey
|
| постоянный участник
|
Пост 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") )
| |
|
SergKis
|
| постоянный участник
|
Пост 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 ...
| |
|
Andrey
|
| постоянный участник
|
Пост N: 6694
Зарегистрирован: 12.09.06
|
|
Отправлено: 22.05.20 23:00. Заголовок: SergKis пишет: 5-ый..
SergKis пишет: цитата: | 5-ый фонт и 6-ой можно сделать тоже, в целом, наверно, удобно будет |
| Да удобней и логичней ! И проще программировать, один раз задать и не делать потом различных манипуляций ! Везде параметры задал и всё, а с фонтами фокусами нужно заниматься...
| |
|
Andrey
|
| постоянный участник
|
Пост N: 6719
Зарегистрирован: 12.09.06
|
|
Отправлено: 30.05.20 16:49. Заголовок: Григорий, а можно оп..
Григорий, а можно описать порядок загрузки фонтов по новому в ChangeLog.txt ? А то сейчас помню, а потом забуду. А так будет напоминалка для всех !
| |
|
Dima
|
| |
Пост N: 7199
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.05.20 17:00. Заголовок: Andrey пишет: А то ..
Andrey пишет: цитата: | А то сейчас помню, а потом забуду. |
| Ты по любому забудешь
| |
|
krutoff
|
| |
Пост N: 195
Зарегистрирован: 17.10.05
|
|
Отправлено: 05.06.20 12:48. Заголовок: TBrowse: SET AUTOADJUST ON
Не могу побороть в TBrowse один неприятный момент: Если установлен SET AUTOADJUST ON -> изменяю (увеличиваю Height) размеры окна -> затем при редактировании ячейка улетает вверх! Я хочу програмно увеличить окно в зависимости от разрешения монитора - и тут такой казус ): Протестировал от h_tbrowse.prg - > TGetBox.prg -> h_getbox.prg -> координаты передает правильные. Пример: miniGui\SAMPLES\Advanced\Tsb_BitMaps\demo.prg - сделал поле "Name" редактируемым и вот результат: Скрытый текст
| |
|
Haz
|
| |
Пост N: 1554
Зарегистрирован: 20.02.11
|
|
Отправлено: 05.06.20 22:19. Заголовок: Andrey пишет: Григо..
Andrey пишет: цитата: | Григорий, а можно описать порядок загрузки фонтов по новому в ChangeLog.txt ? А то сейчас помню, а потом забуду. А так будет напоминалка для всех ! |
|
можно, начинай пока не забыл.
| |
|
Andrey
|
| постоянный участник
|
Пост N: 6724
Зарегистрирован: 12.09.06
|
|
Отправлено: 10.06.20 08:34. Заголовок: Подскажите как можно..
Подскажите как можно самому ПРАВИЛЬНО рассчитать высоту ТСБ. Что-то не учитываю в расчётах. Задаю фонты для таблицы: DEFINE FONT TsbNorm FONTNAME "DejaVu Sans Mono" SIZE 12 DEFINE FONT TsbBold FONTNAME "Tahona" SIZE 12 BOLD DEFINE FONT TsbSuperH FONTNAME "Comic Sans MS" SIZE 18 BOLD aTsbFont := { "TsbNorm", "TsbBold", "TsbBold", "TsbSpecH", "TsbSuperH", "TsbEdit" } DEFINE TBROWSE oBrw ; ............ FONT aTsbFont ; Высота одной строки таблицы: nHCell := GetTextHeight( 0, "B", GetFontHandle( "Norm" ) ) + 10 Кол-во строк в таблице nTsbMaxRow = 8 Добавляем высоту суперхидера + шапки + подвала: nHFSupHd := GetTextHeight( 0, "B", GetFontHandle( "TsbSuperH" ) ) nHFHead := GetTextHeight( 0, "B", GetFontHandle( "TsbBold" ) ) nHFFoot := 0 nTsbHeight := nHCell * nTsbMaxRow + nHFSupHd + nHFHead + nHFFoot nHFntSupHd = 35 nHFntHead = 19 nTsbHeight = 303 При создании ТСБ прописываю любые параметры, кроме высоты ячейки, всё равно они игнорируются кроме 0: :nHeightSuper := 16 // можно задать, если не определен фонт при построении :nHeightHead := 20 // можно задать, если не определен фонт при построении :nHeightFoot := 0 // можно задать, если не определен фонт при построении :nHeightCell := nHCell // высота ячейки берется ТОЛЬКО отсюда // :nHeightCell := 0 - прога повисает и всё, нет проверки на 0 Вывод отладки из таблицы на форме: 1) :nHeight = 303 2) :nHeightSuper = 49 3) :nHeightHead = 32 4) :nHeightFoot = 0 5) :nHeightSpecHd = 0 6) :nHeightCell = 29 7) GetHScrollBarHeight() = 17 8) :nRowCount() Кол-во строк = 7 Т.е. на форме всего 7 строк таблицы из заданных 8 !!! Почему ? Что не учитываю ? Почему меняется автоматом высота HeightSuper и HeightHead ? Исходник h_tbrowse.prg смотрел, нифига не понял, как они считаются. Как вручную можно рассчитать :nHeightSuper ? Если отключить метод убирания дырки внизу ТСБ END TBROWSE // ON END {|ob| ob:SetNoHoles() } то тогда :nHeightHead получается правильно заданным, но суперхидер всё равно сам по себе считается. Ради интереса задал :nHeightSuper := 0 :nHeightHead := 0 :nHeightFoot := 0 Шапки нет, а суперхидер всё равно показывается в ТСБ. Почему ?
| |
|
|
Andrey
|
| постоянный участник
|
Пост N: 6748
Зарегистрирован: 12.09.06
|
|
Отправлено: 14.07.20 19:41. Заголовок: Пытаюсь сделать курс..
Пытаюсь сделать курсор с окантовкой черного цвета. Не получается... Как этот цвет задать ? :nHRED := CLR_HRED :n_HRED := -CLR_HRED :n_HBLUE := -RGB(128,225,225) :nHBLUE := RGB(128,225,225) :nBLACK := CLR_BLACK :n_BLACK := -CLR_BLACK -0 же не бывает
| |
|
Andrey
|
| постоянный участник
|
Пост N: 6749
Зарегистрирован: 12.09.06
|
|
Отправлено: 14.07.20 19:48. Заголовок: Блин, не сообразил с..
Блин, не сообразил сразу... Сделал вот так -RGB(1,1,1)
| |
|
Andrey
|
| постоянный участник
|
Пост N: 6750
Зарегистрирован: 12.09.06
|
|
Отправлено: 16.07.20 16:40. Заголовок: А как править ключев..
А как править ключевое поле по индексу в ТСБ ? Сделал вот такой код: nI := :nColumn( 'NN' ) :aColumns[nI]:lEdit := .T. :aColumns[nI]:nEditMove := 0 oCol := :GetColumn('NN') // обработка до ввода oCol:bPrevEdit := { |lR,ob| nRecno := (ob:cAlias)->( RecNo() ) ,; lR := (ob:cAlias)->( RLock() ) ,; iif( lR, nil , MsgInfo("Запись заблокирована!") ) ,; lR } // обработка после ввода oCol:bPostEdit := { |uv,ob| uv := (ob:cAlias)->( dbUnLock() ) ,; ob:Reset() , ob:Refresh(.T.) ,; ob:GoToRec( nRecno ), ob:Setfocus() } В таблице 24 записей, помещается 20. Беру 3-ю запись с NN=3 меняю на 15. В ТСБ остаётся только одна запись 15 - остальных нет ... Стрелкой вверх/вниз и другие записи появляются. Меняем NN=15 обратно на 3. В таблице опять только одна запись - 3. Как сделать правильно ?
| |
|
Andrey
|
| постоянный участник
|
Пост N: 6754
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.07.20 16:24. Заголовок: Заработало ! Вот так..
Заработало ! Вот так надо: DEFINE TBROWSE oBrw ; .... LOADFIELDS LOCK // блокировка записей в автомате ..... oCol := :GetColumn('NN') // обработка до ввода oCol:bPrevEdit := { |lR,ob| lR := (ob:cAlias)->( RLock() ), ; nRecno := (ob:cAlias)->( RecNo() ) , lR } // обработка после ввода oCol:bPostEdit := { |xv,ob| xv := nil, ob:Refresh(.T.) , ob:GoToRec( nRecno ), ; ob:Upstable() , ob:Setfocus() }
| |
|
SergKis
|
| постоянный участник
|
Пост N: 3285
Зарегистрирован: 17.02.12
|
|
Отправлено: 18.07.20 11:08. Заголовок: Andrey пишет Заработ..
Andrey пишет цитата: | Заработало ! Вот так надо: |
| Взял пример Tsb_Basic\demo2.prg, поменял структуру dbf, сделал tag на поле F2 назвав NN FUNCTION UseOpenBase() ... IF ( lDbfNo := ! File( cDbf+'.dbf' ) ) AAdd( aStr, { 'F1', 'D', 8, 0 } ) AAdd( aStr, { 'F2', 'C', 10, 0 } ) AAdd( aStr, { 'F3', 'N', 10, 2 } ) AAdd( aStr, { 'F4', 'L', 1, 0 } ) dbCreate( cDbf, aStr ) ENDIF IF lDbfNo .OR. !File( cIndx+'.cdx' ) USE ( cDbf ) ALIAS TEST EXCLUSIVE NEW WHILE TEST->( RecCount() ) < 30 TEST->( dbAppend() ) TEST->F1 := Date() + n++ TEST->F2 := StrZero( n, 2 ) TEST->F3 := n TEST->F4 := ( n % 2 ) == 0 END GO TOP INDEX ON F2 TAG NN FOR !Deleted() INDEX ON RECNO() TAG NN2 FOR !Deleted() INDEX ON RECNO() TAG DEL FOR Deleted() USE ENDIF ... Добавил LOCK в DEFINE TBROWSE oBrw AT 5 + Form_0.Button_Ins.Height + 5, 5 ; ... GRID LOCK ; ... Режимы Insert и Edit работают и отображают тсб нормально без добавок, т.е. аналог твоего примера на изменение ключа работает.
| |
|
SergKis
|
| постоянный участник
|
Пост N: 3286
Зарегистрирован: 17.02.12
|
|
Отправлено: 18.07.20 11:12. Заголовок: PS работает и без до..
PS работает и без добавки LOCK и USE ( cDbf ) ALIAS TEST SHARED NEW
| |
|
Andrey
|
| постоянный участник
|
Пост N: 6755
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.07.20 19:04. Заголовок: SergKis пишет: Режи..
SergKis пишет: цитата: | Режимы Insert и Edit работают и отображают тсб нормально без добавок, т.е. аналог твоего примера на изменение ключа работает. |
| У меня в задаче 2 индекса по базе: cFldKey := "NN" cFilter1 := "PART==1 .AND. !Deleted()" cFilter2 := "PART==2 .AND. !Deleted()" INDEX ON &cFldKey TAG PART1 TO (cFileIndx) FOR &cFilter1 INDEX ON &cFldKey TAG PART2 TO (cFileIndx) FOR &cFilter2 Может из-за этого ?
| |
|
SergKis
|
| постоянный участник
|
Пост N: 3287
Зарегистрирован: 17.02.12
|
|
Отправлено: 18.07.20 20:04. Заголовок: Andrey пишет Может и..
Andrey пишет Поправил, по мне, так правильнее работать, ставить SET SCOPE TO ... IF ( lDbfNo := ! File( cDbf+'.dbf' ) ) AAdd( aStr, { 'F0', 'N', 1, 0 } ) AAdd( aStr, { 'F1', 'D', 8, 0 } ) AAdd( aStr, { 'F2', 'C', 10, 0 } ) AAdd( aStr, { 'F3', 'N', 10, 2 } ) AAdd( aStr, { 'F4', 'L', 1, 0 } ) dbCreate( cDbf, aStr ) ENDIF IF lDbfNo .OR. !File( cIndx+'.cdx' ) USE ( cDbf ) ALIAS TEST EXCLUSIVE NEW WHILE TEST->( RecCount() ) < 30 TEST->( dbAppend() ) TEST->F0 := (n % 2) + 1 TEST->F1 := Date() + n++ TEST->F2 := StrZero( n, 2 ) TEST->F3 := n TEST->F4 := ( n % 2 ) == 0 END GO TOP INDEX ON STR(F0)+F2 TAG NN FOR !Deleted() INDEX ON RECNO() TAG NN2 FOR !Deleted() INDEX ON RECNO() TAG DEL FOR Deleted() USE ENDIF SET AUTOPEN ON USE ( cDbf ) ALIAS TEST SHARED NEW OrdSetFocus('NN') SET SCOPE TO "1","1" GO TOP Работает
| |
|
Andrey
|
| постоянный участник
|
Пост N: 6783
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.08.20 23:13. Заголовок: Всем привет ! Можно ..
Всем привет ! Можно ли при открытие базы в ТСБ (метод dbf) создать 6 своих виртуальных колонок перед колонками dbf ? Одну колонку можно же делать через COLNUMBER { 1, 50 } , а ещё 6 нужно. И как им присвоить имена и размеры ? a1ColTitle := {"(1)","(2)","(3)","(4)","(5)","(6)","#"} a1Name := {"CF1","CF2","CF3","CF4","CF5","CF6","ORDKEYNO"} a1Type := {"N","N","N","N","N","N","N"} a1Size := {50,50,50,50,50,50,50}
| |
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|
|