Автор | Сообщение |
gfilatov
|
| модератор
|
Пост N: 699
Зарегистрирован: 25.05.05
|
|
Отправлено: 29.01.08 13:59. Заголовок: Новая версия Расширенного релиза библиотеки MiniGUI (часть VI ) (продолжение)
Начало темы находится здесь, а теперь АНОНС * АНОНС * АНОНС * АНОНС * АНОНС Готовится к опубликованию новая сборка №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
|
| moderator
|
Пост N: 1250
Зарегистрирован: 11.02.10
|
|
Отправлено: 07.03.18 11:16. Заголовок: Всем кому это интере..
Всем кому это интересно Подготовил вторую бету для новой мартовской сборки библиотеки Благодарю за Ваше внимание
| |
|
Andrey
|
| постоянный участник
|
Пост N: 5769
Зарегистрирован: 12.09.06
|
|
Отправлено: 10.03.18 11:11. Заголовок: Всем привет. Созрело..
Всем привет. Созрело предложение по цветам. Сейчас в i_color.ch только 19 цветов и все задаются через {....} Для новых кнопок с градиентами нужны числовые цвета. В TSBROWSE.CH только 16 цветов, нет ORANGE и неск.других, да и не всегда удобно к проекту его добавлять, там куча всего. Название цветов мне нравиться больше как в TSBROWSE.CH Посмотреть заодно и как в FW сделано. Предлагаю в i_color.ch добавить цвета: #define CLR_YELLOW RGB( 255 , 255 , 0 ) #define CLR_PINK RGB( 255 , 128 , 192 ) #define CLR_HRED RGB( 255 , 0 , 0 ) #define CLR_HMAGENTA RGB( 255 , 0 , 255 ) #define CLR_BROWN RGB( 128 , 64 , 64 ) #define CLR_ORANGE RGB( 255 , 128 , 64 ) #define CLR_HGREEN RGB( 0 , 255 , 0 ) #define CLR_PURPLE RGB( 128 , 0 , 128 ) #define CLR_BLACK RGB( 0 , 0 , 0 ) #define CLR_WHITE RGB( 255 , 255 , 255 ) #define CLR_GRAY RGB( 128 , 128 , 128 ) #define CLR_HBLUE RGB( 0 , 0 , 255 ) #define CLR_HGRAY RGB( 192 , 192 , 192 ) #define CLR_RED RGB( 128 , 0 , 0 ) #define CLR_OLIVE RGB( 128 , 128 , 0 ) #define CLR_LGREEN RGB( 0 , 128 , 0 ) #define CLR_HCYAN RGB( 0 , 255 , 255 ) #define CLR_BLUE RGB( 0 , 0 , 128 ) #define CLR_CYAN RGB( 0 , 128 , 128 ) Может что и упустил... И ещё можно добавить вот такие цвета: #define CLR_SKYPE RGB( 0, 176,240 ) // голубой, как SKYPE #define CLR_VIBER RGB( 125, 82,158 ) // фиолетовый, как в Viber #define CLR_VK RGB( 93, 114,148 ) // сине-серый, как в Контакте #define CLR_TWIT RGB( 118, 170,235 ) // голубой, как TWITER #define CLR_FB RGB( 71, 89,149 ) // синеватый, как Фейсбук #define CLR_OK RGB( 238, 89,149 ) // оранжевый, как Одноклассники
| |
|
SergKis
|
| постоянный участник
|
Пост N: 1776
Зарегистрирован: 17.02.12
|
|
Отправлено: 13.03.18 08:54. Заголовок: gfilatov2002 Предло..
gfilatov2002 Предложение заменить, подправить METHOD DoEvent ( Key, nHandle ) CLASS TWndData LOCAL o := Self LOCAL i := o:Index LOCAL w := o:IsWindow IF ! empty(nHandle) IF hmg_IsWindowObject( nHandle ) // control handle o := hmg_GetWindowObject( nHandle ) i := o:Index w := o:IsWindow ELSEIF nHandle > 0 .and. nHandle <= Len( _HMG_aControlHandles ) // control index IF hmg_IsWindowObject( _HMG_aControlHandles[ nHandle ] ) o := hmg_GetWindowObject( _HMG_aControlHandles[ nHandle ] ) i := o:Index w := o:IsWindow ELSE i := nHandle w := .F. ENDIF ENDIF ENDIF IF w RETURN Do_WindowEventProcedure ( ::oEvent:Get( Key ), i, o, Key ) ENDIF RETURN Do_ControlEventProcedure( ::oEvent:Get( Key ), i, o, Key ) и пример APP_OOPEVENTS DEFINE MAIN MENU POPUP 'MENU_1' NAME 100 ITEM 'Item main menu 1.1' NAME 101 IMAGE 'n1' ; ACTION (ThisWindow.Object):PostMsg(val(This.Name), This.Index) ITEM 'Item main menu 1.2' NAME 102 IMAGE 'n2' ; ACTION (ThisWindow.Object):PostMsg(val(This.Name)) ITEM 'Item main menu 1.3 ( This -> Button_2 )' NAME 103 IMAGE 'n3' ; ACTION (ThisWindow.Object):PostMsg(val(This.Name), This.Button_2.Index) SEPARATOR ITEM 'Exit' NAME 199 ; ACTION (ThisWindow.Object):PostMsg(val(This.Name)) END POPUP
| |
|
gfilatov2002
|
| moderator
|
Пост N: 1251
Зарегистрирован: 11.02.10
|
|
Отправлено: 13.03.18 11:11. Заголовок: SergKis пишет: заме..
SergKis пишет: Благодарю за помощь Поправлю, конечно...
| |
|
SergKis
|
| постоянный участник
|
Пост N: 1784
Зарегистрирован: 17.02.12
|
|
Отправлено: 17.03.18 22:09. Заголовок: gfilatov2002 Поправ..
gfilatov2002 Поправьте, пожалуйста METHOD Sum( Key, xSum ) CLASS TKeyData LOCAL sum := ::Get( Key, 0 ) IF HB_ISNUMERIC( xSum ) IF HB_ISNUMERIC( sum ); sum += xSum ELSE ; sum := xSum ENDIF ::Set( Key, sum ) ELSEIF HB_ISARRAY( xSum ) IF HB_ISARRAY( sum ) .AND. Len( sum ) == Len( xSum ) AEval( xSum, {| s, i| sum[ i ] := iif( HB_ISNUMERIC( s ), sum[ i ] + s, s ) } ) ELSE sum := xSum ENDIF ::Set( Key, sum ) ENDIF RETURN NIL ... METHOD Sum( Key, xSum ) CLASS TThrData LOCAL sum := ::Get( Key, 0 ) IF HB_ISNUMERIC( xSum ) IF HB_ISNUMERIC( sum ); sum += xSum ELSE ; sum := xSum ENDIF ::Set( Key, sum ) ELSEIF HB_ISARRAY( xSum ) IF HB_ISARRAY( sum ) .AND. Len( sum ) == Len( xSum ) AEval( xSum, {| s, i| sum[ i ] := iif( HB_ISNUMERIC( s ), sum[ i ] + s, s ) } ) ELSE sum := xSum ENDIF ::Set( Key, sum ) ENDIF RETURN NIL ...
| |
|
gfilatov2002
|
| moderator
|
Пост N: 1253
Зарегистрирован: 11.02.10
|
|
Отправлено: 17.03.18 22:26. Заголовок: SergKis пишет: Попр..
SergKis пишет: Уже сделал. Благодарю за помощь и внимание
| |
|
SergKis
|
| постоянный участник
|
Пост N: 1785
Зарегистрирован: 17.02.12
|
|
Отправлено: 20.03.18 09:29. Заголовок: gfilatov2002 Предла..
gfilatov2002 Предлагаю новый метод для tsb, для растяжки нескольких колонок до размера тсб по ширине. Скрытый текст
METHOD AdjColumns( aColumns, nDelta ) CLASS TSBrowse LOCAL c, i, k, n, s, w, obr := Self, aCol := {} LOCAL nVisible := 0 Default nDelta := 1 If empty(aColumns) aColumns := array( ::nColCount() ) AEval(aColumns, {|xv,nn| xv := nn, aColumns[ nn ] := xv }) Endif If HB_ISNUMERIC(aColumns) AAdd(aCol, aColumns) ElseIf HB_ISCHAR(aColumns) AAdd(aCol, ::nColumn(aColumns)) Else AEval(aColumns, {|xv| AAdd(aCol, iif( HB_ISCHAR(xv), obr:nColumn(xv), xv )) }) EndIf AEval( ::aColumns, {|oc| nVisible += iif( oc:lVisible, oc:nWidth, 0 ) }) k := Len(aCol) w := GetWindowWidth( ::hWnd ) - nVisible - nDelta - iif( ::lNoVScroll, 0, GetVScrollBarWidth() ) If w > 0 n := int( w / k ) s := 0 For i := 1 To k c := aCol[ i ] If i == k ::aColumns[ c ]:nWidth += ( w - s ) Else s += n ::aColumns[ c ]:nWidth += n EndIf Next EndIf RETURN Nil
| Использование при ширине tsb > ширины колонок :AdjColumns() - все колонки :AdjColumns({"NAME", "SUMMA"}) - указанные колонки по cName :AdjColumns({3, 4, 5}) - указанные колонки по номеру В пример App_OOPoKeyData, который прислал Andrey, можно вставить *-----------------------------------------------------------------------------* STATIC FUNC TsbReport( oWnd, nEvent, aArray, cColName ) *-----------------------------------------------------------------------------* ... :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)} ) } } ) :AdjColumns({3, 4, 5}) // или :AdjColumns() END TBROWSE oRpt:SetNoHoles() ...
| |
|
gfilatov2002
|
| moderator
|
Пост N: 1256
Зарегистрирован: 11.02.10
|
|
Отправлено: 20.03.18 11:27. Заголовок: SergKis пишет: Пред..
SergKis пишет: цитата: | Предлагаю новый метод для tsb |
| 1. добавил новый полезный метод 2. переименовал пример App_OOPoKeyData в APP_OOPREPORT 3. вставку строки в пример сделал - работает! Благодарю за помошь
| |
|
SergKis
|
| постоянный участник
|
Пост N: 1786
Зарегистрирован: 17.02.12
|
|
Отправлено: 20.03.18 14:11. Заголовок: gfilatov2002 поправ..
gfilatov2002 поправьте APP_OOPREPORT (передал в TsbReport oWnd, а не показал цель этого) FUNCTION Main() ... :Event( 7, {|ow,ky| Report(ow, ky) } ) // ToolBar 2 :Event( 99, {|ow | ow:Release() } ) // StatusBar :Event( 91, {|ow | ow:StatusBar:Say('... W A I T ...') } ) :Event( 92, {|ow | ow:StatusBar:Say('') } ) END WITH // ---- Window events ... STATIC FUNC TsbReport( oWnd, nEvent, aArray, cColName ) ... // ToolBar 1 (This.Object):Event( 1, {|ow| oWnd:StatusBar:Say('... W A I T ...'), ; MsgBox('P r i n t i n g' , ow:Name), ; oWnd:StatusBar:Say('') } ) (This.Object):Event( 2, {|ow| oWnd:PostMsg(91), ; MsgBox('Export to MS Excel', ow:Name), ; oWnd:PostMsg(92) } ) ...
| |
|
gfilatov2002
|
| moderator
|
Пост N: 1257
Зарегистрирован: 11.02.10
|
|
Отправлено: 20.03.18 20:01. Заголовок: SergKis пишет: попр..
SergKis пишет: Поправил, конечно. Благодарю за помощь - пример работает нормально
| |
|
SergKis
|
| постоянный участник
|
Пост N: 1788
Зарегистрирован: 17.02.12
|
|
Отправлено: 21.03.18 12:34. Заголовок: gfilatov2002 пишет ..
gfilatov2002 пишет цитата: | пример работает нормально |
| Попробую сразу ответить на вопрос "Как улучшить вид отчета ?" Скрытый текст
1. FUNCTION Main() ... DEFINE FONT FontBold FONTNAME _HMG_DefaultFontName ; SIZE _HMG_DefaultFontSize BOLD DEFINE FONT FontNorm FONTNAME "Courier New" ; SIZE _HMG_DefaultFontSize BOLD USE Employee ALIAS BASE SHARED NEW ... STATIC FUNC Report( oWnd, nEvent ) ... b := { {|| Alltrim( FIRST ) }, ; {|| Alltrim( LAST ) }, ; {|| hb_ntos( AGE ) }, ; {|| Alltrim( STATE ) }, ; {|| Alltrim( CITY ) }, ; {|| STATE + ', ' + LEFT( LAST, 1 ) + '...' }, ; {|| CITY + ', ' + LEFT( LAST, 1 ) + '...' } ; } ... cKey := Eval( b[ nEvent ] ) o:Sum( cKey, { 1, cKey, 1, INCOMING, OUTLAY, INCOMING - OUTLAY } ) SKIP ... STATIC FUNC TsbReport( oWnd, nEvent, aArray, cColName ) ... // посчитаем итоги FOR EACH a IN aArray For i := 1 To Len(a) If i < 3 o:Sum(i, 1) // кол- во Else o:Sum(i, a[ i ]) // сумма 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) ) }) ... // заголовки колонок отчета aHead := { "#", cColName, "Quantity", "Incoming", "Outlay", "Balance" } ... DEFINE WINDOW Report ; AT 0, 0 ; WIDTH 700 ; ... :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 } If nEvent == 6 .or. nEvent == 7 :aColumns[ 2 ]:hFont := GetFontHandle('FontNorm') :aColumns[ 2 ]:nWidth += 70 EndIf :AdjColumns({3, 4, 5}) // :AdjColumns() ... 2. Можно разложить, к примеру, cKey на 2-е колонки. Схема такая o:Sum( cKey, { 1, cKey, "", 1, INCOMING, OUTLAY, INCOMING - OUTLAY } ) и потом в массиве разделяем cKey по разделителю на 2-е части 1-ю пишем на место cKey 2-ю пишем на место добавленного элемента "" мняем aHead с добавленной надписью над новой колонкой и aFoot формируем с учетом новой колонки
|
| |
|
|
SergKis
|
| постоянный участник
|
Пост N: 1789
Зарегистрирован: 17.02.12
|
|
Отправлено: 21.03.18 12:39. Заголовок: PS надо без BOLD ..
PS надо без BOLD DEFINE FONT FontNorm FONTNAME "Courier New" ; SIZE _HMG_DefaultFontSize
| |
|
SergKis
|
| постоянный участник
|
Пост N: 1791
Зарегистрирован: 17.02.12
|
|
Отправлено: 21.03.18 16:46. Заголовок: Заработал My-Files.r..
| |
|
gfilatov2002
|
| moderator
|
Пост N: 1260
Зарегистрирован: 11.02.10
|
|
Отправлено: 21.03.18 17:28. Заголовок: SergKis пишет: Ссыл..
SergKis пишет: Благодарю за обновленный пример! Что сделал: 1. поправил опечатку 2. перевел комментарии из OEM-кодировки в ANSI. 3. проверил компиляцию примера по команде
| |
|
SergKis
|
| постоянный участник
|
Пост N: 1792
Зарегистрирован: 17.02.12
|
|
Отправлено: 21.03.18 19:21. Заголовок: gfilatov2002 пишет c..
gfilatov2002 пишет Спасибо за напоминание, с Borlandом редко собираю, забываю эти параметры для Compile.bat. цитата: | перевел комментарии из OEM-кодировки в ANSI. |
| Все проекты в OEM и настройки на нее, дергаю куски и комментарии идут, как идут. Сорри. По SET OOP ON показал практически все что хотел. Думаю теперь только вопросы.
| |
|
SergKis
|
| постоянный участник
|
Пост N: 1793
Зарегистрирован: 17.02.12
|
|
Отправлено: 22.03.18 09:19. Заголовок: SergKis пишет показа..
SergKis пишет цитата: | показал практически все что хотел |
| Работу с сообщениями из тсб добавил в пример, т.е. кнопки toolbar продублировал клавишами http://my-files.ru/h5e6ms
| |
|
gfilatov2002
|
| moderator
|
Пост N: 1261
Зарегистрирован: 11.02.10
|
|
Отправлено: 22.03.18 11:26. Заголовок: SergKis пишет: кноп..
SergKis пишет: цитата: | кнопки toolbar продублировал клавишами |
| Благодарю за помощь Очень наглядный пример использования ООП
| |
|
SergKis
|
| постоянный участник
|
Пост N: 1797
Зарегистрирован: 17.02.12
|
|
Отправлено: 22.03.18 21:03. Заголовок: gfilatov2002 Надо п..
gfilatov2002 Надо правку сделать, Andrey неточность нашел, при hide колонки. Считать надо не только ширину видимых колонок, но и их кол-во METHOD AdjColumns( aColumns, nDelta ) CLASS TSBrowse ... LOCAL nVisible := 0, aVisible := {} ... AEval( ::aColumns, {|oc| nVisible += iif( oc:lVisible, oc:nWidth, 0 ) }) AEval( aCol , {|nc| iif( obr:aColumns[ nc ]:lVisible, AAdd(aVisible, nc), Nil ) }) k := Len(aVisible) ... For i := 1 To k c := aVisible[ i ] ...
| |
|
gfilatov2002
|
| moderator
|
Пост N: 1262
Зарегистрирован: 11.02.10
|
|
Отправлено: 22.03.18 21:31. Заголовок: SergKis пишет: Надо..
SergKis пишет: Поправил, конечно. Благодарю за внимание
| |
|
SergKis
|
| постоянный участник
|
Пост N: 1798
Зарегистрирован: 17.02.12
|
|
Отправлено: 24.03.18 08:08. Заголовок: gfilatov2002 Поправ..
gfilatov2002 Поправьте APP_OOPREPORT для альтернативного задания клавиш BUTTON 01 CAPTION 'First' PICTURE 'n1' ; TOOLTIP 'Column report FIRST Ctrl+1, Shift+1' ; ACTION wPost() SEPARATOR BUTTON 02 CAPTION 'Last' PICTURE 'n2' ; TOOLTIP 'Column report LAST Ctrl+2, Shift+2' ; ACTION wPost() SEPARATOR BUTTON 03 CAPTION 'Age' PICTURE 'n3' ; TOOLTIP 'Column report AGE Ctrl+3, Shift+3' ; ACTION wPost() SEPARATOR BUTTON 04 CAPTION 'State' PICTURE 'n4' ; TOOLTIP 'Column report STATE Ctrl+4, Shift+4' ; ACTION wPost() SEPARATOR BUTTON 05 CAPTION 'City' PICTURE 'n5' ; TOOLTIP 'Column report CITY Ctrl+5, Shift+5' ; ACTION wPost() SEPARATOR BUTTON 06 CAPTION 'State ?' PICTURE 'n6' ; TOOLTIP 'Column report STATE + Left(LAST, 1) Ctrl+6, Shift+6' ; ACTION wPost() SEPARATOR BUTTON 07 CAPTION 'City ?' PICTURE 'n7' ; TOOLTIP 'Column report CITY + Left(LAST, 1) Ctrl+7, Shift+7' ; ACTION wPost() SEPARATOR ... 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) END WINDOW ... STATIC FUNC Report( oWnd, nEvent ) ... oWnd:Action := .F. oBrw:lEnabled := .F. oWnd:StatusBar:Say('... W A I T ...') ... TsbReport( oWnd, nEvent, aRpt, cNam ) (This.oTabl.Object):Tsb:lEnabled := .T. // oBrw:lEnabled := .T. (This.oTabl.Object):SetFocus() // oBrw:SetFocus() ... PS На время формирования отчета (oWnd:Action := .F.) блокируются действия окна по сообщениям до (oWnd:Action := .T.)
| |
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|
|