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

Dima: SergKis пишет: попробуй oBrw:DrawSelect() Пробовал не пашет SergKis пишет: переменная oBrw - public Public

Dima: SergKis пишет: запустил 6 разных примеров к ним 3 exe Tsb_setArrayTo Не нужно запускать несколько примеров. Все в одном , там же есть кнопка TEST RUN ANOTHER WINDOW , нажми ее и будет 2 бровса , проделай как я выше описал и будет косяк. А вот если 2 разных EXE запустить с бровсами то между ними нет такой проблемы

Dima: Dima пишет: Переключаюсь мышкой на другой бровс и после возврашаюсь назад щелкая на той же записи , в этом случае фон курсора остался фоном не активного курсора А если щелкнуть на заголовке окна то все норм , если щелкать на бровсе то вот такая ерунда


SergKis: Dima пишет:Public тогда у тебя в ней объект tsb последнего запущенного окна, т.е. один объект на два окна и след. при повторном возврате цвета не в фокусе от др. тсв Для Public надо заводить имена уникальные для тсв, для Private к окну использования - может прокатить, но лучше в блоках кода исп. передаваемый параметр тсв в eval, как я показывал, надо один раз выписать параметры и потом использовать, тогда достаточно local oBrw

Dima: Сергей было так Public obrw Public obrw1 Public obrw2 Переделал Local obrw Local obrw1 Local obrw2 Проблема осталась

SergKis: Dima пишет:А если щелкнуть на заголовке окна то все норм , если щелкать на бровсе то вот такая ерунда Делал и по заголовкам и по строкам и с вкл едит и без и dblclic (в 2-х окнах) - нет описанного тобой. Когда кликаю на заголовок окна (в др.был едит) 1.закрывается едит, 2.фокус на др.окне, но на тсв нет выделенного курсора (нет фокуса), но стрека вниз и все ок или мышой. Словом не получаю описанного тобой

SergKis: Dima пишет:Проблема осталась Тогда по Якубовичу ... в студию

Dima: SergKis пишет: Делал и по заголовкам Да это я про свой пример писал. Cчас подробно опишу что сделать надо Запускаем пример из C:\MiniGUI\SAMPLES\Advanced\Tsb_SetArrayTo\ Жмем кнопку TEST RUN ANOTHER WINDOW , появилось второе окно Сдвигаем его левее прежнего окна , так что бы в обоих бровсах было видно колонку Order Display. На этом последнем окне в бровсе в колонке Order Display в записи где цифрь 1 жмем ВВОД и попадаем в режим редактирования. Ни чего более не клацаем. Наводим мышку на второй бровс (только не нужно тыкать на заголовке окна) и тоже в колонку Order Display на запись где цифра 1 , клацаем мышкой И стабильно падаем. Если и сейчас у тебя не получится , придется мне видео снимать Вот и видео https://cloud.mail.ru/public/9SNJ/3pp8to6DP

Dima: SergKis пишет: Тогда по Якубовичу ... в студию [pre2] #include "minigui.ch" #include "tsbrowse.ch" #define CLR_PINK RGB( 255, 128, 128) #define CLR_NBLUE RGB( 128, 128, 192) #define CLR_NBROWN RGB( 130, 99, 53) #define CLR_1 RGB( 190, 215, 190 ) #define CLR_2 RGB( 230, 230, 230 ) #define CLR_3 RGB( 217, 217, 255 ) #define CLR_ELLOW1 Rgb( 128, 255, 128 ) #define CLR_ELLOW2 Rgb( 0, 217, 0 ) #define CLR_ELLOW3 Rgb( 113, 113, 0 ) #define CLR_ELLOW Rgb( 255, 255, 193 ) #define LWA_ALPHA 0x02 #define CLR_WGRAY Rgb( 210, 210, 210 ) EXTERNAL ADSKEYCOUNT , ADSGetRelKeyPos ,AdsKeyNo Func Sirie() local hw local a local b local i local abmp local ngh local sea:="" local nsea:=0 local arw local aStates:={" ","Метр ","Шт. ","Кг. ","Лист ","М/П ","Литр "} local xr:=0 local xy:=0 local tmpbrw public obrw IF IswindowDefined("SPR_SIR") DoMethod("SPR_SIR", "Restore") DoMethod("SPR_SIR", "Setfocus") if _IsControlDefined("obrw","SPR_SIR") oBrw:SetFocus() endif return nil endif if !usebase("sr",{"sr"},"s_sirec") msgstop("Не могу открыть базу") return nil endif s_sirec->(ordsetfocus("naim")) hw:=GetProperty("Form_0", "Height")-GetProperty("FORM_0", "StatusBar", "Height"); -GetMenubarHeight()-GetTitleHeight()-2*GetBorderHeight() a:=GetProperty("Form_0", "Row")+GetBorderHeight()+GetTitleHeight()+GetMenubarHeight() b:=(GetProperty("Form_0", "Width") - (GetProperty("Form_0", "Width")*0.55))/2 arw:=GetRowColExceptMain() if !empty(arw) a:=arw[1]+GetTitleHeight() b:=arw[2]+GetTitleHeight() endif DEFINE WINDOW SPR_SIR AT a , b WIDTH WidthWindow_MyApl*0.55 HEIGHT hw TITLE "Справочник сырья" CHILD ; ICON "AMAINICON" ; NOMAXIMIZE ; NOSIZE ; ON RELEASE {||Closebase({"s_sirec"}) } ; ON INTERACTIVECLOSE {|| .t.} ; ON GOTFOCUS {|| oBrw:SetFocus(),obrw:Refresh(.f.) ,Mcargo:=_HMG_ThisFormName } DEFINE TBROWSE oBrw AT 40,0 ALIAS "s_sirec" ; OF SPR_SIR WIDTH SPR_SIR.WIDTH-2*GetBorderWidth() ; HEIGHT SPR_SIR.HEIGHT-GetTitleHeight()-2*GetBorderHeight()-50-40 ; FONT "Lucida Console" SIZE 10 LoadFields("obrw","SPR_SIR",.t.,{"id","naim","ed","cod"}) oBrw:SetColSize( 1, 50 ) oBrw:aColumns[1]:lEdit := FALSE oBrw:aColumns[ 1 ]:cHeading :="ID" oBrw:aColumns[ 1 ]:cPicture :="@Z 99999" oBrw:aColumns[ 2 ]:cHeading :="Наименование" oBrw:aColumns[ 2 ]:cPicture:=repl("x",60) oBrw:aColumns[ 3 ]:cHeading :="Ед.изм" oBrw:aColumns[ 3 ]:cPicture :=repl("x",5) oBrw:SetData( 3,NIL , astates ) oBrw:aColumns[3]:bEditing := { |uVar,oBr| oBr:aColumns[oBr:nCell]:oEdit:LButtonDown() } oBrw:aColumns[3]:bEditEnd := { |uVal,oBr,lSave| Save_ed(uVal,oBr,lSave) } oBrw:SetColSize( 3, 70 ) oBrw:bGotFocus:={|| obrw:Refresh(.t.),obrw:setfocus()} oBrw:aColumns[ 4 ]:cHeading :="Код"+CRLF+"склада" oBrw:aColumns[ 4 ]:cPicture :="@Z 99999" ADD COLUMN TO obrw HEADER "Остаток" SIZE 100 DATA {|| 0 } oBrw:aColumns[ 5 ]:cPicture :="@Z 99999.999" for i := 1 To oBrw:nColCount() oBrw:aColumns[ i ]:nEditMove := DT_DONT_MOVE oBrw:aColumns[ i ]:lFixLite := TRUE next obrw:GetColumn("naim"):bPrevEdit := { |a, b, lLock| If( lLock := (b:cAlias)->(RLock()), (b:cAlias)->(dbUnLock()), Msgstop("Запись заблокирована","Внимание")), lLock } obrw:GetColumn("cod"):bPrevEdit := { |a, b, lLock| If( lLock := (b:cAlias)->(RLock()), (b:cAlias)->(dbUnLock()), Msgstop("Запись заблокирована","Внимание") ), lLock } obrw:GetColumn("ed"):bPrevEdit := { |a, b, lLock| If( lLock := (b:cAlias)->(RLock()), (b:cAlias)->(dbUnLock()), Msgstop("Запись заблокирована","Внимание") ), lLock } obrw:nWheelLines := 2 obrw:nClrLine := COLOR_GRID obrw:SetAppendMode( .F. ) obrw:SetDeleteMode( .t.,.f.,{|| msgokCancel("Удалить "+alltrim((obrw:cAlias)->naim)+CRLF+"с ID "+ntoc((obrw:cAlias)->id)+" ?","Внимание")} ) obrw:lNoHScroll := .f. obrw:lCellBrw := .T. obrw:nfreeze:=1 obrw:lNoChangeOrd := .f. obrw:nHeightCell += 5 obrw:nHeightHead += 6 obrw:lLockFreeze := .t. obrw:lCellBrw := .t. obrw:nAdjColumn := 2 obrw:Set3DText( .T., .t.,, 2 ) obrw:lNoMoveCols:=.t. obrw:bOnEscape := {|| DoMethod(oBrw:cParentWnd, "Release") } oBrw:bUserKeys := {|nKey,nFlg,oBr| UserKeys(nKey, nFlg, oBr) } oBrw:SetColor( { 1 ,2}, { CLR_BLACK ,rgb(255,255,206) } ) oBrw:SetColor( { 2 }, { {|| if((obrw:cAlias)->lc,RGB(130,255,130),rgb(255,255,206)) } },1) oBrw:SetColor( { 5 }, { { || { Rgb( 66, 255, 236 ), Rgb( 11, 183, 155 )}}} ) oBrw:SetColor( { 6 }, { { |a,b,c| IF( c:nCell == b,; {RGB( 255, 255, 0 ), RGB( 210, 210, 0 )},; { Rgb( 198, 226, 255 ), Rgb( 159, 207, 255 ) } ) } } ) oBrw:SetColor( { 6 }, { { |a,b,c| -RGB(117,0,234) } },1) oBrw:cToolTip := {|oBr, nCol, nRow| if(obr:nrowpos==nrow,"Удаление записи , добавить новую запись , отметка ( правая кнопка мышки )","") } END TBROWSE tmpbrw:=TBrw_Obj( "obrw", ThisWindow.name ) xr:=ThisWindow.HEIGHT-GetTitleHeight()-2*GetBorderHeight()-40 xy:=4 DEFINE BUTTONeX Button_1 ROW xr COL xy WIDTH 120 HEIGHT 35 CAPTION "Добавить (Ins)" ACTION {|| if(msgokCancel("Добавить новую запись ?","Внимание"),addrecs(tmpbrw,"ID"),),tmpbrw:SetFocus() } FONTNAME "Arial" FONTSIZE 9 TOOLTIP "Добавить новую запись" FONTBOLD .t. FONTITALIC .F. FONTUNDERLINE .F. FONTSTRIKEOUT .F. ONGOTFOCUS Nil ONLOSTFOCUS Nil HELPID Nil FLAT .F. TABSTOP .T. VISIBLE .T. TRANSPARENT .t. Picture "new" END BUTTONEX xy+=getproperty(ThisWindow.name,"Button_1","Width")+11 DEFINE BUTTONeX Button_2 ROW xr COL xy//135 WIDTH 120 HEIGHT 35 CAPTION "Удалить (Del)" ACTION {|| tmpbrw:deleterow(),tmpbrw:SetFocus() } FONTNAME "Arial" FONTSIZE 9 TOOLTIP "Удалить запись" FONTBOLD .t. FONTITALIC .F. FONTUNDERLINE .F. FONTSTRIKEOUT .F. ONGOTFOCUS Nil ONLOSTFOCUS Nil HELPID Nil FLAT .F. TABSTOP .T. VISIBLE .T. TRANSPARENT .t. Picture "cancel" END BUTTONEX xy+=getproperty(ThisWindow.name,"Button_2","Width")+11 DEFINE BUTTONeX Button_3 ROW xr COL xy WIDTH 120 HEIGHT 35 CAPTION "Изменить (F4)" ACTION {|| tmpbrw:SetFocus() ,_PushKey(VK_SPACE)} FONTNAME "Arial" FONTSIZE 9 TOOLTIP "Изенить ячейку" FONTBOLD .t. FONTITALIC .F. FONTUNDERLINE .F. FONTSTRIKEOUT .F. ONGOTFOCUS Nil ONLOSTFOCUS Nil HELPID Nil FLAT .F. TABSTOP .T. VISIBLE .T. TRANSPARENT .t. ICON "edit2" END BUTTONEX xy+=getproperty(ThisWindow.name,"Button_3","Width")+20 DEFINE BUTTONeX Button_4 ROW xr COL xy WIDTH 28 HEIGHT 28 ACTION {|| tmpbrw:GoDown(),tmpbrw:SetFocus() } TOOLTIP "На запись вперед" FLAT .t. TABSTOP .T. VISIBLE .T. TRANSPARENT .t. icon "skipf" END BUTTONEX xy+=getproperty(ThisWindow.name,"Button_4","Width") DEFINE BUTTONeX Button_5 ROW xr COL xy WIDTH 28 HEIGHT 28 ACTION {|| tmpbrw:Refresh(),tmpbrw:SetFocus() } TOOLTIP "Освежить таблицу" FLAT .t. TABSTOP .T. VISIBLE .T. TRANSPARENT .t. icon "ref" END BUTTONEX xy+=getproperty(ThisWindow.name,"Button_5","Width") DEFINE BUTTONeX Button_6 ROW xr COL xy WIDTH 28 HEIGHT 28 ACTION {|| tmpbrw:Goup(), tmpbrw:SetFocus() } TOOLTIP "На запись назад" FLAT .t. TABSTOP .T. VISIBLE .T. TRANSPARENT .t. icon "skipb" END BUTTONEX DEFINE LABEL Message ROW 1 COL 1 WIDTH obrw:aColumns[2]:nwidth*0.75 HEIGHT 16 VALUE 'Поиск по названию' FONTBOLD .T. CENTERALIGN .T. END LABEL DEFINE LABEL Message1 ROW 1 COL obrw:aColumns[2]:nwidth+obrw:aColumns[1]:nwidth+2 WIDTH obrw:aColumns[3]:nwidth+obrw:aColumns[4]:nwidth/2 HEIGHT 16 VALUE 'Поиск кода' FONTBOLD .T. CENTERALIGN .T. END LABEL @ 18, 1 BTNTEXTBOX Text_1 WIDTH obrw:aColumns[2]:nwidth*0.75 ; HEIGHT 20 VALUE sea FONT "Lucida Console" SIZE 10 ; ACTION {|| Nsea( SPR_SIR.Text_1.Value,obrw,"naim" ),obrw:setfocus() } ; ON ENTER {|| Nsea( SPR_SIR.Text_1.Value,obrw,"naim"), Domethod( "SPR_SIR", "Text_1", "Setfocus")} ; PICTURE "find" BUTTONWIDTH 20 TOOLTIP "Поиск вхождения строки в наименование"; BACKCOLOR {{255,255,255},{255,255,200},{200,255,255}} ; FONTCOLOR {{0,0,0},{255,255,200},{0,0,255}} @ 18, obrw:aColumns[2]:nwidth+obrw:aColumns[1]:nwidth+2 ; BTNTEXTBOX Text_2 WIDTH obrw:aColumns[3]:nwidth+obrw:aColumns[4]:nwidth/2 ; HEIGHT 20 VALUE sea FONT "Lucida Console" SIZE 10 ; ACTION {|| if(codsea( SPR_SIR.Text_2.Value,obrw,"cod" ) ,eval( {||_pushkey( VK_TAB ) ,setproperty( "SPR_SIR", "obrw", "Setfocus")}),)} ; NUMERIC ; ON ENTER {|| if(codsea( SPR_SIR.Text_2.Value,obrw,"cod" ) ,setproperty( "SPR_SIR", "obrw", "Setfocus"),Domethod( "SPR_SIR", "Text_2", "Setfocus") )};//, Domethod( "SPR_SIR", "Text_2", "Setfocus")} ; PICTURE "find" BUTTONWIDTH 20 TOOLTIP "Точный поиск по коду" ; BACKCOLOR {{255,255,255},{255,255,200},{200,255,255}} ; FONTCOLOR {{0,0,0},{255,255,200},{0,0,255}} DEFINE CONTEXT MENU CONTROL oBrw MENUITEM "Добавить новую запись" ACTION {|| if(msgokCancel("Добавить новую запись ?","Внимание"),addrecs(obrw,"ID"),),oBrw:SetFocus() } IMAGE "new" MENUITEM "Удалить текущую запись" ACTION {|| obrw:deleterow() } IMAGE "cancel" SEPARATOR MENUITEM "Пометка (снять/поставить)" ACTION { || Otmet(obrw) } END MENU END WINDOW DoMethod(oBrw:cParentWnd, oBrw:cControlName, "SetFocus") ACTIVATE WINDOW SPR_SIR SetfocusChild() return nil [/pre2] В другом справочнике все примерно так же так как поля те же Отличие только в имени базы , имени окна , да и имени бровса ( Public OBRW1) Где по твоему косяк ? PS Возможно не нужно было мне выкладывать описания кнопок , ну да ладно. Там по самому бровсу не так и много. Постом выше добавил видео

SergKis: Dima пишет:клацаем мышкой И стабильно падаем. нету такого, exe положил, знаешь где, глянь на нем.

Dima: SergKis пишет: нету такого, exe положил, знаешь где, глянь на нем. На твоем тоже самое , как в кино что я снял. Падает. PS Win7 PS2 Чудеса

Dima: Положил видео к тебе

SergKis: Dima пишет На этом последнем окне в бровсе в колонке Order Display в записи где цифрь 1 жмем ВВОД и попадаем в режим редактирования. Ни чего более не клацаем. Наводим мышку на второй бровс (только не нужно тыкать на заголовке окна) и тоже в колонку Order Display на запись где цифра 1 , клацаем мышкой И стабильно падаем. и по видео и по описанию и 5 мин. подряд - все ok

Dima: SergKis пишет: и по видео и по описанию и 5 мин. подряд - все ok блин мне грустно )) Якубовича не смотрел выше ( я выложил сырец )? Там примерно тоже возникает как и в C:\MiniGUI\SAMPLES\Advanced\Tsb_SetArrayTo\ Такое впечатление что оба бровса где то пересеклись по данным , но судя по сырцу правильно же все. ЗЫ Под BCC и MINGW одинаково глючит

SergKis: Dima пишет я выложил сырец взял, попробовал собрать, но ф-й не хватает и базы. точнее не глядел - тыкал пример и так и сяк

Dima: SergKis Он был дан не для сборки а просто посмотреть опытным глазом на описание бровса. Но я так подозреваю что если у тебя нет косяка в Tsb_SetArrayTo а у меня он есть тогда и сборка моего сырца ни чего не даст , у тебя все будет нормально. Проверил работу своей проги на win 2008 те же косяки как и в Tsb_SetArrayTo

SergKis: Dima посмотрел, вроде нормально, но Haz с Андреем обсуждали local в блоке кода и вопросы по содержимому были. В примерах от Андрея, были похожие штуки и вроде как от одной переменной oBrw, переведя на private (3 или 5 tsb одной ф-ей создавалось\обслуживалось) - вроде исправилось. Точнее он скажет, чем закончилось у него

Dima: Функции у меня разные на бровсы. Пробнул Private - до лампочки. Можно конечно пойти другим путем , но пока не придумал как реализовать правильно. Есть только сырая и не продуманная идея. Вызван один справочник , вызываю другой (окна у них CHILD) и тогда сворачиваю окно первого справочника. Как то так в первом приближении. А если их открыто более одного и при закрытии последнего вызванного какой из них восстанавливать я пока не придумал , думаю ... В консоли все проще

SergKis: Dima пишет какой из них восстанавливать я пока не придумал ...В консоли все проще Так делай похоже. В MDI у нас childmdi окна всегда в полное mdi main окно, новое закрывает предыдущее и не важно есть оно или уничтожено (предыдущее) про Ctrl+Tab клиент не помнит и снова к справочнику обращается через меню\кнопку, потому можно старые окна уничтожать (сохранив позиции фокуса recno, nCell, nRowpos, ...) и делать по новой. Та даже лишнх ресурсов не держишь. И для клиента путаницы из окон нет, очень похоже как в консоли

Dima: Идею понял Сергей. В ON INIT окна CHILD это уже сделал При закрытии окна тоже Борюсь пока с получением фокуса в ON GOTFOCUS , думаю справлюсь , прикольно получается :) Если что спрошу.



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