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

SergKis: Dima пишет чёт меня этот цирк уже утомил.... Извини , сам не пойму, в чем дело (у меня win10). Подождем, может само пройдет

Dima: SergKis пишет: Подождем, может само пройдет Само не пройдет ты ведь чудесно это понимаешь Счас выложу сырцы TS к тебе , сравни со своими пожалуйста Сложил

SergKis: Dima Есть разница по 1-му файлу h_controlmisc2.prg Положил его. Пробни


Dima: SergKis пишет: Есть разница по 1-му файлу h_controlmisc2.prg Сергей вот теперь всё отлично работает Спасибо !

SergKis: Dima Нашел, где "собака порылась" 26.01 с утра сделал правку, отвлекли и я забыл пометить ее (пометки смотрю - их нет, думаю и правок нет). Тут строку вставил[pre2] DEFAULT aColor := { ; { CLR_FOCUSF, GetSysColor( COLOR_WINDOWTEXT ) }, ; { CLR_FOCUSB, {|c,n,b| c := n, iif( b:nCell == n, -CLR_HRED, -RGB( 128, 225, 225 ) ) } }, ; { CLR_SELEF , GetSysColor( COLOR_WINDOWTEXT ) }, ; { CLR_SELEB , {|c,n,b| c := n, iif( b:nCell == n, -CLR_BLUE, -RGB( 128, 225, 225 ) ) } } } [/pre2] Я же говорил, надо подождать и само пройдет

Dima:

gfilatov2002: Завершена подготовка 2-го обновления сборки 22.01, которое планируется опубликовать на следующей неделе. Что нового: - исправлена ошибка: при использовании команды SET WINDOW MAIN OFF не обрабатывались события окон ON SIZE и ON MAXIMIZE; - добавлены команды для отправки почты с вложениями и с поддержкой SSL протокола, также можно получать уведомление о прочтении письма; - добавлена возможность получить номер строки, нажатой при выполнении события ON CHECKBOXCLICKED в гриде со стилем CHECKBOXES; - добавлены два новых примера. Если у вас есть дополнения для этого обновления, то я с удовольствием их добавлю в библиотеку Благодарю за ваша внимание к данному проекту

Andrey: Просьба, при создании библиотеки SAMPLES\Advanced\Tsb_Viewer\Lib - саму библиотеку TsbViewer.lib копировать автоматом в папку \MiniGUI\Lib Чтобы потом можно было сразу обращаться к этой библиотеке.

Haz: Andrey пишет: копировать автоматом в папку \MiniGUI\Lib может сначала выясним будут ли её использовать ? Поясню Одно дело как обучающий пример, если понравилось, сделал библиотеку сам и пользуй. Другое , это примеры пихать в основу библиотек пакета. Встроенный sbrowse() более чем достаточно чтоб глянуть что попало в выборку. Для работы с базами полно внешних утилит, которые в добавок умеют несравнимо больше и удобнее.

SergKis: gfilatov2002 Небольшой пример с _TBrowse() с параметрами из ini https://TransFiles.ru/wa3ih

Andrey: Haz пишет: Другое , это примеры пихать в основу библиотек пакета. Это просто отдельная библиотека на базе ТСБ и больше ничего. Просто каждый раз ручками переписывать TsbViewer.lib в общедоступный каталог для сборки - дело утомительно. Я прошу просто подправить батники и всё, для удобства кто захочет пользоваться этой библиотекой. Внешние утилиты использовать просто утомительно, собрать свою прогу, запустить, получить dbf, завершить прогу, перейти в папку с созданной базой, запустить внешнюю прогу с нужной базой - слишком много лишних телодвижений. А так просто одна команда в исходнике и всё !!! Пользоваться или нет этой библиотекой это дело личное. Я старался сделать TsbViewer более удобным для работы с базой, у встроенного sbrowse() нет таких функций.

gfilatov2002: SergKis пишет: пример с _TBrowse() с параметрами из ini Супер Большое спасибо за наглядный пример

SergKis: gfilatov2002 В примере допустил неточность, изменил :HeightHead после END TBROWSE - это может приводить к дырке внизу Вот исправленный текст [pre2] /* * MINIGUI - Harbour Win32 GUI library Demo * */ #define _HMG_OUTLOG #include "hmg.ch" #include "tsbrowse.ch" #include "Dbinfo.ch" #xtranslate MiniGuiVersionChar() => Substr( MiniGuiVersion(), At(".", MiniGuiVersion()) - 2, 8 ) #xtranslate MiniGuiVersionNumba() => Int( Val( MiniGuiVersionChar() ) * 10000 + Val( Right(MiniGuiVersionChar(), 2) ) ) #xtranslate LenU( <c> ) => Len( <c> ) /* #xtranslate LenU( <c> ) => iif( hb_IsArray( <c> ) .or. hb_IsHash( <c> ), Len( <c> ), iif( hb_IsChar( <c> ), hb_ULen( <c> ), 0 ) ) #xtranslate At( <c>, <n> ) => hb_UAt( <c>, <n> ) #xtranslate Left( <c>, <n> ) => hb_ULeft( <c>, <n> ) #xtranslate Right( <c>, <n> ) => hb_URight( <c>, <n> ) #xtranslate SubStr( <cS>, <nS> ) => hb_USubStr( <cS>, <nS> ) #xtranslate SubStr( <cS>, <nS>, <nL> ) => hb_USubStr( <cS>, <nS>, <nL> ) #xtranslate Subs( <cS>, <nS> ) => hb_USubStr( <cS>, <nS> ) #xtranslate Subs( <cS>, <nS>, <nL> ) => hb_USubStr( <cS>, <nS>, <nL> ) */ REQUEST DBFCDX, DBFFPT REQUEST HB_CODEPAGE_UTF8 Function Main() LOCAL cFont := "Arial" LOCAL nSize := 12 LOCAL cForm := "wMain" LOCAL cBrw1 := "Brw_1" LOCAL cIni := hb_FNameExtSet( hb_ProgName(), ".ini" ) LOCAL oIni := TIniData():New(cIni, .T.):Read() LOCAL oCom := oIni:COM LOCAL oBrw1, nY, nX, nH, nW, oTsb1, cLog SET CODEPAGE TO RUSSIAN SET LANGUAGE TO RUSSIAN RddSetDefault("DBFCDX") SET OOP ON SET EPOCH TO 2000 SET DATE TO GERMAN SET CENTURY ON SET AUTOPEN OFF SET DELETED OFF SET NAVIGATION EXTENDED SET DEFAULT ICON TO "1MAIN_ICO" Default oCom:FontName := cFont, ; oCom:FontSize := nSize, ; oCom:LogName := ".\Msg.log" cFont := oCom:FontName nSize := oCom:FontSize cLog := oCom:LogName SET LOGFILE TO ( cLog ) ; fErase( cLog ) SET FONT TO cFont, nSize // фонт по default для oTsb1, oBrw1 DEFINE FONT Normal FONTNAME cFont SIZE nSize DEFINE FONT Bold FONTNAME cFont SIZE nSize BOLD DEFINE FONT Italic FONTNAME cFont SIZE nSize BOLD ITALIC USE ( "CUSTOMER" ) ALIAS CUST1 NEW SHARED DEFINE WINDOW &cForm TITLE "Demo ini => TBrowse" MAIN NOSIZE TOPMOST ; ON INIT ( This.Topmost := .F. ) ; ON RELEASE ( dbCloseAll() ) This.Maximize nY := nX := 0 nW := This.ClientWidth nH := This.ClientHeight oTsb1 := oIni:&(cBrw1) // секция [Brw_1] //? oTsb1:GetAll() ; ?v oTsb1:GetAll() ; ? oTsb1:aText := oIni:&(cBrw1+"_Text"):GetAll() oTsb1:bBody := {|ob,op| Local oCol, aTxt, nTxt := 0 FOR EACH oCol IN ob:aColumns IF oCol:cName == "SELECTOR" ; LOOP ENDIF oCol:hFont := GetFontHandle( op:aFont[1] ) IF oCol:cFieldTyp == "C" oCol:cPicture := Nil oCol:nWidth := oCol:ToWidth( iif( oCol:nFieldLen > 50, 50, oCol:nFieldLen ), 0.82 ) ENDIF IF oCol:cName == "CUSTNO" oCol:lEdit := .F. ENDIF NEXT FOR EACH aTxt IN op:aText oCol := ob:GetColumn(aTxt[1]) IF "\" $ aTxt[2] nTxt++ oCol:cHeading := StrTran(aTxt[2], "\", CRLF) ELSE oCol:cHeading := aTxt[2] ENDIF NEXT IF nTxt > 0 ob:nHeightHead := GetFontHeight( op:aFont[2] ) * 2 ENDIF Return Nil } oBrw1 := _TBrowse( oTsb1, "CUST1", cBrw1, nY, nX, nW, nH ) oBrw1:SetFocus() ; DO EVENTS ON KEY ESCAPE ACTION iif( oBrw1:IsEdit, oBrw1:SetFocus(), ThisWindow.Release ) ON KEY F1 ACTION NIL END WINDOW //CENTER WINDOW wMain ACTIVATE WINDOW wMain RETURN NIL [/pre2]

gfilatov2002: SergKis пишет: исправленный текст OK

Haz: Andrey пишет: Просто каждый раз ручками переписывать TsbViewer.lib в общедоступный каталог для сборки - дело утомительно Ну так один раз положил в папку библиотек минигуи , сам, ручками и ничего прописывать больше не надо. Зачем всем то это счастье ? Более того , при обновлении минигуи поверх, свои библиотеки там остаются.

Haz: Andrey пишет: у встроенного sbrowse() нет таких функций. они там не нужны. Задача sbrowse() визуально оценить выборку и может быть чуть чуть подправить. Как отдельный пример, да хорошо, но как пример. Внешние утилиты все же не заменит. Нет sql нет удалённого подключения, нет изменения структур на лету, нет групповых операций . Да и незачем свой проект нагружать лишним кодом ради того чтобы пару раз посмотреть. Я уже не говорю про дыру безопасности в проекте Ps. Почти у всех есть свои библиотеки, это не повод под них батник править.

SergKis: gfilatov2002 Немного модифицировал пример, добавив в ini события для клавиш demo.ini - [pre2] [COM] FontName = Arial FontSize = 14 LogName = .\_msg.log [Brw_1] aFont = {"Normal", "Bold", "Bold", "Italic", "Bold"} aNumber = {1, 70} uSelector = .T. aEdit = .T. lSpecHd = .T. aFoot = .T. aEditNo = {"CUSTNO", "LASTINVOIC"} nFireKey = 0 ; F2 F3 F4 F5 F6 F7 F8 F9 aMsgPost = {113, 114, 115, 116, 117, 118, 119, 120} [Brw_1_Text] CustNo = Иденти\фикатор Company = Наименование \ клиента Addr1 = Адрес клиента Addr2 = Адрес \ ( продолжение ) City = Город State = Область Country = Страна [/pre2] demo.prg - [pre2] /* * MINIGUI - Harbour Win32 GUI library Demo * */ #define _HMG_OUTLOG #include "hmg.ch" #include "tsbrowse.ch" //#include "Dbinfo.ch" #xtranslate MiniGuiVersionChar() => Substr( MiniGuiVersion(), At(".", MiniGuiVersion()) - 2, 8 ) #xtranslate MiniGuiVersionNumba() => Int( Val( MiniGuiVersionChar() ) * 10000 + Val( Right(MiniGuiVersionChar(), 2) ) ) #xtranslate LenU( <c> ) => Len( <c> ) /* #xtranslate LenU( <c> ) => iif( hb_IsArray( <c> ) .or. hb_IsHash( <c> ), Len( <c> ), iif( hb_IsChar( <c> ), hb_ULen( <c> ), 0 ) ) #xtranslate At( <c>, <n> ) => hb_UAt( <c>, <n> ) #xtranslate Left( <c>, <n> ) => hb_ULeft( <c>, <n> ) #xtranslate Right( <c>, <n> ) => hb_URight( <c>, <n> ) #xtranslate SubStr( <cS>, <nS> ) => hb_USubStr( <cS>, <nS> ) #xtranslate SubStr( <cS>, <nS>, <nL> ) => hb_USubStr( <cS>, <nS>, <nL> ) #xtranslate Subs( <cS>, <nS> ) => hb_USubStr( <cS>, <nS> ) #xtranslate Subs( <cS>, <nS>, <nL> ) => hb_USubStr( <cS>, <nS>, <nL> ) */ REQUEST DBFCDX, DBFFPT REQUEST HB_CODEPAGE_UTF8 Function Main() LOCAL cFont := "Arial" LOCAL nSize := 12 LOCAL cForm := "wMain" LOCAL cBrw1 := "Brw_1" LOCAL cIni := hb_FNameExtSet( hb_ProgName(), ".ini" ) LOCAL oIni := TIniData():New(cIni, .T.):Read() LOCAL oCom := oIni:COM LOCAL oBrw1, nY, nX, nH, nW, oTsb1, cLog, nTmp SET CODEPAGE TO RUSSIAN SET LANGUAGE TO RUSSIAN RddSetDefault("DBFCDX") SET OOP ON SET EPOCH TO 2000 SET DATE TO GERMAN SET CENTURY ON SET AUTOPEN OFF SET DELETED OFF SET NAVIGATION EXTENDED SET DEFAULT ICON TO "1MAIN_ICO" Default oCom:FontName := cFont, ; oCom:FontSize := nSize, ; oCom:LogName := ".\Msg.log" cFont := oCom:FontName nSize := oCom:FontSize cLog := oCom:LogName SET LOGFILE TO ( cLog ) ; fErase( cLog ) SET FONT TO cFont, nSize // фонт по default для oTsb1, oBrw1 DEFINE FONT Normal FONTNAME cFont SIZE nSize DEFINE FONT Bold FONTNAME cFont SIZE nSize BOLD DEFINE FONT Italic FONTNAME cFont SIZE nSize - 2 ITALIC USE ( "CUSTOMER" ) ALIAS CUST1 NEW SHARED DEFINE WINDOW &cForm TITLE "Demo ini => TBrowse" MAIN NOSIZE TOPMOST ; ON INIT ( This.Topmost := .F. ) ; ON RELEASE ( dbCloseAll() ) This.Maximize /* nY := nX := 0 nW := This.ClientWidth nH := This.ClientHeight */ oTsb1 := oIni:&(cBrw1) // секция [Brw_1] //? oTsb1:GetAll() ; ?v oTsb1:GetAll() ; ? //oTsb1:aText := oIni:&(cBrw1+"_Text"):GetAll() oTsb1:oText := oIni:&(cBrw1+"_Text") oTsb1:bBody := {|ob,op| Local oCol, aTxt, nTxt, lEditNo, nTmp, aTmp lEditNo := HB_ISARRAY(op:aEditNo) .and. LenU(op:aEditNo) > 0 FOR EACH oCol IN ob:aColumns oCol:hFont := GetFontHandle( op:aFont[1] ) IF oCol:cFieldTyp == "C" oCol:cPicture := Nil oCol:nWidth := oCol:ToWidth( iif( oCol:nFieldLen > 50, 50, oCol:nFieldLen ), 0.82 ) ELSEIF oCol:cFieldTyp == "M" oCol:cPicture := Nil oCol:nWidth := oCol:ToWidth(40) ELSEIF oCol:cFieldTyp == "D" oCol:cPicture := Nil oCol:nWidth := oCol:ToWidth(10) ELSEIF oCol:cFieldTyp == "T" oCol:cPicture := Nil oCol:nWidth := oCol:ToWidth(24) ENDIF IF lEditNo .and. AScan(op:aEditNo, oCol:cName) > 0 oCol:lEdit := .F. ENDIF NEXT nTmp := 1 nTxt := 0 FOR EACH aTxt IN op:oText:GetAll() // op:aText IF ob:nColumn(aTxt[1], .T.) == 0 ; LOOP ENDIF oCol := ob:GetColumn(aTxt[1]) IF "\" $ aTxt[2] nTxt++ aTmp := hb_ATokens(aTxt[2], "\") nTmp := Max( nTmp, LenU(aTmp)) oCol:cHeading := StrTran(aTxt[2], "\", CRLF) ELSE oCol:cHeading := aTxt[2] ENDIF NEXT IF nTxt > 0 ob:nHeightHead := GetFontHeight( op:aFont[2] ) * nTmp ENDIF IF HB_ISARRAY(op:aMsgPost) .and. LenU(op:aMsgPost) > 0 FOR EACH nTxt IN op:aMsgPost ob:UserKeys(nTxt, {|ob,nk| _wPost(nk, ob:cParentWnd, ob) }) NEXT ENDIF Return Nil } oBrw1 := _TBrowse( oTsb1, "CUST1", cBrw1, nY, nX, nW, nH ) oBrw1:SetFocus() ; DO EVENTS ON KEY ESCAPE ACTION iif( oBrw1:IsEdit, oBrw1:SetFocus(), ThisWindow.Release ) ON KEY F1 ACTION NIL IF HB_ISARRAY(oTsb1:aMsgPost) .and. LenU(oTsb1:aMsgPost) > 0 FOR EACH nTmp IN oTsb1:aMsgPost (This.Object):Event( nTmp, {|ow,ky,ob| MsgBox("Press: "+cValToChar(ky)+"-"+ob:cControlName, ow:Name), ob:SetFocus() } ) NEXT ENDIF END WINDOW //CENTER WINDOW wMain ACTIVATE WINDOW wMain RETURN NIL [/pre2]

SergKis: PS. Еще вариант этого же решения с событиями, кому интересно demo.ini - [pre2] [COM] FontName = Arial FontSize = 14 LogName = .\_msg.log [Brw_1] aFont = {"Normal", "Bold", "Bold", "Italic", "Bold"} aNumber = {1, 70} uSelector = .T. aEdit = .T. lSpecHd = .T. aFoot = .T. aEditNo = {"CUSTNO", "LASTINVOIC"} nFireKey = 0 ; F2 F3 F4 F5 F6 F7 F8 F9 aMsgPost = {113, 114, 115, 116, 117, 118, 119, 120} [Brw_1_Keys] 113 = {|ob,nk| _wPost(nk, ob:cParentWnd, ob) } ; VK_F2 114 = {|ob,nk| _wPost(nk, ob:cParentWnd, ob) } ; VK_F3 115 = {|ob,nk| _wPost(nk, ob:cParentWnd, ob) } ; VK_F4 116 = {|ob,nk| _wPost(nk, ob:cParentWnd, ob) } ; VK_F5 117 = {|ob,nk| _wPost(nk, ob:cParentWnd, ob) } ; VK_F6 118 = {|ob,nk| _wPost(nk, ob:cParentWnd, ob) } ; VK_F7 119 = {|ob,nk| _wPost(nk, ob:cParentWnd, ob) } ; VK_F8 120 = {|ob,nk| _wPost(nk, ob:cParentWnd, ob) } ; VK_F9 [Brw_1_Text] CustNo = Иденти\фикатор Company = Наименование \ клиента Addr1 = Адрес клиента Addr2 = Адрес \ ( продолжение ) City = Город State = Область Country = Страна [/pre2] demo.prg - [pre2] /* * MINIGUI - Harbour Win32 GUI library Demo * */ #define _HMG_OUTLOG #include "hmg.ch" #include "tsbrowse.ch" //#include "Dbinfo.ch" #xtranslate MiniGuiVersionChar() => Substr( MiniGuiVersion(), At(".", MiniGuiVersion()) - 2, 8 ) #xtranslate MiniGuiVersionNumba() => Int( Val( MiniGuiVersionChar() ) * 10000 + Val( Right(MiniGuiVersionChar(), 2) ) ) #xtranslate LenU( <c> ) => Len( <c> ) /* #xtranslate LenU( <c> ) => iif( hb_IsArray( <c> ) .or. hb_IsHash( <c> ), Len( <c> ), iif( hb_IsChar( <c> ), hb_ULen( <c> ), 0 ) ) #xtranslate At( <c>, <n> ) => hb_UAt( <c>, <n> ) #xtranslate Left( <c>, <n> ) => hb_ULeft( <c>, <n> ) #xtranslate Right( <c>, <n> ) => hb_URight( <c>, <n> ) #xtranslate SubStr( <cS>, <nS> ) => hb_USubStr( <cS>, <nS> ) #xtranslate SubStr( <cS>, <nS>, <nL> ) => hb_USubStr( <cS>, <nS>, <nL> ) #xtranslate Subs( <cS>, <nS> ) => hb_USubStr( <cS>, <nS> ) #xtranslate Subs( <cS>, <nS>, <nL> ) => hb_USubStr( <cS>, <nS>, <nL> ) */ REQUEST DBFCDX, DBFFPT REQUEST HB_CODEPAGE_UTF8 Function Main() LOCAL cFont := "Arial" LOCAL nSize := 12 LOCAL cForm := "wMain" LOCAL cBrw1 := "Brw_1" LOCAL cIni := hb_FNameExtSet( hb_ProgName(), ".ini" ) LOCAL oIni := TIniData():New(cIni, .T.):Read() LOCAL oCom := oIni:COM LOCAL oBrw1, nY, nX, nH, nW, oTsb1, cLog, nTmp, aTmp SET CODEPAGE TO RUSSIAN SET LANGUAGE TO RUSSIAN RddSetDefault("DBFCDX") SET OOP ON SET EPOCH TO 2000 SET DATE TO GERMAN SET CENTURY ON SET AUTOPEN OFF SET DELETED OFF SET NAVIGATION EXTENDED SET DEFAULT ICON TO "1MAIN_ICO" Default oCom:FontName := cFont, ; oCom:FontSize := nSize, ; oCom:LogName := ".\Msg.log" cFont := oCom:FontName nSize := oCom:FontSize cLog := oCom:LogName SET LOGFILE TO ( cLog ) ; fErase( cLog ) SET FONT TO cFont, nSize // фонт по default для oTsb1, oBrw1 DEFINE FONT Normal FONTNAME cFont SIZE nSize DEFINE FONT Bold FONTNAME cFont SIZE nSize BOLD DEFINE FONT Italic FONTNAME cFont SIZE nSize - 2 ITALIC USE ( "CUSTOMER" ) ALIAS CUST1 NEW SHARED DEFINE WINDOW &cForm TITLE "Demo ini => TBrowse" MAIN NOSIZE TOPMOST ; ON INIT ( This.Topmost := .F. ) ; ON RELEASE ( dbCloseAll() ) This.Maximize This.Cargo := oHmgData() /* nY := nX := 0 nW := This.ClientWidth nH := This.ClientHeight */ oTsb1 := oIni:&(cBrw1) // секция [Brw_1] //? oTsb1:GetAll() ; ?v oTsb1:GetAll() ; ? //oTsb1:aText := oIni:&(cBrw1+"_Text"):GetAll() oTsb1:oText := oIni:&(cBrw1+"_Text") oTsb1:aUserKeys := {} FOR EACH aTmp IN oIni:&(cBrw1+"_Keys"):GetAll() nTmp := Val(aTmp[1]) AADD( oTsb1:aUserKeys, {nTmp, aTmp[2]} ) NEXT oTsb1:bBody := {|ob,op| Local oCol, aTxt, nTxt, lEditNo, nTmp, aTmp lEditNo := HB_ISARRAY(op:aEditNo) .and. LenU(op:aEditNo) > 0 FOR EACH oCol IN ob:aColumns oCol:hFont := GetFontHandle( op:aFont[1] ) IF oCol:cFieldTyp == "C" oCol:cPicture := Nil oCol:nWidth := oCol:ToWidth( iif( oCol:nFieldLen > 50, 50, oCol:nFieldLen ), 0.82 ) ELSEIF oCol:cFieldTyp == "M" oCol:cPicture := Nil oCol:nWidth := oCol:ToWidth(40) ELSEIF oCol:cFieldTyp == "D" oCol:cPicture := Nil oCol:nWidth := oCol:ToWidth(10) ELSEIF oCol:cFieldTyp == "T" oCol:cPicture := Nil oCol:nWidth := oCol:ToWidth(24) ENDIF IF lEditNo .and. AScan(op:aEditNo, oCol:cName) > 0 oCol:lEdit := .F. ENDIF NEXT nTmp := 1 nTxt := 0 FOR EACH aTxt IN op:oText:GetAll() // op:aText IF ob:nColumn(aTxt[1], .T.) == 0 ; LOOP ENDIF oCol := ob:GetColumn(aTxt[1]) IF "\" $ aTxt[2] nTxt++ aTmp := hb_ATokens(aTxt[2], "\") nTmp := Max( nTmp, LenU(aTmp)) oCol:cHeading := StrTran(aTxt[2], "\", CRLF) ELSE oCol:cHeading := aTxt[2] ENDIF NEXT IF nTxt > 0 ob:nHeightHead := GetFontHeight( op:aFont[2] ) * nTmp ENDIF /* IF HB_ISARRAY(op:aMsgPost) .and. LenU(op:aMsgPost) > 0 FOR EACH nTxt IN op:aMsgPost ob:UserKeys(nTxt, {|ob,nk| _wPost(nk, ob:cParentWnd, ob) }) NEXT ENDIF */ Return Nil } oBrw1 := _TBrowse( oTsb1, "CUST1", cBrw1, nY, nX, nW, nH ) oBrw1:SetFocus() ; DO EVENTS This.Cargo:cBrw1 := cBrw1 This.Cargo:oBrw1 := oBrw1 ON KEY ESCAPE ACTION iif( oBrw1:IsEdit, oBrw1:SetFocus(), ThisWindow.Release ) ON KEY F1 ACTION NIL /* IF HB_ISARRAY(oTsb1:aMsgPost) .and. LenU(oTsb1:aMsgPost) > 0 FOR EACH nTmp IN oTsb1:aMsgPost (This.Object):Event( nTmp, {|ow,ky,ob| MsgBox("Press: "+cValToChar(ky)+"-"+ob:cControlName, ow:Name), ob:SetFocus() } ) NEXT ENDIF */ FOR EACH aTmp IN oTsb1:aUserKeys (This.Object):Event( aTmp[1], {|ow,ky,ob| MsgBox("Press: "+cValToChar(ky)+"-"+ob:cControlName, ow:Name), ob:SetFocus() } ) NEXT END WINDOW //CENTER WINDOW wMain ACTIVATE WINDOW wMain RETURN NIL [/pre2]

gfilatov2002: SergKis пишет: модифицировал пример, добавив в ini события для клавиш Благодарю за помощь SergKis пишет: вариант этого же решения с событиями, кому интересно Надеюсь, что эти примеры будут кому-нибудь полезны

Andrey: Haz пишет: Почти у всех есть свои библиотеки, это не повод под них батник править. Может быть и не повод, но большее кол-во инструментов для МиниГуи будет полезней, особенно для новичков. Не смотря на ограниченность TsbViewer, я делал его под свою часто используемую работу с базой. Такого не было в МиниГуи, вот и сделал в качестве инструмента для баз. Больше никто не предлагал подобный функционал для баз, только внешние утилиты. Если кто-то делал инструмент работы с базой - было бы полезно выложить его в Минигуи, для всех. А то пока наработаешь свои библиотеки и примеры для МиниГуи - года 3-4 пройдёт... gfilatov2002 пишет: Надеюсь, что эти примеры будут кому-нибудь полезны Ещё как нужны. Работа с событиями очень нужная вещь в МиниГуи, особенно для больших проектов. Прога перестаёт падать, если использовать события, а не функции.



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