On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение
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;
- новые и обновленные старые примеры (как обычно ).




--
Улыбайся - завтра будет хуже!
Спасибо: 5 
Профиль
Ответов - 300 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]


Vlad04
постоянный участник


Пост N: 808
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 17.02.19 13:37. Заголовок: Не понял ? Какая вло..


Не понял ? Какая вложенность здесь ?
Группа и подгруппа ?
Классический Трей- файлы директории.

Спасибо: 0 
Профиль
SergKis



Пост N: 2236
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 17.02.19 14:10. Заголовок: Vlad04 пишет Не поня..


Vlad04 пишет
 цитата:
Не понял ? Какая вложенность здесь ?
Группа и подгруппа ?


Вложенность обыкновенная, показана последняя часть 2-а node и item:
Краски - группа
Акриловые - подгруппа
Водоэмульсионные - ...
Масляные - ...
...
Краска белая марка ... - товар\материал
Краска синяя марка ... - ...
...

Над группой может быть
Краски для внутренних работ
Краски для наружных работ
...
Еще выше может быть
Материалы для внутренних работ
Материалы для наружных работ
...
Классическое дерево, не хуже директорий

Спасибо: 0 
Профиль
SergKis



Пост N: 2237
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.02.19 11:29. Заголовок: gfilatov2002 Поправ..


gfilatov2002
Поправил Method Enabled (сейчас он не работает совсем, с изменениями - частично)
 
CLASS TSBrowse FROM TControl
...
DATA aOldParams
DATA aOldEnabled

#ifdef __EXT_USERKEYS__
...
METHOD Enabled( lEnab, Clr1, Clr2 ) //JP 1.55
...
METHOD Enabled( lEnab, Clr1, Clr2 ) CLASS TSBrowse

Local nI

Default lEnab := .T., Clr1 := CLR_GRAY, Clr2 := CLR_HGRAY

IF ValType( lEnab ) == "L"

IF !lEnab

IF ::lEnabled
::aOldEnabled := { ::hBrush, {} , ::nClrPane }
For nI := 1 TO Len( ::aColumns )
AAdd( ::aOldEnabled[2], ::aColumns[ nI ]:Clone() )
::aColumns[ nI ]:SaveColor()
Next
ENDIF

::lEnabled := .F.
::SetColor( { 2 }, { CLR2 } )
::SetColor( { 3, 4 }, { CLR1, CLR2 } )
::SetColor( { 9, 10 }, { CLR1, CLR2 } )
::SetColor( { 16, 17 }, { CLR1, CLR2 } )
::SetColor( { 18, 19 }, { CLR1, CLR2 } )
::nClrPane := CLR2

ELSE

IF ! ::lEnabled
For nI := 1 TO Len( ::aColumns )
::aColumns[ nI ]:RestColor()
SetColor( , ::aColumns[ nI ]:aColors, nI )
Next
If HB_ISARRAY( ::aOldEnabled ) .and. ! empty( ::aOldEnabled[1] )
AEval( ::aOldEnabled[2], {|oc,nc| ::aColumns[ nc ] := oc:Clone() } )
::hBrush := ::aOldEnabled[1]
::nClrPane := ::aOldEnabled[3]
EndIf
ENDIF

::lEnabled := .T.

ENDIF

::Refresh()
/*
этот кусок кода работает для варианта колонки помещаются на экране тсб и нет hscroll.
для тсб со горизонтальным скролингом добавка ниже не помогает
потому я оставил в коментариях, т.е. при исп. :Enabled(...) допиливать за вызовом самому (точно не понял, как быть)

If ! ::lNoHScroll .and. ::oHScroll != Nil
::oHScroll:SetPos( ::nCell )
EndIf

::ResetVScroll( .T. )
::oVScroll:SetRange( 0, 0 )
::oHScroll:SetRange( 0, 0 )

::Refresh()

If ! ::lNoHScroll .and. ::oHScroll != Nil
::oHScroll:SetPos( ::nCell )
EndIf

::ResetVScroll( .T. )
::oHScroll:SetRange( 0, 0 )
*/

ENDIF

RETURN 0
...
Проверка в примере Advanced\TsBrowse
TsbTest.prg
...
Case nSample = 1

DEFINE TBROWSE Brw_1 AT 0, 0 ALIAS "Employee" ;
...
:UserKeys( VK_F5, {|obr| oBr:Enabled(.F.), ;
MsgBox('Test oBrw:Enabled(.F.\.T.)', oBr:cControlName), ;
oBr:Enabled(.T.), oBr:SetFocus() } )

END TBROWSE
...
Надо отметить, что hscroll при нажатии F5 пропадает сразу и не восстанавливается, но и колонок за пределы тсб нет.


Спасибо: 0 
Профиль
SergKis



Пост N: 2238
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.02.19 11:34. Заголовок: PS Есть faq с прорис..


PS
Есть faq с прорисовкой Header, Footer фантомных колонок, но это др. история

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1444
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 18.02.19 11:53. Заголовок: SergKis пишет: Meth..


SergKis пишет:

 цитата:
Method Enabled (сейчас он не работает совсем


Посмотрел в примере Advanced\Tsb_seek
рабочий вызов этого метода

Что здесь не так

Спасибо: 0 
Профиль
SergKis



Пост N: 2239
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.02.19 12:02. Заголовок: PPS Уточнение по TsB..


PPS
Уточнение по TsBrowse. HScroll есть, что то я просмотрел его
В примере Tsb_Basic\demo4.prg с добавкой
 
DEFINE BUTTONEX Button_Go
Row y + 2
Col x
WIDTH 40
HEIGHT 24
CAPTION "Go"
ACTION ( oBr:SetFocus(), oBr:GotoRec(This.Recno.Value, This.RowPos.Value ) )
FONTSIZE 9
FONTBOLD .F.
END BUTTONEX

x += This.RowPos.Width + 20
DEFINE BUTTONEX Button_Msg
Row y + 2
Col x
WIDTH 40
HEIGHT 24
CAPTION "Msg"
ACTION ( oBr:Enabled(.F.), MsgBox('Test oBrw:Enabled(.F.\.T.)', This.name), ;
oBr:Enabled(.T.), oBr:SetFocus() )
FONTSIZE 9
FONTBOLD .F.
END BUTTONEX

...
работает при строках меньше и больше :RowCount() нормально, но на примере Андрея,
на котором тренировался, при VScroll наличии пропадают стабильно стрелки управления
или сам VScroll полностью и спасает добавка

STAT FUNC _myTsb( obrw, n )

If n == 1

obrw:Enabled(.F.)

Else

obrw:Enabled(.T.)

obrw:ResetVScroll( .T. )
obrw:oVScroll:SetRange( 0, 0 )
obrw:oHScroll:SetRange( 0, 0 )

obrw:Refresh()

obrw:ResetVScroll( .T. )
obrw:oHScroll:SetRange( 0, 0 )

obrw:SetFocus()

EndIf

RETURN Nil


Спасибо: 0 
Профиль
SergKis



Пост N: 2240
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.02.19 12:41. Заголовок: gfilatov2002 пишет П..


gfilatov2002 пишет
 цитата:
Посмотрел в примере Advanced\Tsb_seek
рабочий вызов этого метода


Пример с методом работает
У меня все время глюки с методом (отказадся использовать, только переменную :lEnabled).
Спасает сохранение\восстановление колонок, hBrush и борьба с VScroll.
Ok, буду бороться вне метода

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1445
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 18.02.19 12:48. Заголовок: SergKis пишет: Спас..


SergKis пишет:

 цитата:
Спасает сохранение\восстановление колонок, hBrush


Переписал этот метод с учетом Вашего вклада следующим образом:
METHOD Enabled( lEnab )  CLASS TSBrowse 

Local nI

Default lEnab := .T.

IF ValType( lEnab ) == "L"

IF !lEnab

IF ::lEnabled
::aOldEnabled := { ::hBrush, {}, ::nClrPane }
For nI := 1 TO Len( ::aColumns )
AAdd( ::aOldEnabled[2], ::aColumns[ nI ]:Clone() )
::aColumns[ nI ]:SaveColor()
Next
ENDIF

::lEnabled := .F.
::SetColor( { 2 }, { ::nCLR_HGRAY } )
::SetColor( { 3, 4 }, { ::nCLR_GRAY, ::nCLR_HGRAY } )
::SetColor( { 9, 10 }, { ::nCLR_GRAY, ::nCLR_HGRAY } )
::SetColor( { 16, 17 }, { ::nCLR_GRAY, ::nCLR_HGRAY } )
::SetColor( { 18, 19 }, { ::nCLR_GRAY, ::nCLR_HGRAY } )
::nClrPane := ::nCLR_HGRAY
::hBrush := CreateSolidBrush( GetRed( ::nClrPane ), GetGreen( ::nClrPane ), GetBlue( ::nClrPane ) )

ELSE

IF ! ::lEnabled
For nI := 1 TO Len( ::aColumns )
::aColumns[ nI ]:RestColor()
SetColor( , ::aColumns[ nI ]:aColors, nI )
Next
If HB_ISARRAY( ::aOldEnabled ) .and. ! Empty( ::aOldEnabled[1] )
AEval( ::aOldEnabled[2], {|oc, nc| ::aColumns[ nc ] := oc:Clone() } )
DeleteObject( ::hBrush )
::hBrush := ::aOldEnabled[1]
::nClrPane := ::aOldEnabled[3]
EndIf
ENDIF

::lEnabled := .T.

ENDIF

::Refresh()

ENDIF

RETURN 0

Хуже вроде не стало.
Благодарю за помощь

Спасибо: 0 
Профиль
SergKis



Пост N: 2241
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.02.19 13:42. Заголовок: gfilatov2002 :sm36..


gfilatov2002

Было бы хорошо добавить параметры Clr1, Clr2, для управления, если BackColor окна не CLR_GRAY\HGREY

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1446
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 18.02.19 13:49. Заголовок: SergKis пишет: для..


SergKis пишет:

 цитата:
для управления, если BackColor окна не CLR_GRAY\HGREY


Для этого я добавил в класс
 
DATA nClr_Gray AS NUMERIC INIT CLR_GRAY
DATA nClr_HGray AS NUMERIC INIT CLR_HGRAY


Спасибо: 0 
Профиль
SergKis



Пост N: 2242
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.02.19 13:49. Заголовок: PS И добавить сохран..


PS
И добавить сохранение\восстановление цветов SuperHeader

Спасибо: 0 
Профиль
SergKis



Пост N: 2243
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.02.19 13:51. Заголовок: gfilatov2002 пишет Д..


gfilatov2002 пишет
 цитата:
Для этого я добавил в класс


Похоже глаз замылился, не увидел, сору.

Спасибо: 0 
Профиль
SergKis



Пост N: 2244
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.02.19 14:37. Заголовок: gfilatov2002 Добави..


gfilatov2002
Добавил SuperHeader
 
IF ::lEnabled
::aOldEnabled := { ::hBrush, {}, ::nClrPane, {} }
For nI := 1 TO Len( ::aColumns )
AAdd( ::aOldEnabled[2], ::aColumns[ nI ]:Clone() )
::aColumns[ nI ]:SaveColor()
Next
If ::lDrawSuperHd
AEval( ::aSuperHead, {|as| AAdd( ::aOldEnabled[4], { as[4], as[5], as[11] } ) } )
EndIf

ENDIF
...
If HB_ISARRAY( ::aOldEnabled ) .and. ! Empty( ::aOldEnabled[1] )
AEval( ::aOldEnabled[2], {|oc, nc| ::aColumns[ nc ] := oc:Clone() } )
DeleteObject( ::hBrush )
::hBrush := ::aOldEnabled[1]
::nClrPane := ::aOldEnabled[3]
If ::lDrawSuperHd
AEval( ::aOldEnabled[4], {|as,ns| ::aSuperHead[ns][ 4] := as[1], ;
::aSuperHead[ns][ 5] := as[2], ;
::aSuperHead[ns][11] := as[3] } )
EndIf

EndIf
...
Пример Tsb_seek добавил
...
ADD COLUMN TO br_zaw DATA {|| test->street } ALIGN DT_LEFT, DT_CENTER, DT_CENTER TITLE 'Street' SIZE 300

br_zaw:hBrush := CreateSolidBrush( 242, 245, 204 )

ADD SUPER HEADER TO br_zaw FROM COLUMN 1 TO COLUMN br_zaw:nColCount() ;
TITLE " SuperHeader"

br_zaw:bUserKeys := {|nKey,nFlags| fszuk1(nkey,nflags) }
...
Работает


Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1447
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 18.02.19 15:24. Заголовок: SergKis пишет: Доба..


SergKis пишет:

 цитата:
Добавил SuperHeader
...
Работает


Спасибо

Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 6180
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.02.19 15:35. Заголовок: Григорий, я пример в..


Григорий, я пример выслал на почту.
Там наверное нужно переделать сохранение/восстановление цветов с учётом этих новых правок ?

Спасибо: 0 
Профиль
SergKis



Пост N: 2246
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.02.19 12:57. Заголовок: gfilatov2002 По пов..


gfilatov2002
По поводу предложения в tree node\item cargo.
То что я использовал _HMG_aControlHeadClick, наверно, не очень правильно.
Лучше _HMG_aControlMiscData1[ k ] := { 0, aImgNode, aImgItem, {} },
плюс использовать NodeHandle := _HMG_NodeHandle[ NodeIndex ] и
AAdd( a_Node_Item_Cargo, { NodeHandle, Cargo } )
тогда вся работа с node\item cargo - это поиск по NodeHandle для удаления, выбора и сортировка будет без разницы.
При добавлении новых node\item вставлять их в самый конец массива.
По мне так все ровненько выходит.
Cargo на node\item это небходимость упрощения работы. Сейчас приходится добавлять в node\item ключи (счетчики пунктов), потом бегать по дереву составляя выбранный ключ и потом через табл. перекодировки добывать реальный ключ и через него др. данные, но и это не спасает для трех языков одновременно (unicode версия) и в дереве могут находится сразу 3-и термина языковых одновременно, т.е. с одинаковыми ключами и разными счетчиками пунктов. Мороки много, так, что исп. tree не хочется

Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1448
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 19.02.19 22:16. Заголовок: SergKis пишет: То ч..


SergKis пишет:

 цитата:
То что я использовал _HMG_aControlHeadClick, наверно, не очень правильно.


Возможно. Но, как известно, лучшее - враг хорошего
В тираж ушло Ваше первое решение, оно органично вписалось в текущую логику при построении дерева.
Также добавил поддержку псевдо-объекта This для этого Cargo как показано ниже

 цитата:
*-----------------------------------------------------------------------------*
FUNCTION OnReturnTree()
*-----------------------------------------------------------------------------*
LOCAL nItm := This.Value
LOCAL cWnd := ThisWindow.Name
LOCAL cCtl := This.Name
LOCAL lIsN := TreeItemIsTrueNode ( cCtl, cWnd, nItm )
LOCAL cItm := This.&(cCtl).Item( nItm )
LOCAL cCrg := This.&(cCtl).Cargo( nItm )

MsgBox( "#" + hb_ntos (nItm) + " --> " + cItm + ' ' + ;
iif( lIsN, 'TrueNode', 'Node' )+ CRLF + ;
cValToChar(cCrg), ;
cWnd + '.' + cCtl )

RETURN Nil

*-----------------------------------------------------------------------------*
Procedure AddItemTest()
*-----------------------------------------------------------------------------*
LOCAL i

Form_1.Tree_1.DeleteAllItems

Form_1.Tree_1.AddItem( 'New Root Item 1' , 0 )

Form_1.Tree_1.AddItem( 'New Item 1.1' , 1 )
Form_1.Tree_1.AddItem( 'New Item 1.2' , 1 )
Form_1.Tree_1.AddItem( 'New Item 1.3' , 1 )

Form_1.Tree_1.AddItem( 'New Root Item 2' , 0 )

Form_1.Tree_1.AddItem( 'New Item 2.1' , 5 )
Form_1.Tree_1.AddItem( 'New Item 2.2' , 5 )
Form_1.Tree_1.AddItem( 'New Item 2.3' , 5 )

Form_1.Tree_1.AddItem( 'New Item 1.4' , 1 )
Form_1.Tree_1.AddItem( 'New Item 1.4.1' , 5 )

For i := 1 To Form_1.Tree_1.ItemCount
Form_1.Tree_1.Cargo( i ) := Form_1.Tree_1.Item( i )
Next

Return



Спасибо: 0 
Профиль
gfilatov2002
moderator




Пост N: 1449
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 20.02.19 11:57. Заголовок: Всем, кому это интересно


Подготовил третий релиз-кандидат для новой сборки 19.02
Кратко, что нового (см.ниже)
Скрытый текст

Благодарю Сергея Киселева за неоценимую помощь в подготовке этой сборки
Возможно, Вы хотите присоединиться к команде разработчиков Минигуи

Спасибо: 0 
Профиль
SergKis



Пост N: 2247
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.02.19 14:01. Заголовок: gfilatov2002 пишет В..


gfilatov2002 пишет
 цитата:
Возможно, Вы хотите присоединиться к команде разработчиков Минигуи


Думаю, что нет, т.к. практически все разночтения между версиями hmg текущей и нашей (в базе 2.07) сняты.
Товарищ, по работе, переводит на VC2017 hb в unucod с LV866 по правилам hb и тек. нашу версию hmg + C либы.
Я максимально сближаю нашу версию hmg с текущей. В планах, последним шагом, тек. версию hmg сделать unicode, т.е. переползти на родную hmg

Спасибо: 0 
Профиль
SergKis



Пост N: 2248
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.02.19 16:27. Заголовок: gfilatov2002 Неболь..


gfilatov2002
Небольшой пример Tree по каталогам hmg + Cargo
https://TransFiles.ru/wy6kc

Спасибо: 0 
Профиль
Ответов - 300 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 63
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет