Форум » GUI » TSMulti » Ответить

TSMulti

krutoff: Хочу поделиться. Задача - отредактировать Memo-поле или большое символьное в TSBrowse-ARRAY по колонке oCol:lEditBox == .T. Прочитал предложения SergKis http://clipper.borda.ru/?1-1-1709733751228-00000593-000-10001-0#002.001.001.001.001.002 По Ctrl+W никак не выхожу на METHOD KeyDown( nKey, nFlags ) CLASS TSMulti. На окне Ctrl+W не задействована. Поставил отладку в метод KeyDown в TSMulti, TControl -проверил - не заходит. Пришлось использовать ON KEY CONTROL+W ACTION - блок взял у SergKis - спасибо! Но метод Save() TSMulti не присвоил новое значение полю в TSBrowse-ARRAY. Получилось спомощью такого кода - вместо метода Save() в ON KEY CONTROL+W ACTION поставил: oBrw:aColumns[ oBrw:nCell ]:oEdit:KeyDown(VK_TAB, 0) - все отработало!

Ответов - 7

Andrey: Делай самодостаточный пример. Так не понятно.

SergKis: Andrey пишет Делай самодостаточный пример. Так не понятно. Понятно все, где то отрубился обработчик к TsMulti ( ::Create("EDIT") ), т.к. нет вызовов[pre2] METHOD KeyDown( nKey, nFlags ) CLASS TSMulti _logfile(.T., Procname(), nKey, upper(chr(nKey)), nFlags) ... METHOD KeyChar( nKey, nFlags ) CLASS TSMulti _logfile(.T., Procname(), nKey, upper(chr(nKey)), nFlags) ... вызов есть тут METHOD HandleEvent( nMsg, nWParam, nLParam ) CLASS TSMulti _logfile(.T., Procname(), nMsg, nWParam, nLParam) RETURN ::Super:HandleEvent( nMsg, nWParam, nLParam ) [/pre2] Примеры с Memo тут https://TransFiles.ru/m049k

krutoff: Сергей, спасибо за пример! При запуске вашего demo.exe у меня получилась такая картинка click here Перекомпилировал у себя - и при вводе в в поле NOTES Ctrl+W не отрабатывает. demo2.exe ваш нативный - тоже - при редактировании в поле NOTES Ctrl+W не ловится. Версия Harbour MiniGUI Extended Edition 24.01 (Release)


gfilatov2002: krutoff пишет: при редактировании в поле NOTES Ctrl+W не ловится. Я добавил обработку Ctrl+W в пример demo2, и он отработал сохранение поля нормально. Полный код примера см. ниже [pre2] /* * MINIGUI - Harbour Win32 GUI library Demo */ #define _HMG_OUTLOG #include "minigui.ch" #include "tsbrowse.ch" #include "dbinfo.ch" // ----------------------------------- FUNCTION Main() // ----------------------------------- LOCAL cFont := "Tahoma", nSize := 10 LOCAL cAls := "TEST", cDbf LOCAL cFil := "test.dbf" SET OOP ON SET AUTOADJUST ON NOBUTTONS SET FONT TO cFont, nSize DEFINE FONT Normal FONTNAME cFont SIZE nSize DEFINE FONT Bold FONTNAME cFont SIZE nSize BOLD DEFINE FONT Italic FONTNAME cFont SIZE nSize ITALIC SET DEFAULT ICON TO GetStartupFolder() + "\demo.ico" fErase("_MsgLog.txt") cDbf := hb_dirBase() + cFil if !file( cDbf ) ; CreateTable() endif USE ( cDbf ) ALIAS ( cAls ) NEW DEFINE WINDOW sample AT 0, 0 WIDTH 640 HEIGHT 480 ; TITLE "Open Table via SBrowse" ; MAIN NOSHOW ; ON INIT _wPost( 0) ; ON RELEASE _wSend(98) This.Cargo := oHmgData() This.Cargo:cDbf := cDbf This.Cargo:cAls := cAls This.Cargo:aStru := (cAls)->( dbStruct() ) with object This.Object :Event( 0, {|ow| Local aData aData := my_Sbrowse(ow) _wSend( 1, ow, aData) _wSend(99, ow) Return Nil }) :Event( 1, {|ow,ky,aArr| ky := ow:Cargo:cAls IF Select(ky) > 0 (ky)->( dbZap() ) (ky)->( HMG_ArrayToDBF( aArr ) ) (ky)->( dbGoTop() ) ENDIF Return Nil }) :Event(98, {|ow|(ow:Cargo:cAls)->( dbCloseArea() ) }) :Event(99, {|ow| ow:Release() }) end with END WINDOW sample.Center() sample.Activate() RETURN NIL // ----------------------------------- FUNCTION my_SBrowse( ow ) // ----------------------------------- Local o := ow:Cargo Local bSetup := {|obrw,laft| SetMyBrowser(obrw, laft)} Local cTitle := "Test Browse: Right Click For Record View" Local cAls := o:cAls Local aData := (cAls)->( HMG_DbfToArray() ) SBrowse( aData, cTitle, bSetup,, 950, 430,,, .T. ) RETURN aData // ----------------------------------- FUNCTION CreateTable // ----------------------------------- LOCAL cT 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 cT := Repl(hb_ntos(RecNo()), 10) REPLACE NOTES WITH "Text line " + CRLF + cT dbAppend() REPLACE CODE WITH 'USA', NAME WITH 'United States of America', RESIDENTS WITH 305397000 cT := Repl(hb_ntos(RecNo()), 10) REPLACE NOTES WITH "Text line " + CRLF + cT dbAppend() REPLACE CODE WITH 'POR', NAME WITH 'Portugal', RESIDENTS WITH 10617600 cT := Repl(hb_ntos(RecNo()), 10) REPLACE NOTES WITH "Text line " + CRLF + cT dbAppend() REPLACE CODE WITH 'POL', NAME WITH 'Poland', RESIDENTS WITH 38115967 cT := Repl(hb_ntos(RecNo()), 10) REPLACE NOTES WITH "Text line " + CRLF + cT dbAppend() REPLACE CODE WITH 'AUS', NAME WITH 'Australia', RESIDENTS WITH 21446187 cT := Repl(hb_ntos(RecNo()), 10) REPLACE NOTES WITH "Text line " + CRLF + cT dbAppend() REPLACE CODE WITH 'FRA', NAME WITH 'France', RESIDENTS WITH 64473140 cT := Repl(hb_ntos(RecNo()), 10) REPLACE NOTES WITH "Text line " + CRLF + cT dbAppend() REPLACE CODE WITH 'RUS', NAME WITH 'Russia', RESIDENTS WITH 141900000 cT := Repl(hb_ntos(RecNo()), 10) REPLACE NOTES WITH "Text line " + CRLF + cT USE RETURN NIL // ----------------------------------- FUNCTION SetMyBrowser( oBrw, lAft ) // ----------------------------------- LOCAL cTitle, oCol, nCol LOCAL hFont := GetFontHandle( "Bold" ) LOCAL ow := _WindowObj( oBrw:cParentWnd ) LOCAL om := _WindowObj( _HMG_MainHandle ) LOCAL o := om:Cargo // main cargo IF Empty( lAft ) SetProperty( ow:Name, "MinWidth" , 950 ) SetProperty( ow:Name, "MinHeight", 430 ) ON KEY CONTROL+W OF &(ow:Name) ; ACTION {|| Local oBrw := This.oBrw.Object If oBrw:IsEdit // tsb field edit oBrw:aColumns[ oBrw:nCell ]:oEdit:Save() oBrw:SetFocus() EndIf Return Nil } 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 nCol := hb_enumindex(oCol) oCol:hFontHead := hFont oCol:cName := o:aStru[ nCol, 1 ] oCol:cDataType := o:aStru[ nCol, 2 ] oCol:cField := oCol:cName oCol:nFieldLen := o:aStru[ nCol, 3 ] oCol:nFieldDec := o:aStru[ nCol, 4 ] oCol:cHeading := oCol:cName IF oCol:cName == "NOTES" oCol:nWidth += 200 oCol:lEditBox := oCol:cDataType == "M" oCol:cDataType := "C" ELSEIF oCol:cName == "NAME" oCol:nWidth += 70 ENDIF NEXT ELSE ow:Enabler("Btn_1", .F.) ow:Enabler("Btn_2", .F.) oCol := oBrw:GetColumn( "ARRAYNO" ) oCol:hFont := GetFontHandle( "Italic" ) oCol:hFontFoot := hFont oCol:cDataType := Valtype(oBrw:GetValue(oCol)) FOR EACH oCol IN oBrw:aColumns ? hb_enumindex(oCol), oCol:cDataType, oCol:cName, oCol:cField NEXT oCol := ATail( oBrw:aColumns ) ATail( oBrw:aSuperHead )[ 2 ] := oBrw:nColumn( oCol:cName ) IF oBrw:nLen > oBrw:nRowCount() oBrw:ResetVScroll( .T. ) ENDIF oBrw:AdjColumns() oBrw:SetNoHoles() oBrw:SetFocus() ENDIF RETURN .T. // editable browse (return .F. is readonly) [/pre2]

krutoff: gfilatov2002 пишет: Я добавил обработку Ctrl+W в пример demo2 Спасибо, Григорий! Так и я о том же - Ctrl+W обрабатывается только через ON KEY CONTROL+W. По умолчанию, т.е. через методы KeyChar, KeyDown класса TSMulti (там это прописано) - не отрабатывает.

SergKis: krutoff пишет При запуске вашего demo.exe у меня получилась такая картинка У меня hmg 24.02 установлен в C:\MiniGuiBcc58, файл BATCH\minigui.cfg[pre2] # Basic configuration for Compile.bat MG_CMP=harbour MG_BCC=c:\borland\bcc58 MG_ROOT=c:\miniguiBcc58[/pre2] Сборка примера Compile.bat дает правильную картинку с SuperHeader, Header надписями и колонками растянутые, как надо. Ответить почему у вас так вышло, не смогу, не знаю. Пример этот взял из более ранних версий hmg. Перекомпилировал у себя - и при вводе в в поле NOTES Ctrl+W не отрабатывает. demo2.exe ваш нативный - тоже - при редактировании в поле NOTES Ctrl+W не ловится. Мой demo2.exe собран на tsbrowse.lib с изменениями, показанными выше, он рассчитан (так было раньше) на внутреннюю отработку Ctrl+W, но методы :KeyDown, :KeyChar не получили управление. Внешних установок Ctrl+W я не делал. Григорий, добавил и все отработало как надо.

krutoff: Ок, спасибо Всем!



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