Форум » 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:....

Ответов - 300, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All

Haz: gfilatov2002 пишет: Конечно, я добавил обработку этих 2-х кодовых блоков в класс TsBrowse. Отлично Еще бы не помешал небольшой пример их использования... завтра постараюсь маленький примерчик сделать

Haz: Haz пишет: завтра постараюсь маленький примерчик сделать Вобщем как то так, в примере просто ловим изменение ширины и позиции в колонке и тупо пишем в INI При старте - читаем из INI [pre2] #include "minigui.ch" #include "TSBrowse.ch" MEMVAR aFont PROCEDURE Main LOCAL aStr := {} LOCAL cDbf := "TEST.DBF" LOCAL cAlias := "" LOCAL n := 0 SET DATE FORMAT 'DD.MM.YYYY' REQUEST DBFCDX RDDSETDEFAULT('DBFCDX') IF ! File( cDbf ) AAdd( aStr, { 'F1', 'D', 8, 0 } ) AAdd( aStr, { 'F2', 'C', 60, 0 } ) AAdd( aStr, { 'F3', 'N', 10, 2 } ) AAdd( aStr, { 'F4', 'L', 1, 0 } ) DbCreate( cDbf, aStr ) END USE (cDbf) ALIAS "TEST" NEW WHILE TEST->(RecCount()) < 100 TEST->(dbAppend()) TEST->F1 := Date() + n++ TEST->F2 := STR(n) TEST->F3 := n TEST->F4 := (n % 2) == 0 END DEFINE WINDOW Form_0 ; At 0, 0 ; WIDTH 600 ; HEIGHT 400 ; TITLE "TsBrowse Save/Restore settings Demo" ; MAIN ; NOMAXIMIZE NOSIZE DEFINE STATUSBAR STATUSITEM "Item 1" WIDTH 0 FONTCOLOR BLACK STATUSITEM "Item 2" WIDTH 230 FONTCOLOR BLACK STATUSITEM "Item 3" WIDTH 230 FONTCOLOR BLACK STATUSITEM "Item 4" WIDTH 230 FONTCOLOR BLACK DATE CLOCK KEYBOARD END STATUSBAR CreateBrowse() MsgBox( "Restoring from INI" ) END WINDOW DoMethod( "Form_0", "Center" ) DoMethod( "Form_0", "Activate" ) RETURN FUNCTION CreateBrowse() LOCAL oBrw LOCAL i LOCAL aStr := {} DEFINE TBROWSE oBrw ; AT 5, 5 ; ALIAS "TEST" ; OF Form_0 ; WIDTH Form_0.WIDTH - 2 * GetBorderWidth() ; HEIGHT Form_0.HEIGHT - GetTitleHeight() - GetTitleHeight() - ; GetProperty( "Form_0", "StatusBar", "Height" ) - 2 * GetBorderHeight() ; GRID ; COLORS { CLR_BLACK, CLR_BLUE } ; FONT "MS Sans Serif" ; SIZE 8 ; :SetAppendMode( .F. ) :SetDeleteMode( .F. ) :lNoHScroll := .T. :lCellBrw := .F. END TBROWSE ReadSettings( oBrw ) oBrw:nWheelLines := 1 oBrw:nClrLine := COLOR_GRID oBrw:lNoChangeOrd := TRUE oBrw:lCellBrw := TRUE oBrw:lNoVScroll := TRUE oBrw:hBrush := CreateSolidBrush( 242, 245, 204 ) // prepare for showing of Double cursor AEval( oBrw:aColumns, {| oCol| oCol:lFixLite := oCol:lEdit := TRUE } ) oBrw:nHeightCell += 10 oBrw:nHeightHead += 5 oBrw:SetColor( { 1 }, { RGB( 0, 12, 120 ) } ) oBrw:SetColor( { 2 }, { RGB( 242, 245, 204 ) } ) oBrw:SetColor( { 5 }, { RGB( 0, 0, 0 ) } ) oBrw:SetColor( { 6 }, { {|a, b, c| IF( c:nCell == b, { RGB( 66, 255, 236 ), RGB( 111, 183, 155 ) }, ; { RGB( 255, 255, 255 ), RGB( 200, 200, 200 ) } ) } } ) // cursor backcolor oBrw:bLineDrag := {|a,b,c| SaveSettings(a,b,c, "Width")} oBrw:bColDrag := {|a,b,c| SaveSettings(a,b,c, "Position")} RETURN NIL FUNC SaveSettings( a, b, c, cKey ) local hIni := HB_Hash() local cIniFile := SUBSTR( Exename(), 1, RAT( '.', Exename() ) ) + 'ini' local n := 0 local cSection := c:GetColumn(a):cName FOR n := 1 TO c:nColCount() hIni[ c:GetColumn(n):cName ] := hb_hash() hIni[ c:GetColumn(n):cName ]["Position"] := n hIni[ c:GetColumn(n):cName ]["Width"] := c:GetColumn(n):nWidth hIni[ c:GetColumn(n):cName ]["Heading"] := c:GetColumn(n):cHeading END hb_iniWrite( cIniFile, hIni ) MsgBox(IF( UPPER( cKey ) == "WIDTH", "Width changed and stored in INI", "Position Changed and stored in INI")) RETURN NIL FUNCTION ReadSettings( oBrw ) local hIni := HB_Hash() local cIniFile := SUBSTR( Exename(), 1, RAT( '.', Exename() ) ) + 'ini' local n := 0 local aArray := {}, aField := {} IF !File( cIniFile ) FOR n := 1 TO TEST->(FCOUNT()) hIni[ TEST->(Field(n)) ] := hb_hash() hIni[ TEST->(Field(n)) ]["Position"] := n hIni[ TEST->(Field(n)) ]["Width"] := 100 hIni[ TEST->(Field(n)) ]["Heading"] := "F" + NTOC(n) END hb_iniWrite( cIniFile, hIni ) aField := { "F2", "F1", "F3", "F4" } ELSE hIni := hb_iniRead( cIniFile ) FOR n := 1 TO TEST->(FCOUNT()) AADD( aArray, {TEST->(Field(n)), CTON(hIni[ TEST->(Field(n)) ]["Position"]) } ) END // Sorting column aSort( aArray,,, { |a,b| a[2] < b[2] } ) aEval( aArray, {|e| AADD( aField, e[1] )} ) END LoadFields( "oBrw", "Form_0", .F., aField) // Set column width oBrw:SetColSize( oBrw:nColumn( "F1" ), CTON(hIni[ "F1" ]["Width"]) ) oBrw:SetColSize( oBrw:nColumn( "F2" ), CTON(hIni[ "F2" ]["Width"]) ) oBrw:SetColSize( oBrw:nColumn( "F3" ), CTON(hIni[ "F3" ]["Width"]) ) oBrw:SetColSize( oBrw:nColumn( "F4" ), CTON(hIni[ "F4" ]["Width"]) ) RETURN NIL [/pre2]

gfilatov2002: Haz пишет: в примере просто ловим изменение ширины и позиции в колонке Благодарю за пример


Haz: gfilatov2002 пишет: Благодарю за пример Немного поленился и сохраняю все колонки , а не только ту которая изменилась. Но в блок номер измененной колонки передается и кому захочется - можно сделать самостоятельно .

gfilatov2002: gfilatov2002 пишет: Благодарю за пример Выкладываю итоговый вариант для проверки [pre]/* * MINIGUI - Harbour Win32 GUI library Demo * * Author: Igor Nazarov * * Revised by Grigory Filatov <gfilatov@inbox.ru> */ #include "minigui.ch" #include "TSBrowse.ch" REQUEST DBFCDX PROCEDURE Main LOCAL aStr := {} LOCAL cDbf := "TEST.DBF" LOCAL n := 0 SET DATE FORMAT 'DD.MM.YYYY' rddSetDefault( 'DBFCDX' ) IF ! File( cDbf ) AAdd( aStr, { 'F1', 'D', 8, 0 } ) AAdd( aStr, { 'F2', 'C', 60, 0 } ) AAdd( aStr, { 'F3', 'N', 10, 2 } ) AAdd( aStr, { 'F4', 'L', 1, 0 } ) dbCreate( cDbf, aStr ) ENDIF USE ( cDbf ) ALIAS "TEST" NEW WHILE TEST->( RecCount() ) < 100 TEST->( dbAppend() ) TEST->F1 := Date() + n++ TEST->F2 := Str( n ) TEST->F3 := n TEST->F4 := ( n % 2 ) == 0 END DEFINE WINDOW Form_0 ; At 0, 0 ; WIDTH 600 ; HEIGHT 400 ; TITLE "TsBrowse Save/Restore Settings Demo" ; MAIN ; NOMAXIMIZE NOSIZE ; ON RELEASE dbCloseArea( "TEST" ) DEFINE STATUSBAR STATUSITEM "Item 1" WIDTH 0 STATUSITEM "TsBrowse Power Ready" WIDTH 230 FONTCOLOR BLUE DATE CLOCK KEYBOARD END STATUSBAR CreateBrowse() END WINDOW DoMethod( "Form_0", "Center" ) DoMethod( "Form_0", "Activate" ) RETURN FUNCTION CreateBrowse() LOCAL oBrw DEFINE TBROWSE oBrw ; AT 5, 5 ; ALIAS "TEST" ; OF Form_0 ; WIDTH Form_0.Width - 2 * GetBorderWidth() ; HEIGHT Form_0.Height - GetTitleHeight() - ; GetProperty( "Form_0", "StatusBar", "Height" ) - 2 * GetBorderHeight() ; GRID ; COLORS { CLR_BLACK, CLR_BLUE } ; FONT "MS Sans Serif" ; SIZE 8 :SetAppendMode( .F. ) :SetDeleteMode( .F. ) :lNoHScroll := .T. :lCellBrw := .F. :lInsertMode := .T. END TBROWSE // Restoring settings from INI ReadSettings( oBrw ) oBrw:nWheelLines := 1 oBrw:nClrLine := COLOR_GRID oBrw:lNoChangeOrd := TRUE oBrw:lCellBrw := TRUE oBrw:lNoVScroll := TRUE oBrw:hBrush := CreateSolidBrush( 242, 245, 204 ) // prepare for showing of Double cursor AEval( oBrw:aColumns, {| oCol | oCol:lFixLite := oCol:lEdit := TRUE } ) oBrw:nHeightCell += 10 oBrw:nHeightHead += 5 oBrw:SetColor( { 1 }, { RGB( 0, 12, 120 ) } ) oBrw:SetColor( { 2 }, { RGB( 242, 245, 204 ) } ) oBrw:SetColor( { 5 }, { RGB( 0, 0, 0 ) } ) oBrw:SetColor( { 6 }, { { | a, b, oBr | IF( oBr:nCell == b, { RGB( 66, 255, 236 ), RGB( 111, 183, 155 ) }, ; { RGB( 255, 255, 255 ), RGB( 200, 200, 200 ) } ) } } ) // cursor backcolor oBrw:bLineDrag := { | a, b, oBr | SaveSettings( a, b, oBr, "Width" ) } oBrw:bColDrag := { | a, b, oBr | SaveSettings( a, b, oBr, "Position" ) } RETURN NIL STATIC FUNCTION SaveSettings( a, b, oBr, cKey ) LOCAL hIni := hb_Hash() LOCAL cIniFile := ChangeFileExt( Application.ExeName, '.ini' ) LOCAL n HB_SYMBOL_UNUSED( a ) HB_SYMBOL_UNUSED( b ) FOR n := 1 TO oBr:nColCount() hIni[ oBr:GetColumn( n ):cName ] := hb_Hash() hIni[ oBr:GetColumn( n ):cName ][ "Position" ] := hb_ntos( n ) hIni[ oBr:GetColumn( n ):cName ][ "Width" ] := hb_ntos( oBr:GetColumn( n ):nWidth ) hIni[ oBr:GetColumn( n ):cName ][ "Heading" ] := oBr:GetColumn( n ):cHeading NEXT hb_iniWrite( cIniFile, hIni ) MsgInfo( iif( Upper( cKey ) == "WIDTH", "Width changed and stored in INI", "Position changed and stored in INI" ) ) RETURN NIL STATIC FUNCTION ReadSettings( oBrw ) LOCAL hIni := hb_Hash() LOCAL cIniFile := ChangeFileExt( Application.ExeName, '.ini' ) LOCAL n LOCAL aArray := {}, aField := {} IF ! File( cIniFile ) FOR n := 1 TO TEST->( FCount() ) hIni[ TEST->( Field( n ) ) ] := hb_Hash() hIni[ TEST->( Field( n ) ) ][ "Position" ] := hb_ntos( n ) hIni[ TEST->( Field( n ) ) ][ "Width" ] := hb_ntos( 100 ) hIni[ TEST->( Field( n ) ) ][ "Heading" ] := "F" + NTOC( n ) NEXT hb_iniWrite( cIniFile, hIni ) // initial column order aField := { "F2", "F1", "F3", "F4" } ELSE hIni := hb_iniRead( cIniFile ) FOR n := 1 TO TEST->( FCount() ) AAdd( aArray, { TEST->( Field( n ) ), CTON( hIni[ TEST->( Field( n ) ) ][ "Position" ] ) } ) NEXT // Sorting column ASort( aArray,,, { | a, b | a[ 2 ] < b[ 2 ] } ) // Fill field array AEval( aArray, { | e | AAdd( aField, e[ 1 ] ) } ) ENDIF LoadFields( "oBrw", "Form_0", .F., aField ) // Set column width oBrw:SetColSize( oBrw:nColumn( "F1" ), CTON( hIni[ "F1" ][ "Width" ] ) ) oBrw:SetColSize( oBrw:nColumn( "F2" ), CTON( hIni[ "F2" ][ "Width" ] ) ) oBrw:SetColSize( oBrw:nColumn( "F3" ), CTON( hIni[ "F3" ][ "Width" ] ) ) oBrw:SetColSize( oBrw:nColumn( "F4" ), CTON( hIni[ "F4" ][ "Width" ] ) ) RETURN NIL [/pre]

Haz: gfilatov2002 пишет: Выкладываю итоговый вариант для проверки Проверил, работает однако только я забыл добавить в ReadSettings() oBrw:GetColumn( "F1" ):cHeading := hIni[ "F1" ][ "Heading" ] oBrw:GetColumn( "F2" ):cHeading := hIni[ "F2" ][ "Heading" ] oBrw:GetColumn( "F3" ):cHeading := hIni[ "F3" ][ "Heading" ] oBrw:GetColumn( "F4" ):cHeading := hIni[ "F4" ][ "Heading" ] а то заголовки из ини не читает

Alex_Cher: Haz пишет: Проверил, работает однако ... мужики, а у меня не работает, в чем проблема ? Application: C:\MiniGUI\SAMPLES\MY_BASIC\Ishod\demo.exe Date: 05.05.2016 Time: 08:56:40 Time from start: 0 days 0 hours 0 mins 0 secs Error BASE/1005 Message not found: TSBROWSE:_LINSERTMODE Called from __ERRRT_SBASE(0) Called from TSBROWSE:ERROR(0) Called from (b)HBOBJECT(0) Called from TSBROWSE:MSGNOTFOUND(0) Called from TSBROWSE:_LINSERTMODE(0) Called from CREATEBROWSE(91) Called from MAIN(60)

Haz: Alex_Cher пишет: мужики, а у меня не работает, в чем проблема ? Ждать новой сборки или самостоятельно внести все изменения в исходники библиотеки

gfilatov2002: Haz пишет: Ждать новой сборки Выпустил сегодня первый релиз-кандидат для новой сборки 16.05 Спмсок изменений см. ниже [pre2] * Fixed: The problem with a splitbox handling into the Modal windows (introduced in the build 16.03). Contributed by Grigory Filatov <gfilatov@inbox.ru> * Fixed: The problem with an assigning of the 'Value' property at deleting of the last row in a celled GRID. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo2.prg in folder \samples\Basic\Grid_7) * Enhanced: TOOLBAR control supports the changing of a ToolButton 'Picture' property at runtime for BMP, PNG, GIF and TIF images. You can set/get this property: - function syntax: SetProperty ( FormName, ToolButtonName, 'Picture', cImage ) cImage := GetProperty ( FormName, ToolButtonName, 'Picture' ) - pseudo-OOP syntax: FormName.ToolBarName.ToolButtonName.Picture := cImage FormName.ToolButtonName.Picture := cImage Requested by Ronaldo Batista Lima. Based upon a contribution by Claudio Soto <srvet@adinet.com.uy> (see demo1.prg in folder \samples\Basic\CONTAINERS\TOOLBAR) * Enhanced: The Browse and Grid controls supports now the code-blocks with an input Value as parameter in the VALIDMESSAGES array. Sample code: VALIDMESSAGES { 'Code Range: 0-1000', 'First Name Cannot Be Empty',; 'Last Name Cannot Be Empty',; {|uVal| MsgStop('Check your input value:' + CRLF + DtoC( uVal))}, , } Contributed by Grigory Filatov <gfilatov@inbox.ru> (see browse5.prg in folder \samples\Basic\BROWSE_3) * Modified: The 'Notify Balloon Click' event is available for MAIN window only. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see demo in folder \samples\Advanced\TrayBalloon_2) * Updated: The C-code cleaning for warnings at MinGW32 compiler with a warning level is set to max in hbmk2 utility. The foregoing warnings were found into the Minigui core, PropGrid and Socket libraries. Reported by Pete D. <pete_westg/at/yahoo.gr>. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Synchronized Extended HMG for compatibility with Official HMG: - Changed: BROWSE edit is always inplace without regarding about 'InPlace' value (Edit and Inplace properties has now the same meaning). Note: an obsolete behaviour may be restored via adding the definition of the constant HMG_LEGACY_ON to the header file minigui.ch. (see Browse2.prg in folder \samples\Basic\Browse_1) * Updated: Header file i_hmgcompat.ch for compatibility with mixed button's Picture Alignment 'Right' and 'Bottom' styles. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: 'Bos Taurus' Graphics Library version 1.06: - added the new functions BT_DrawTextEx(), BT_DrawTextSize(), BT_DrawPolygon(), BT_DrawPolyBezier(), BT_DrawArc(), BT_DrawChord() and BT_DrawPie(). Based upon a contribution of Claudio Soto <srvet@adinet.com.uy> (see source in folder \Source\BosTaurus) * Updated: PropSheet library source code (see in folder \Source\PropSheet): - Fixed: code cleaning for warnings with Harbour switch -w2. Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Adaptation FiveWin Class TSBrowse 9.0 in HMG: - added handling of the variable :lInsertMode in the method Edit(); - added the new code-blocks bLineDrag and bColDrag; - method DeleteRow() returns a logical value now. Contributed by Igor Nazarov and SergKis (see demo in folder \samples\Advanced\Tsb_linedrag) * Updated: HbSQLite3 library: - update for using SQLITE3 version 3.13.0dev (from 3.12.2). Contributed by Grigory Filatov <gfilatov@inbox.ru> * Updated: Harbour Compiler 3.2.0dev (SVN 2016-04-29 16:25). Contributed by Grigory Filatov <gfilatov@inbox.ru> (look at ReadMe.txt in folder \harbour) * New: 'Labeled TextBox pseudo-control' sample. Based upon a contribution of Pete D. <pete_westg/at/yahoo.gr> (see in folder \samples\Basic\Say_Get) * New: 'SplitBox Resize' sample. Based upon a contribution of Claudio Soto <srvet@adinet.com.uy> (see demo8.prg in folder \samples\Basic\CONTAINERS\Splitbox) * Updated: 'MiniGUI Browse' samples. Contributed by Grigory Filatov <gfilatov@inbox.ru> (see in folder \samples\Basic\BROWSE_3) * Updated: SQLCipher encryption for SQLite (https://www.zetetic.net/sqlcipher). It is Mingw32-based library only. Contributed by S.Rathinagiri <srgiri@dataone.in> (see in folder \samples\sqlcipher) * Updated: 'Minigui Form Designer Utility' sample: - added tree and timer controls; - added compilation via batch file build.bat; - fixed warnings in PRG output. Contributed by Rafael Moran <webrmoran[at]yahool.com>. Revised by Grigory Filatov <gfilatov@inbox.ru> (see in folder \Utils\xForm) [/pre2] Благодарю за поддержку данного проекта Также принимаются пожервования на PayPal от заинтересованных в выпуске новых сборок

Vlad04: 2 tsbrowsa- brw_1(таблица1) и brw_2 (таблица2) на форме. Имя формы через подстановку &cForm. Как организовать отображение в brw_2 данных, если таблица2 подчинена к таблице1(возможно set ralation или OrdScope или filter )

Haz: Vlad04 пишет: Как организовать отображение в brw_2 данных, если таблица2 подчинена к таблице1(возможно set ralation или OrdScope или filter ) если отношение один к одному то можно и реляцию, если один ко многим то только скоп или фильтр. Я с ADS ставлю фильтр ( он там быстрый ) в других RDD SCOPE предпочтительнее. Методика простая, на brw_1:bChange вешается процедура которая ставит скоп или фильтр brw_2 [pre2]brw_1:bChange := { || (brw_2:cAlias)->( тут фильтр или скоп ), brw_2:Reset() }[/pre2] Посмотри в примерах tsb_filter.prg, там фильтр ставиться в зависимости от содержимого строки ввода.

Vlad04: Haz brw_1:bChange := { || (brw_2:cAlias)->( тут фильтр или скоп ), brw_2:Reset() } Ошибка Reset не экспортируемый метод У меня так DEFINE TBROWSE Brw_1 ; AT 40, 10 ; OF &(cForm) ; ALIAS cBase ; WIDTH nWidth-5 ; HEIGHT nHeight-500 ; FONT "MS Sans Serif" ; SIZE 10 BOLD ON CHANGE {||ScRoll(cForm,Brw_1),UpdateItems(),brw_2:Reset() }

Vlad04: Из формы могу обратиться к объекту формы , к примеру FUNCTION TbMove(met,cForm,oBrw,cBase) // Select(oBrw:cAlias) Alias(cBase) DO CASE CASE met == 1 oBrw:GoTop() ... Но с объекта формы Brw_2 эту же функцию вызвать не могу !

gfilatov2002: Vlad04 пишет: Как организовать отображение в brw_2 данных, если таблица2 подчинена к таблице1 Попробуйте посмотреть как это сделано в базовом примере из папки samples\Advanced\TsBrowse [pre2]... Else // One to More @ 0, 0 TBROWSE oBrw2 ALIAS "sta" WIDTH 800 HEIGHT 185 ; FONT "Font_1" ON CHANGE SincroTb(obrw,invert) ; CELL oBrw2:LoadFields() oBrw2:nWheelLines := 1 @ 185, 0 TBROWSE oBrw ALIAS "Employee" WIDTH 800 HEIGHT 185 ; FONT "Font_1" CELL oBrw:LoadFields() oBrw:Exchange(3, 5) oBrw:ChangeFont(GetFontHandle( "Font_4" ), 0, 2 ) oBrw:ChangeFont(GetFontHandle( "Font_1" ), 0, 1 ) oBrw:ChangeFont(GetFontHandle( "Font_3" ), 3, 1 ) oBrw:nWheelLines := 1 FORM_10.OBRW2.SETFOCUS ... *------------------------------------------------------------------------------* Function SincroTb(obrw,Invert) *------------------------------------------------------------------------------* LOCAL cSelState default invert to .F. if invert cSelState := Employee->state oBrw:SetFilter( "State", cSelState ) else cSelState := SubStr(sta->state,1,2) oBrw:SetFilter( "State+Last", cSelState ) Endif _setitem("statusbar","Form_10",2,cSelState) oBrw:cPrefix := cSelState IF FieldGet(FieldPos("State")) != cSelState oBrw:Enabled(.f.) ELSE oBrw:Enabled(.T.) endif oBrw:Refresh( .T. ) oBrw:lHasChanged := .T. oBrw:lNoGrayBar := .T. return NIL [/pre2]Эта конструкция работает вполне прилично для небольших баз (до 5 тысяч записей)

Haz: Vlad04 пишет: Ошибка Reset не экспортируемый метод У меня так brw_1 j объявлен раньше Brw_2 и в момент интерпритации кода DEFINE BROWSE Brw_1 и прорисовке бровса выполняется его ::bChange который пока ничего не знает о brw_2 но его использует . Постоянно наступал на эти грабли когда один контрол использует данные другого ниже по тексту. Вариантов решения много, вот парочка 1 Располагать контролы в тексте PRG в порядке их логического использования ( если поменять brw_1 и brw_2 местами - скорее всего заработает ) 2 Использовать на форме флаг CHECKBOX lReady c Visible .F. и выставлять его в .Т. перед Form.Activate, далее примерно так IF( Getproperty( 'Form', lReady, 'Value'), brw_2:Reset(), NIL ) 3 вместо флага проверять существование переменной brw_2 и т.д. на что фантазии хватит PS всего кода ты не дал, поэтому и рекомендации общие

Vlad04: ок Все отлично, переставил brw_1 и brw_2 местами и все заработало ! Однако

Andrey: Всем привет. Очередная ошибка у меня. Делаю таблицу, вывод первой колонки делаю так: ADD COLUMN TO oBrwS HEADER "№№" ; DATA {|| OrdKeyNo() } ; ........... Вот результат: Стоит только маркером/курсором или мышкой сдвинуть ниже последней записи , как нумерация разрушается и при движении курсором меняется нумерация первой колонки: Как исправить (убрать) это изменение ?

Dima: Andrey пишет: DATA {|| OrdKeyNo() } ; OrdKeyNo() не нужно уточнить алиасом ?

Haz: Dima пишет: OrdKeyNo() не нужно уточнить алиасом ? Обязательно , OrdkeyNo() работает в текущей рабочей области , а какая она текущая из картинки не понять Думаю все станет ясно если написать так {|| Select() }

Andrey: Dima пишет: OrdKeyNo() не нужно уточнить алиасом ? Да можно. Это не поможет. Там удалённые записи в нумерацию встревают. Всего в базе 28 записей, из них 7 не удалённых !DELETED(). Фильтра нет. Т.е. использую просто SET DELETED ON P.S. пробовал поставить: DATA {|| (Alias())->(OrdKeyNo()) } - такая же фигня.



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