Форум » GUI » Новая версия Расширенного релиза библиотеки MiniGUI (часть VI ) (продолжение) » Ответить

Новая версия Расширенного релиза библиотеки MiniGUI (часть VI ) (продолжение)

gfilatov: Начало темы находится здесь, а теперь АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Готовится к опубликованию новая сборка №48, которая выйдет в конце недели. Если у Вас есть интересные наработки для включения в новый релиз, то сейчас самое удобное время для их отправки мне Кратко, что нового: - исправление обнаруженных ошибок и неточностей кода; - новый класс HEADERIMAGE для Grid и Browse; - свойство Address в Hyperlink может теперь открывать папку или файл на диске; - добавлен NOTABSTOP класс для Browse; - поддержка пользовательских компонентов (заимствована из оффициального релиза); - расширения и исправления в библиотеках TsBrowse и PropGrid; - обновлены сборки Харбор и HMGS-IDE; - новые и обновленные старые примеры (как обычно ).

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

gfilatov2002: SergKis пишет: тогда в боке кода будет среда This для контрола GETBOX Предложение интересное, но смущает значение переменной __mvGet( ::name ), которая передается вторым параметром. Там должен быть числовой параметр, а Вы передаете строковый Или я что-то упустил

SergKis: gfilatov2002 пишет Или я что-то упустил [pre2] FUNCTION _DefineGetBox ( ControlName, ParentFormName, x, y, w, h, Value, ; ... k := _GetControlFree() ... Public &mVar. := k ... oget := Get() oget:New( -1, -1, { | x | iif( x == NIL, oget:cargo, oget:cargo := x ) }, '', cPicture ) oget:cargo := Value oget:preblock := when oget:postblock := valid oget:message := cmessage oget:name := mVar oget:control := ControlHandle oget:SetFocus() oget:original := oGet:buffer ... [/pre2] Это имя переменной, в которой определен индекс контрола и __mvGet( ::name ) дает из public переменной номер индекса, можно проверять на наличие переменной, но это излишне, т.к. объект существует пока есть контрол GETBOX

gfilatov2002: SergKis пишет: дает из public переменной номер индекса Ok, принято


gfilatov2002: Подготовил 3-ю бета-версию для новой сборки 21.03 Что нового (кратко): * Implementation of UNICODE support in the MiniGUI core libraries. * Fixed ANIGIF control: restored a proper handling of the DELAY clause (bug was introduced in the build 20.10 (update 2)). * The Tab page(s) at owner-draw colored TAB control supports now PNG, GIF and TIF images. The 'Transparent' property will be added to these images automatically. * Updated 'Open Table InSpector' sample: - added the source code for the OTIS library version 1.20 b01; - updated documentation (look at \Doc folder). * Updated SQLite3 library. * Updated some examples for UNICODE support. Поддержка уникода потребовала серьезного пересмотра Си-кода ядра библиотеки Возможно, что-то я упустил из виду...

Andrey: Очень ждём !

SergKis: gfilatov2002 Небольшая правка[pre2] CLASS TWndData //--------------------------------------------------- ... ACCESS VarName INLINE ::cVar ACCESS FocusedControl INLINE _GetFocusedControl ( ::cName ) ... METHOD SetFocus( xName ) INLINE iif( empty(xName), SetFocus( ::nHandle ), ; iif( HB_ISOBJECT(::GetObj(xName)), ::GetObj(xName):SetFocus(), DoMethod(::cName, xName, "SetFocus") ) ) ... [/pre2]

gfilatov2002: SergKis пишет: Небольшая правка Принято с благодарностью

SergKis: gfilatov2002 Правка по колонке тсб[pre2] METHOD ToWidth( uLen, nKfc, lHeader ) CLASS TSColumn LOCAL nWidth, nLen, cTyp, cChr := 'B', hFont := ::hFont DEFAULT nKfc := 1 IF HB_ISLOGICAL( lHeader ) hFont := iif( lHeader, ::hFontHead, ::hFontFoot ) DEFALT hFont := ::hFont ENDIF If HB_ISCHAR( uLen ) cChr := uLen ElseIf ! Empty( ::cPicture ) .and. HB_ISCHAR( ::cPicture ) If Empty( uLen ) ... nWidth := GetTextWidth( 0, cChr, hFont ) ... [/pre2]

SergKis: PS Возможно такой вариант лучше ?[pre2] If HB_ISCHAR( uLen ) IF CRLF $ uLen cChr := "" FOR EACH uLen IN hb_ATokens( uLen ) IF Len( uLen ) > Len( cChr ) ; cChr := uLen ENDIF NEXT ELSE cChr := uLen ENDIF ElseIf ! Empty( ::cPicture ) .and. HB_ISCHAR( ::cPicture ) [/pre2]

gfilatov2002: SergKis пишет: Возможно такой вариант лучше ? Да, в таком случае учитываются многострочные ячейки... Благодарю за помощь

gfilatov2002: Опубликована новая сборка 21.03 для BCC 5.8.2 и компиляторов Harbour и xHarbour. Базовый дистрибутив для кодировки ANSI находится по адресу http://hmgextended.com/files/CONTRIB/hmg-21.03-setup.exe Огромная благодарность Сергею Киселеву за помощь при подготовке этой сборки P.S. Я также подготовил архив для UNICODE сборки 21.03, который доступен всем, кто решит поддержать разработку библиотеки.

SergKis: gfilatov2002 Небольшая правка, упустил слегка (согласовать TWndData и TCnlData)[pre2] CLASS TWndData ... ACCESS WO INLINE ::oCargo ACCESS WP INLINE ::oProp METHOD SetProp( xKey, xVal ) INLINE ::oProp:Set( xKey, xVal ) METHOD GetProp( xKey ) INLINE iif( pCount() > 0, ::oProp:Get( xKey ), ::oProp ) ... CLASS TCnlData INHERIT TWndData ... METHOD GetProp( xKey ) INLINE iif( pCount() > 0, ::oWin:oProp:Get( xKey ), ::oWin:oProp ) ... Применять DEFINE WINDOW ... ... WITH OBJECT (This.Object):GetProp() :nTable := 3 :cTable := "oReport11" ... END WITH ... (This.Object):Event(20, {|ow| LOCAL cBrw, nBrw WITH OBJECT ow:GetProp() // или ow:WP cBrw := :cTable nBrw := :nTable ... END WITH ... RETURN NIL }) [/pre2] подготовил архив для UNICODE Можно получить в личке, для пощупать

SergKis: gfilatov2002 ACCESS WO INLINE ::oCargo ACCESS WP INLINE ::oProp В TWndData есть, глаз замылился

gfilatov2002: SergKis пишет: ACCESS WO INLINE ::oCargo ACCESS WP INLINE ::oProp Благодарю за помощь Уже обновил по-быстрому мартовскую сборку

SergKis: gfilatov2002 Что не так делаю в unicode сборке ? prg -> utf8 с bom, поставил SET CODEPAGE TO UNICODE собрал exe и тсб с lEdit := .T. USE ... без указания CDP пытаюсь в колонку CITY добавить в конец RU русскую букву и на добавляет, а EN буквы все ok! Пример APP_OOPREPORT\demo.prg поправил слегка [pre2] п»ї/* * MINIGUI - Harbour Win32 GUI library Demo * */ #include "hmg.ch" #include "tsbrowse.ch" REQUEST HB_CODEPAGE_RU1251 REQUEST DBFCDX FIELD FIRST, LAST, AGE, STATE, CITY, INCOMING, OUTLAY *-----------------------------------------------------------------------------* FUNCTION Main() *-----------------------------------------------------------------------------* LOCAL nY, nX, nW, nH, hSpl, oTabl, cAlias LOCAL cWnd := 'wMain' SET CODEPAGE TO UNICODE RddSetDefault("DBFCDX") SET CENTURY ON SET DATE GERMAN SET DELETED ON SET EXCLUSIVE ON SET EPOCH TO 2000 SET AUTOPEN ON SET EXACT ON SET SOFTSEEK ON SET NAVIGATION EXTENDED SET FONT TO "Arial", 11 SET DEFAULT ICON TO "hmg_ico" *-------------------------------- SET OOP ON *-------------------------------- DEFINE FONT Normall FONTNAME _HMG_DefaultFontName ; SIZE _HMG_DefaultFontSize DEFINE FONT FontBold FONTNAME _HMG_DefaultFontName ; SIZE _HMG_DefaultFontSize BOLD DEFINE FONT FontNorm FONTNAME "Courier New" ; SIZE _HMG_DefaultFontSize USE Employee ALIAS BASE SHARED NEW cAlias := Alias() DEFINE WINDOW &cWnd AT 0,0 WIDTH 950 HEIGHT 650 ; TITLE 'MiniGUI Demo for TBrowse report' ; MAIN NOMAXIMIZE NOSIZE ; ON RELEASE dbCloseAll() ; ON INTERACTIVECLOSE (This.Object):Action DEFINE STATUSBAR BOLD STATUSITEM '' ACTION Nil STATUSITEM '' WIDTH 80 ACTION Nil STATUSITEM '' WIDTH 430 ACTION Nil END STATUSBAR DEFINE SPLITBOX HANDLE hSpl DEFINE TOOLBAR ToolBar_1 CAPTION "REPORT" BUTTONSIZE 52,32 FLAT BUTTON E0 CAPTION ' ' PICTURE 'cabinet' ACTION Nil ; SEPARATOR BUTTON 01 CAPTION 'First' PICTURE 'n1' ; TOOLTIP 'Column report FIRST Ctrl+1, Shift+1' ; ACTION _wPost(1) SEPARATOR BUTTON 02 CAPTION 'Last' PICTURE 'n2' ; TOOLTIP 'Column report LAST Ctrl+2, Shift+2' ; ACTION _wPost(2) SEPARATOR BUTTON 03 CAPTION 'Age' PICTURE 'n3' ; TOOLTIP 'Column report AGE Ctrl+3, Shift+3' ; ACTION _wPost(3) SEPARATOR BUTTON 04 CAPTION 'State' PICTURE 'n4' ; TOOLTIP 'Column report STATE Ctrl+4, Shift+4' ; ACTION _wPost(4) SEPARATOR BUTTON 05 CAPTION 'City' PICTURE 'n5' ; TOOLTIP 'Column report CITY Ctrl+5, Shift+5' ; ACTION _wPost(5) SEPARATOR BUTTON 06 CAPTION 'State ?' PICTURE 'n6' ; TOOLTIP 'Column report STATE + Left(LAST, 1) Ctrl+6, Shift+6' ; ACTION _wPost(6) SEPARATOR BUTTON 07 CAPTION 'City ?' PICTURE 'n7' ; TOOLTIP 'Column report CITY + Left(LAST, 1) Ctrl+7, Shift+7' ; ACTION _wPost(7) SEPARATOR END TOOLBAR DEFINE TOOLBAR ToolBar_2 CAPTION "" BUTTONSIZE 42,32 FLAT BUTTON 99 CAPTION 'Exit' PICTURE 'exit' ACTION _wPost(99) END TOOLBAR END SPLITBOX WITH OBJECT This.Object // ---- Window events // StatusBar :StatusBar:Say(MiniGUIVersion(), 3) // ToolBar 1 :Event( 1, {|ow,ky| Report(ow, ky) } ) :Event( 2, {|ow,ky| Report(ow, ky) } ) :Event( 3, {|ow,ky| Report(ow, ky) } ) :Event( 4, {|ow,ky| Report(ow, ky) } ) :Event( 5, {|ow,ky| Report(ow, ky) } ) :Event( 6, {|ow,ky| Report(ow, ky) } ) :Event( 7, {|ow,ky| Report(ow, ky) } ) // ToolBar 2 :Event( 99, {|ow | ow:Release() } ) // Tsb. Right click - context menu :Event( 90, {|ow | MenuReport(ow) } ) // StatusBar :Event( 91, {|ow | ow:StatusBar:Say('... W A I T ...') } ) :Event( 92, {|ow | ow:StatusBar:Say('') } ) END WITH // ---- Window events nY := GetWindowHeight(hSpl) nX := 1 nW := This.ClientWidth - nX * 2 nH := This.ClientHeight - This.StatusBar.Height - nY DEFINE TBROWSE oTabl AT nY, nX ALIAS cAlias WIDTH nW HEIGHT nH CELL ; TOOLTIP 'Right click - context menu' ; FONT {"Normal", "FontBold", "FontBold"} ; FOOTERS .T. EDIT ; COLUMNS {"FIRST", "LAST", "AGE", "STATE", "CITY", "INCOMING", "OUTLAY"} ; COLNUMBER {1, 40} LOADFIELDS COLSEMPTY //:hFontHead := GetFontHandle( "FontBold" ) //:hFontFoot := GetFontHandle( "FontBold" ) :SetAppendMode( .F. ) :SetDeleteMode( .F. ) //:LoadFields(.F.) :lNoGrayBar := .T. :nWheelLines := 1 :nClrLine := COLOR_GRID :nHeightCell += 2 :nHeightHead := :nHeightCell + 2 :nHeightFoot := :nHeightCell + 2 //:lDrawFooters := .T. //:lFooting := .T. :lNoVScroll := .F. :lNoHScroll := .T. :bChange := {|ob| ob:DrawFooters() } :bRClicked := {|p1,p2,p3,ob| p1:=p2:=p3:=Nil, _wPost(90, ob:cParentWnd) } :SetColor( { CLR_FOCUSB }, { { |a,b,c| If( c:nCell == b, {RGB( 66, 255, 236), RGB(209, 227, 248)}, ; {RGB(220, 220, 220), RGB(220, 220, 220)} ) } } ) :aColumns[ 1 ]:cFooting := { |nc,ob| nc := ob:nAt, iif( Empty(nc), '', hb_ntos(nc) ) } :aColumns[ 2 ]:cFooting := hb_ntos( (cAlias)->( LastRec() ) ) :UserKeys( VK_1, {|ob| _wPost(1, ob:cParentWnd) }, .T. ) :UserKeys( VK_2, {|ob| _wPost(2, ob:cParentWnd) }, .T. ) :UserKeys( VK_3, {|ob| _wPost(3, ob:cParentWnd) }, .T. ) :UserKeys( VK_4, {|ob| _wPost(4, ob:cParentWnd) }, .T. ) :UserKeys( VK_5, {|ob| _wPost(5, ob:cParentWnd) }, .T. ) :UserKeys( VK_6, {|ob| _wPost(6, ob:cParentWnd) }, .T. ) :UserKeys( VK_7, {|ob| _wPost(7, ob:cParentWnd) }, .T. ) :ResetVScroll( .T. ) :oHScroll:SetRange( 0, 0 ) :AdjColumns() END TBROWSE oTabl:SetNoHoles() oTabl:SetFocus() ON KEY SHIFT+1 ACTION wPost(1) ON KEY SHIFT+2 ACTION wPost(2) ON KEY SHIFT+3 ACTION wPost(3) ON KEY SHIFT+4 ACTION wPost(4) ON KEY SHIFT+5 ACTION wPost(5) ON KEY SHIFT+6 ACTION wPost(6) ON KEY SHIFT+7 ACTION wPost(7) //ON KEY ESCAPE ACTION wPost(99) ON KEY ESCAPE ACTION {|| iif( oTabl:IsEdit, oTabl:SetFocus(), _wPost(99) ) } // выход РїРѕ ESC END WINDOW CENTER WINDOW &cWnd ACTIVATE WINDOW &cWnd RETURN Nil *-----------------------------------------------------------------------------* FUNCTION _ShowFormContextMenu( cForm, nRow, nCol, lCenter ) *-----------------------------------------------------------------------------* LOCAL xContextMenuParentHandle := 0, hWnd, aRow DEFAULT nRow := -1, nCol := -1, lCenter := .F. If .Not. _IsWindowDefined(cForm) xContextMenuParentHandle := _HMG_xContextMenuParentHandle Else xContextMenuParentHandle := GetFormHandle(cForm ) Endif If xContextMenuParentHandle == 0 MsgMiniGuiError("Context Menu is not defined. Program terminated") EndIf lCenter := lCenter .or. ( nRow == 0 .or. nCol == 0 ) hWnd := GetFormHandle(cForm) If lCenter If nCol == 0 nCol := int( GetWindowWidth (hWnd) / 2 ) EndIf If nRow == 0 nRow := int( GetWindowHeight(hWnd) / 2 ) EndIf ElseIf nRow < 0 .or. nCol < 0 aRow := GetCursorPos() nRow := aRow[1] nCol := aRow[2] EndIf TrackPopupMenu ( _HMG_xContextMenuHandle , nCol , nRow , xContextMenuParentHandle ) RETURN Nil *-----------------------------------------------------------------------------* STATIC FUNC MenuReport( oWnd, aTxt, lPost, nRow, nCol, lCenter, nZeroLen ) *-----------------------------------------------------------------------------* LOCAL cWnd := oWnd:Name LOCAL nItm := 0, cNam, cImg, i LOCAL lDis := .F. LOCAL bAct := {|| nItm := Val(This.Name) } Default nZeroLen := 4, lPost := .T. Default aTxt := { ; 'Column report FIRST', ; 'Column report LAST ', ; 'Column report AGE ', ; 'Column report STATE', ; 'Column report CITY ', ; 'Column report STATE + Left(LAST, 1)', ; 'Column report CITY + Left(LAST, 1) ' ; } DEFINE CONTEXT MENU OF &cWnd For i := 1 To len(aTxt) cNam := StrZero(i, nZeroLen) If i > 9 cImg := Nil Else cImg := 'n' + hb_ntos(i) EndIf _DefineMenuItem( aTxt[ i ], bAct, cNam, cImg, .F., lDis, , , , .F., .F.) NEXT SEPARATOR MENUITEM 'Exit' ACTION NIL END MENU _ShowFormContextMenu(cWnd, nRow, nCol, lCenter ) DEFINE CONTEXT MENU OF &cWnd END MENU DO EVENTS If nItm > 0 .and. lPost oWnd:PostMsg(nItm) EndIf RETURN nItm *-----------------------------------------------------------------------------* STATIC FUNC Report( oWnd, nEvent ) *-----------------------------------------------------------------------------* LOCAL nOld := Select(), cKey, aRpt LOCAL oBrw := (This.oTabl.Object):Tsb LOCAL cAls := oBrw:cAlias LOCAL nRec := (cAls)->( RecNo() ) LOCAL b, o := oKeyData() LOCAL cNam := oBrw:aColumns[ nEvent ]:cHeading oWnd:Action := .F. oBrw:lEnabled := .F. oWnd:StatusBar:Say('... W A I T ...') This.&(StrZero(nEvent, 2)).Enabled := .F. This.E0.Caption := hb_ntos(nEvent) DO EVENTS // keys to summarize the report b := { {|| Alltrim( FIRST ) }, ; {|| Alltrim( LAST ) }, ; {|| hb_ntos( AGE ) }, ; {|| Alltrim( STATE ) }, ; {|| Alltrim( CITY ) }, ; {|| STATE + ', ' + LEFT( LAST, 1 ) + '...' }, ; {|| CITY + ', ' + LEFT( LAST, 1 ) + '...' } ; } wApi_Sleep(500) // specially delay for the test dbSelectArea( cAls ) GO TOP // create report in container object DO WHILE ! EOF() DO EVENTS cKey := Eval( b[ nEvent ] ) o:Sum( cKey, { 1, cKey, 1, INCOMING, OUTLAY, INCOMING - OUTLAY } ) SKIP ENDDO GOTO nRec // report from the container object to the array aRpt := o:Eval(.T.) // array value {{...}, {...}, ...} dbSelectArea( nOld ) wApi_Sleep(500) // specially delay for the test oWnd:StatusBar:Say('') DO EVENTS oWnd:Action := .T. TsbReport( oWnd, nEvent, aRpt, cNam ) (This.oTabl.Object):Tsb:lEnabled := .T. // oBrw:lEnabled := .T. (This.oTabl.Object):SetFocus() // oBrw:SetFocus() This.&(StrZero(nEvent, 2)).Enabled := .T. This.E0.Caption := '' DO EVENTS RETURN Nil *-----------------------------------------------------------------------------* STATIC FUNC TsbReport( oWnd, nEvent, aArray, cColName ) *-----------------------------------------------------------------------------* LOCAL aCap, oRpt, nY, nX, hSpl LOCAL aHead, aSize, aFoot, aPict, aAlign, aName, aFontHF LOCAL a, i, o := oKeyData() // calculate the results FOR EACH a IN aArray For i := 1 To Len(a) If i < 3 o:Sum(i, 1) // quantity Else o:Sum(i, a[ i ]) // amount EndIf Next NEXT a := o:Eval(.T.) // array {{value}, ...} aAlign := array(Len(a)) aSize := array(Len(a)) aPict := array(Len(a)) aFoot := array(Len(a)) aSize [ 1 ] := 50 aPict [ 1 ] := '9999' aAlign[ 1 ] := DT_CENTER AEVal(a, {|ns,nn| aFoot[ nn ] := iif( nn == 1, '', hb_ntos(ns) ) }) // report title Report aCap := { 'Column report FIRST', ; 'Column report LAST' , ; 'Column report AGE' , ; 'Column report STATE', ; 'Column report CITY' , ; 'Column report STATE, LAST ?...', ; 'Column report CITY, LAST ?...' ; } If nEvent == 6 cColName := 'State, Last ? ...' ElseIf nEvent == 7 cColName := 'City, Last ? ...' ElseIf nEvent == 3 .or. nEvent == 4 // Age, State aSize [ 2 ] := 80 aAlign[ 2 ] := DT_CENTER EndIf // report column headers aHead := { "#", cColName, "Quantity", "Incoming", "Outlay", "Balance" } aFontHF := GetFontHandle("FontBold") DEFINE WINDOW Report ; AT 0, 0 ; WIDTH 700 ; HEIGHT 450 + GetTitleHeight() + GetBorderHeight() ; TITLE aCap[ nEvent ] ; MODAL NOSIZE ; ON RELEASE Nil DEFINE SPLITBOX HANDLE hSpl DEFINE TOOLBAR ToolBar_1 CAPTION "" BUTTONSIZE 42,32 FLAT BUTTON 01 CAPTION 'Print' PICTURE 'printer' ; TOOLTIP 'Report printing F5' ; ACTION wPost() SEPARATOR BUTTON 02 CAPTION 'Excel' PICTURE 'excel' ; TOOLTIP 'Export to MS Excel F6' ; ACTION wPost() SEPARATOR END TOOLBAR DEFINE TOOLBAR ToolBar_2 CAPTION "" BUTTONSIZE 42,32 FLAT BUTTON 99 CAPTION 'Exit' PICTURE 'exit' ACTION wPost() END TOOLBAR END SPLITBOX // ToolBar 1 (This.Object):Event( 1, {|ow| oWnd:StatusBar:Say('... W A I T ...'), ; MsgBox('P r i n t i n g. This.Name = ' + This.Name, ow:Name), ; oWnd:StatusBar:Say('') } ) (This.Object):Event( 2, {|ow| oWnd:PostMsg(91), ; MsgBox('Export to MS Excel. This.Name = ' + This.Name, ow:Name), ; oWnd:PostMsg(92) } ) // ToolBar 2 (This.Object):Event( 99, {|ow| ow:Release() } ) nY := GetWindowHeight(hSpl) DEFINE TBROWSE oRpt AT nY, nX WIDTH This.ClientWidth ; HEIGHT This.ClientHeight - nY CELL ; TOOLTIP 'Double click on title - sorting' :SetArrayTo( aArray, aFontHF, aHead, aSize, aFoot, aPict, aAlign, aName ) :lNoGrayBar := .T. :nWheelLines := 1 :nClrLine := COLOR_GRID :nHeightCell += 5 :nHeightHead := :nHeightCell + 2 :nHeightFoot := :nHeightCell + 2 :lDrawFooters := .T. :lFooting := .T. :lNoVScroll := .F. :lNoHScroll := .T. :SetColor( { CLR_FOCUSB }, { { |a,b,c| If( c:nCell == b, {RGB( 66, 255, 236), RGB(209, 227, 248)}, ; {RGB(220, 220, 220), RGB(220, 220, 220)} ) } } ) :aColumns[ 1 ]:bData := {|| oRpt:nAt } :aColumns[ 1 ]:lIndexCol := .F. If nEvent == 6 .or. nEvent == 7 :aColumns[ 2 ]:hFont := GetFontHandle('FontNorm') :aColumns[ 2 ]:nWidth += 70 EndIf :UserKeys( VK_F5, {|ob| wPost(1, ob) } ) :UserKeys( VK_F6, {|ob| wPost(2, ob) } ) :AdjColumns({3, 4, 5, 6}) // :AdjColumns() END TBROWSE oRpt:SetNoHoles() oRpt:SetFocus() ON KEY ESCAPE ACTION wPost(99) END WINDOW CENTER WINDOW Report ACTIVATE WINDOW Report RETURN Nil *-----------------------------------------------------------------------------* FUNC wPost( nEvent, nIndex, xParam ) *-----------------------------------------------------------------------------* LOCAL oWnd If HB_ISOBJECT(nIndex) oWnd := _WindowObj(nIndex:cParentWnd) oWnd:SetProp(nEvent, xParam) oWnd:PostMsg(nEvent) Else DEFAULT nEvent := val( This.Name ) If nEvent > 0 oWnd := (ThisWindow.Object) oWnd:SetProp(nEvent, xParam) oWnd:PostMsg(nEvent, nIndex) EndIf EndIf RETURN Nil *-----------------------------------------------------------------------------* FUNC wSend( nEvent, nIndex, xParam ) *-----------------------------------------------------------------------------* LOCAL oWnd If HB_ISOBJECT(nIndex) oWnd := _WindowObj(nIndex:cParentWnd) oWnd:SetProp(nEvent, xParam) oWnd:SendMsg(nEvent) Else DEFAULT nEvent := val( This.Name ) If nEvent > 0 oWnd := (ThisWindow.Object) oWnd:SetProp(nEvent, xParam) oWnd:SendMsg(nEvent, nIndex) EndIf EndIf RETURN Nil [/pre2]

SergKis: PS[pre2] DEFINE FONT Normall FONTNAME _HMG_DefaultFontName ; [/pre2] поправил лишнюю букву, результат тот же.

gfilatov2002: SergKis пишет: пытаюсь в колонку CITY добавить в конец RU русскую букву и на добавляет А это контрол GETBOX шалит, он использует для проверки ввода Харбор-функцию IsAlpha(), которая не пропускает символы с кодом > 255. Кстати, в библиотеке TSBrowse тоже есть своя функция _IsChar() с таким же ограничением. Надо подумать, чем можно их заменить. Возможно, надо сделать обертку для Си-функции hb_charIsAlpha( iChar )

SergKis: gfilatov2002 Может это подойдет [pre2] HB_FUNC( ISUTF ) /* Этот текст UTF ? */ { byte *s; byte c; int ln, e; s = (byte *) hb_parc(1); /* Исходная строка в UTF-8 */ ln = hb_parclen(1); e = 0; while(ln > 0){ c = *s++; ln--; if( (c & 0x80 )==0x00){ } else if( (c & 0xE0 )==0xC0 ){ c = *s++; ln--; if( ! ((c & 0xC0)==0x80) ) e++; } else if( (c & 0xE0 )==0xE0 ){ c = *s++; ln--; if( (c & 0xC0)==0x80){ c = *s++; ln--; if( ! ((c & 0xC0)==0x80) ) e++; } else e++; } else e++; } hb_retl( e==0 ); } [/pre2] ? IsUtf("Привет ! ļķņ"), IsUtf(hb_StrToUtf8("Привет ! ļķņ")) // .F. .T.

gfilatov2002: SergKis пишет: Может это подойдет Нет, такая функция уже есть в Харборе - hb_StrIsUTF8() Я поправил класс TGet и внес изменения в обработку нажатой клавиши для GetBox, чтобы можно было ввести unicode символы. GetBox уже заработал с русским языком, но в TsBrowse надо править также методы KeyChar и Edit Может Вы сможете это сделать с учетом вашей уникодной hmg 2.07

SergKis: gfilatov2002 пишет в TsBrowse надо править также методы KeyChar и Edit У нас ничего исправленного в методах нет, т.к. cdp utf8 не используется, сразу в unicode все. И GetBox в этом направлении не трогался (там др. версия его). такая функция уже есть в Харборе - hb_StrIsUTF8() Которую давал текст, уже исп. с 10 года. Я хотел предложить на ней или родной вариант типа #xtranslate _IsAlpha( cChar ) => iif( hb_StrIsUTF8(), .T., IsAlpha( cChar ) ) и в TGET использовать, добавив _ к IsAlpha( cChar ) Хорошо бы с nKey иметь похожую ф-ю. Помочь не против



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