Форум » GUI » TsBrowse в Минигуи (продолжение) » Ответить

TsBrowse в Минигуи (продолжение)

Vlad04: TsBrows определяется в виде строки ПАРМЕТРОВ объекта и их значений К примеру [quote] 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 [/quote] Здесь я собрал параметры из разных tBrows Можно или нет и какие парметры заменить выражением ( и каким) ? oBrw2:.... oBrw2:....

Ответов - 181, стр: 1 2 3 4 5 6 7 8 9 10 All

Andrey: Dima пишет: Правда есть ньюанс при запуске Странно и непонятно. Такое впечатление что берется старая TsbViewer.lib Так как в новой TsbViewer.lib MAIN окно включено по умолчанию. Пересобрал заново TsbViewer.lib - поправил пути в tsbviewer.hbp, т.к. я делаю свой путь для каждой версии МиниГуи [pre2]-workdir=c:/minigui-23.09.2/lib/hbmk/obj -oc:/minigui-23.09.2/lib/TsbViewer -Ic:/minigui-23.09.2/include [/pre2]Перепроверил ещё раз у себя, собирается и запускается без ошибок.

Dima: Andrey пишет: Странно и непонятно. TsbViewer.lib от 04.07.23 TsbViewer.prg от 06.01.22

Andrey: Вот в новой версии у меня так:


Dima: Andrey пишет: Такое впечатление что берется старая TsbViewer.lib Да , так и есть , лежала либа в папке C:\MiniGUI\SAMPLES\Advanced\Tsb_Viewer\ , убил её и пересобрал , работает

Andrey: Ну и отлично !

alex_II: Есть ряд одинаковых по структуре файлов. Можно как-то в открытом TsBrowse на лету поменять DBF-файл?

SergKis: alex_II Переоткройте др. dbf с тем же alias, можно и в той же области

alex_II: Забыл уточнить, все файлы открыты.

SergKis: alex_II пишет Забыл уточнить, все файлы открыты. SergKis пишет Переоткройте ... [pre2] oBrw:UserKeys( VK_F6, {|ob| myNewOpen(ob) } ) ... FUNC myNewOpen(oBrw) Local cNewDbf := ... dbSelectArea(oBrw:cAlias) USE USE (cNewDbf) ALIAS (oBrw:cAlias) SHARED oBrw:Reset() RETURN Nil [/pre2]

Andrey: Построил таблицу. Как можно поменять фон цвета шапки и подвала у столбца SELECTOR (1) ?

SergKis: Andrey А посмотреть метод :DrawHeaders слабо и поискать F7 в far "lSelect" ? Там несколько строк всего

Andrey: SergKis пишет: А посмотреть метод :DrawHeaders слабо и поискать F7 в far "lSelect" ? Там несколько строк всего Посмотрел, ни фига не понял

SergKis: Andrey пишет Посмотрел, ни фига не понял Странно выбор данных для переменной nClrBack из переменных oBrw и oColumn[pre2] IF !( nJ == 1 .AND. ::lSelector ) // не 1-я колонка IF ( nClrBack := iif( ::nColOrder == nI, oColumn:nClrOrdeBack, oColumn:nClrHeadBack ) ) == NIL nClrBack := iif( ::nColOrder == nI, nClrOrdeBack, nClrHeadBack ) ENDIF ELSE // 1-я колонка nClrBack := iif( ::nClrSelectorHdBack == NIL, ATail( ::aColumns ):nClrHeadBack, ::nClrSelectorHdBack ) ENDIF ниже есть и для Footer IF ::lFooting .AND. ::lDrawFooters ... IF !( nJ == 1 .AND. ::lSelector ) // JP nClrBack := iif( oColumn:nClrFootBack != NIL, oColumn:nClrFootBack, nClrFootBack ) ELSEIF ::nClrSelectorHdBack != NIL nClrBack := ::nClrSelectorHdBack ELSE nClrBack := ATail( ::aColumns ):nClrFootBack ENDIF ... [/pre2]

Andrey: [pre2] ELSEIF cCol == "SELECTOR" oCol:nClrHeadBack := oTsb:n12Clr4Back // фона шапки селектора колонка 1 oCol:nClrFootBack := oTsb:n12Clr10Back // фона подвала селектора колонка 1 [/pre2] Так не работает. Если делаем так, то вылет ! [pre2] ELSEIF cCol == "SELECTOR" oCol:nClrSelectorHdBack := oTsb:n12Clr4Back // фона шапки селектора колонка 1 oCol:nClrFootBack := oTsb:n12Clr10Back // фона подвала селектора колонка 1 [/pre2]

SergKis: Andrey Копипастишь и придумываешь, ты просто посмотри внимательно код выше, по названиям видно

Andrey: Вот ещё пример ТСБ в папке \MiniGUI-23.10\SAMPLES\Advanced\APP_OOPTEMPLATE Окно и таблица строится из ини-файла Demo_timer.cfg Смотреть секцию - [ТАБЛИЦЯ_БД_АБОНЕНТИ] Правая кнопка мышки на ячейке вызывает меню для работы с буфером: Копировать в буфер/Вставить из буфера/Удалить в зависимости от языка. Предусмотрен вызов меню по клику мышки на суперхидере. Повторное открытие базы в другой кодировке на "лету", без закрытия таблицы.

krutoff: Всех с Новым Годом! Прошу в h_tbrowse.prg сделать изменения в строке 5266 IF ::lIsArr .AND. oCol:cDataType # ValType( uValue ) // GF 15/07/2009 cType := ValType( uValue ) oCol:cDataType := cType ENDIF В моем случае, если cDataType = 'M', то этот блок переводит cDataType в 'C' и дальше не отрабатывает строка 5451 ELSEIF ( cType == "C" .AND. Chr( 13 ) $ uValue ) .OR. cType == "M" .OR. oCol:lEditBox и редактирование переводит на GetBox. Я, конечно, вручную поставил oCol:lEditBox := .T., но хотелось бы автоматически.

gfilatov2002: krutoff пишет: в h_tbrowse.prg сделать изменения в строке 5266 Благодарю за подсказку. Поправил эту строку для учета "М" типа данных. Мой контрольный пример см. ниже: [pre2] /* * MINIGUI - Harbour Win32 GUI library Demo * * Copyright 2021 Sergej Kiselev <bilance@bilance.lv> */ #include "minigui.ch" #include "tsbrowse.ch" #include "dbinfo.ch" STATIC cParent // ----------------------------------- FUNCTION Main() // ----------------------------------- LOCAL cTitle := "Test Browse: Right Click For Record View", ; bSetup := {| oBrw, lAft | SetMyBrowser( oBrw, lAft ) }, ; cFont := "Tahoma", nSize := 10, aArr if !file("test.dbf") CreateTable() endif USE ( hb_dirBase() + "test.dbf" ) NEW aArr := Test->( HMG_DbfToArray() ) SET AUTOADJUST ON NOBUTTONS SET FONT TO cFont, nSize DEFINE FONT Normal FONTNAME cFont SIZE nSize DEFINE FONT Bold FONTNAME cFont SIZE nSize BOLD SET DEFAULT ICON TO GetStartupFolder() + "\demo.ico" DEFINE WINDOW sample AT 0, 0 WIDTH 640 HEIGHT 480 ; TITLE "Open Table via SBrowse" ; MAIN NOSHOW ; ON INIT ( This.Timer_1.Enabled := .T., SBrowse( aArr, cTitle, bSetup,, 950, 430,,, .T. ) ) ; ON RELEASE ( Test->( dbZap() ), Test->( HMG_ArrayToDBF( aArr ) ), dbCloseArea( "Test" ) ) DEFINE TIMER Timer_1 INTERVAL 1000 ACTION iif( Empty( CountChildWindows() ), ThisWindow.Release(), ) This.Timer_1.Enabled := .F. DEFINE TIMER Timer_2 INTERVAL 250 ; ACTION iif( _IsControlDefined( "Btn_1", cParent ), ; ( SetProperty( cParent, "Btn_1", "Enabled", .F. ), ; SetProperty( cParent, "Btn_2", "Enabled", .F. ) ), ) ONCE END WINDOW sample.Center() sample.Activate() RETURN NIL // ----------------------------------- FUNCTION CreateTable // ----------------------------------- dbCreate( "Test", { { "CODE", "C", 3, 0 }, { "NAME", "C", 50, 0 }, { "RESIDENTS", "N", 11, 0 }, { "NOTES", "M", 10, 0 } },, .T. ) dbAppend() REPLACE CODE WITH 'LTU', NAME WITH 'Lithuania', RESIDENTS WITH 3369600 dbAppend() REPLACE CODE WITH 'USA', NAME WITH 'United States of America', RESIDENTS WITH 305397000 dbAppend() REPLACE CODE WITH 'POR', NAME WITH 'Portugal', RESIDENTS WITH 10617600 dbAppend() REPLACE CODE WITH 'POL', NAME WITH 'Poland', RESIDENTS WITH 38115967 dbAppend() REPLACE CODE WITH 'AUS', NAME WITH 'Australia', RESIDENTS WITH 21446187 dbAppend() REPLACE CODE WITH 'FRA', NAME WITH 'France', RESIDENTS WITH 64473140 dbAppend() REPLACE CODE WITH 'RUS', NAME WITH 'Russia', RESIDENTS WITH 141900000 USE RETURN NIL // ----------------------------------- FUNCTION SetMyBrowser( oBrw, lAft ) // ----------------------------------- LOCAL cFormName := oBrw:cParentWnd, cTitle, oCol, ; hFont := GetFontHandle( "Bold" ) IF Empty( lAft ) SetProperty( cFormName, "MinWidth", 950 ) SetProperty( cFormName, "MinHeight", 430 ) cParent := cFormName WITH OBJECT oBrw :nHeightCell += 5 :nHeightHead += 12 :nClrFocuFore := CLR_BLACK :nClrFocuBack := COLOR_GRID :hFontSupHd := hFont :nHeightSuper := oBrw:nHeightHead END WITH cTitle := "Code" ADD SUPER HEADER TO oBrw FROM 1 TO 2 TITLE " Array" ADD SUPER HEADER TO oBrw FROM 3 TO oBrw:nColCount() TITLE cTitle FOR EACH oCol IN oBrw:aColumns oCol:hFontHead := hFont if hb_enumindex(oCol) == 4 oCol:cDataType := "M" endif NEXT ELSE oBrw:GetColumn( "ORDKEYNO" ):hFontFoot := hFont oCol := ATail( oBrw:aColumns ) ATail( oBrw:aSuperHead )[ 2 ] := oBrw:nColumn( oCol:cName ) IF oBrw:nLen > oBrw:nRowCount() oBrw:ResetVScroll( .T. ) ENDIF oBrw:SetNoHoles() oBrw:SetFocus() ENDIF RETURN .T. // editable browse (return .F. is readonly) // ----------------------------------- FUNCTION CountChildWindows // ----------------------------------- LOCAL i, nFormCount := Len ( _HMG_aFormHandles ), nCnt := 0 FOR i := 1 TO nFormCount IF _HMG_aFormType[ i ] <> "A" IF _IsWindowDefined ( _HMG_aFormNames[ i ] ) nCnt++ ENDIF ENDIF NEXT RETURN nCnt [/pre2]

krutoff: Я так понимаю, что динамическая высота строк TSBrowse не предусмотрена? Бывает очень длинная строка и ячейка ее не показывает, обрезает, даже если показывать через CRLF.

SergKis: krutoff пишет Я так понимаю, что динамическая высота строк TSBrowse не предусмотрена? есть немного с memo полями, переменные смотрите в коде[pre2] DATA nMemoHE // memo sizes on edit and view mode DATA nMemoWE // Height in lines and Width in pixels DATA nMemoHV // default: 3 lines height and 200 pixels width DATA nMemoWV и STATIC FUNCTION SetHeights( oBrw ) ... // Now for cells ... IF Empty( oBrw:nMemoHV ) IF At( Chr( 13 ), cHeading ) > 0 oBrw:nMemoHV := Len( hb_ATokens( cHeading, Chr( 13 ) ) ) ENDIF ENDIF DEFAULT oBrw:nMemoHV := 2 [/pre2] Предусмотреть динамическую высоту автоматом, по мне, трудно (тип С), т.к. каждому надо по разному от ширины колонки. Например, я часто использую схему ширина не > 45 символов и на tooltip ячейки вешаю полное содержимое, что бы получить больше колонок в просмотре и не исп. для поля С вставки CRLF для вертикального разбиения показа ячейки, т.к. это съедает строки в просмотре и в др. строках будут пустоты в ячейки, текст короче. PS Проще выделить место на окне показа или отдельное окно, в котором организовать показ длинных полей, при перемешении по тсб в Label-ах, GetBox-ах ReadOnly или EditBox ReadOnly или тсб с вертикальной раскладеой, как по полям одной записи в SBrowse. Ситуация с отдельным окном может оказаться предпочтительней, т.к. вызывать просмотр можно по кнопке или R\L клику



полная версия страницы