On-line: ort,гостей 0. Всего: 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 [только новые]


SergKis



Пост N:2697
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:30.07.19 11:23.Заголовок:PS Ведь все фонты по..


PS
Ведь все фонты по DEFINE FONT ... цепляются к _FORMNAME_ 'Main' и там живут

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



Пост N:2698
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:30.07.19 11:38.Заголовок:PPS Если фонтов нет ..


PPS
Если фонтов нет в списке DEFINE FONT ..., работают С ф-ии _SetFont(...), _SetFontHandle(...), а они не используют базу. По мне, команды удаления фонтов в _EraseControl() не нужны.

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



Пост N:2699
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:30.07.19 11:44.Заголовок:SergKis пишет По мне..


SergKis пишет
 цитата:
По мне, команды удаления фонтов в _EraseControl() не нужны


Уточню, если они находятся в секции 'Main' - удалять не нужно.

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




Пост N:1541
Зарегистрирован:11.02.10
ссылка на сообщение  Отправлено:30.07.19 12:03.Заголовок:SergKis пишет: Заче..


SergKis пишет:

 цитата:
Зачем удалять фонт, созданный (сохранен в базе _HMG_aControlType == 'FONT') по DEFINE FONT ... ?


Поправил этот фрагмент кода с учетом Вашего предложения:

 цитата:
 
*-----------------------------------------------------------------------------*
FUNCTION _EraseControl ( i, p )
*-----------------------------------------------------------------------------*
LOCAL hWnd
LOCAL mVar
LOCAL t, x

x := _HMG_aControlFontHandle [ i ]

IF ISNUMERIC ( x ) .AND. !Empty ( x ) .AND. AScan( _HMG_aControlHandles, x ) == 0
DeleteObject ( x )
ENDIF

Благодарю за помощь

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




Пост N:1542
Зарегистрирован:11.02.10
ссылка на сообщение  Отправлено:31.07.19 10:43.Заголовок:Всем кому это интересно


Подготовил 2-й релиз-кандидат для новой сборки 19.08 со следующим списком изменений:
Скрытый текст

Хотя эта сборка работает стабильно, выпуск финальной версии отложен по финансовым причинам

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



Пост N:2701
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:01.08.19 11:28.Заголовок:gfilatov2002 Может ..


gfilatov2002
Может добавить для фонта
 
PROCEDURE _DefineFont( FontName, fName, fSize, bold, italic, underline, strikeout, nAngle, default, charset )
...
_HMG_aControlWidth [k] := GetTextWidth ( 0, 'B', FontHandle )
_HMG_aControlHeight [k] := GetTextHeight( 0, 'B', FontHandle )
...
FUNCTION GetFontParam( FontHandle )
...
aFontAttr := { _HMG_DefaultFontName, _HMG_DefaultFontSize, .F., .F., .F., .F., 0, 0, 0 }
...
iif( Len( _HMG_aControlFontAttributes[ i ] ) == 5, _HMG_aControlFontAttributes[ i, FONT_ATTR_ANGLE ], 0 ), ;
_HMG_aControlWidth [ i ], _HMG_aControlHeight [ i ] }

ENDIF
...
И псевдо функции
FUNC GetFontWidth( FontName, nLen )
RETUNR GetFontParam( GetFontHandle( FontName ) )[8] * nLen
FUNC GetFontHeight( FontName )
RETUNR GetFontParam( GetFontHandle( FontName ) )[9]


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



Пост N:2702
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:01.08.19 11:44.Заголовок:PS Может покороче на..


PS
Может покороче назвать FontWidth(...), FontHeight(...) ?

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




Пост N:1545
Зарегистрирован:11.02.10
ссылка на сообщение  Отправлено:01.08.19 12:18.Заголовок:SergKis пишет: доб..


SergKis пишет:

 цитата:
добавить для фонта


Добавил конечно, но оставил названия псевдо-функций с Get (так понятнее).
Благодарю за помощь

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



Пост N:2706
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:02.08.19 09:22.Заголовок:gfilatov2002 Предло..


gfilatov2002
Предложение добавить
 
*-----------------------------------------------------------------------------*
PROCEDURE _PopEventInfo( n )
*-----------------------------------------------------------------------------*
LOCAL l

IF ( l := Len ( _HMG_aEventInfo ) ) > 0

DEFAULT n := 0

IF n > 0 .and. n <= l; l := n
ENDIF

_HMG_ThisFormIndex := _HMG_aEventInfo [l] [1]
_HMG_ThisEventType := _HMG_aEventInfo [l] [2]
_HMG_ThisType := _HMG_aEventInfo [l] [3]
_HMG_ThisIndex := _HMG_aEventInfo [l] [4]
_HMG_ThisFormName := _HMG_aEventInfo [l] [5]
_HMG_ThisControlName := _HMG_aEventInfo [l] [6]

IF n == 0

ASize ( _HMG_aEventInfo , l - 1 )
ENDIF


ELSE
...

Тогда в блоке кода на окно, контрол можно ставить среду This запомненную ранее, к примеру, на TIMER другого окна
ACTION {|| _PopEventInfo( Len( _HMG_aEventInfo ) - 1 ), ... }

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




Пост N:1546
Зарегистрирован:11.02.10
ссылка на сообщение  Отправлено:02.08.19 10:30.Заголовок:SergKis пишет: Пред..


SergKis пишет:

 цитата:
Предложение добавить

Добавил, хотя эта коррекция является опасным хаком, на мой взгляд

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



Пост N:2707
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:02.08.19 10:55.Заголовок:gfilatov2002 пишет Д..


gfilatov2002 пишет
 цитата:
Добавил, хотя эта коррекция является опасным хаком, на мой взгляд


Большой опасности нет (не удаляем из стека, применяя n), на мой взгляд, но понимать, что происходит, конечно надо.
Вариантов больше получается, к примеру
1
define window ... (сохраняет среду), если сделать
_PushEventInfo
...
end window (восстановит среду, но останется доп. установка)
action window ...
_PopEventInfo() (окончательно восстановит среду до работы окна)
This среда будет стоять для окна (в блоках контролов среда ставится\восстанавливается для тек. окна)
2
В Timer (к примеру, на Main окне) поставив This среду по n (который можно определить по разному) можно анализировать ThisWindow.Name и даже This.Name, что бы проделывать разные операции в зависимости от имен. Завершение блока кода Timer восстановит из последнего элемента _HMG_aEventInfo, т.е. то что было при входе.

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




Пост N:1547
Зарегистрирован:11.02.10
ссылка на сообщение  Отправлено:02.08.19 11:01.Заголовок:SergKis пишет: пони..


SergKis пишет:

 цитата:
понимать, что происходит, конечно надо


Вот в этом и проблема - обычно пользователи библиотеки (они же прикладные разработчики) редко хотят заморачиваться такими вещами.
Но как дополнительная возможность - не помешает, я думаю.

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



Пост N:2709
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:04.08.19 10:03.Заголовок:gfilatov2002 Поправ..


gfilatov2002
Поправил LoadFields() для работы с др. alias Скрытый текст

Пример для проверки https://TransFiles.ru/1z51g

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



Пост N:2710
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:04.08.19 11:06.Заголовок:PS Для работы с MEMI..


PS
Для работы с MEMIO (пропустил, не доделал), надо
 
REQUEST DBFCDX, DBFFPT, DBFNTX, HB_MEMIO

*-----------------------------------------------------------------------------*
FUNCTION Main( cPath )
*-----------------------------------------------------------------------------*
LOCAL nY, nX, nW, nH, hSpl, oBrw
LOCAL cWnd := 'wMain', cAlias, aStru
LOCAL cOut := 'OUT'
LOCAL cTmp := 'mem:out'

...

и Compile.bat
call ..\..\..\batch\compile.bat demo /l hbmemio %1 %2 %3 %4 %5 %6 %7 %8 %9

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



Пост N:2711
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:04.08.19 13:47.Заголовок:PPS Если сделать изм..


PPS
Если сделать изменения, то можно менять поля в dbf из которого выборка
 
:LoadFields(.F., aColSel, cOut, aNamSel)

aColSel := {"FIRST" , "LAST" , "STATE" , "AGE" , "ZIP", "MARRIED" }

:LoadFields(.T., aColSel, cAls)

FOR nI := 1 TO Len( aColSel )
:GetColumn(aColSel[ nI ]):bPrevEdit := {|| (cAls)->( RLock() ) }
IF 'MARR' $ aColSel[ nI ]
:GetColumn(aColSel[ nI ]):bPostEdit := {|| (cAls)->MARRIED := ! (cAls)->MARRIED, ;
(cAls)->( dbUnLock() ) }
ELSE
:GetColumn(aColSel[ nI ]):bPostEdit := {|| (cAls)->( dbUnLock() ) }
ENDIF
NEXT

AEval(:aColumns, {|oc,nc| oc:lEmptyValToChar := .T., ;
oc:lFixLite := .T. })


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




Пост N:1548
Зарегистрирован:11.02.10
ссылка на сообщение  Отправлено:04.08.19 18:55.Заголовок:SergKis пишет: Попр..


SergKis пишет:

 цитата:
Поправил LoadFields() для работы с др. alias


Принято с благодарностью

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



Пост N:2712
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:05.08.19 10:17.Заголовок:gfilatov2002 Андрей..


gfilatov2002
Андрей сказал, что у меня в примере простая карточка, без вызова справочника.
Исправил пример, добавив имитацию вызова справочников у 2х GetBox кнопками
Так же сделал на этих GetBox F5 и DublClick для вызова справочника + ToolTip информация
Пример тут https://TransFiles.ru/ocym6

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



Пост N:2713
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:05.08.19 11:02.Заголовок:PS Небольшая бяка в ..


PS
Небольшая бяка в примере. Если карточка изменена, фокус на GetBox и нажимаем Esc, то запрос на сохранение карточки, сделанный на AletYesNo(...), улетает в координаты 0,0. Правка такая
 
STATIC FUNC Age_CardSave( oBrw, lSave )
...
LOCAL nRec := ATail(aRec)
LOCAL cFocu := This.FocusedControl


If empty( lSave ) .and. ThisWindow.Cargo
If ! empty(cFocu) .and. ! 'BUTT' $ This.&(cFocu).Type
This.Btn_04.SetFocus
DO EVENTS
EndIf

// lMsg := MsgYesNo('Save card - '+cValToChar(This.AGE.Value )+CRLF+ ;
lMsg := AlertYesNo('Save card - '+cValToChar(This.AGE.Value )+CRLF+ ;
...


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




Пост N:1549
Зарегистрирован:11.02.10
ссылка на сообщение  Отправлено:05.08.19 11:24.Заголовок:SergKis пишет: Испр..


SergKis пишет:

 цитата:
Исправил пример, добавив имитацию вызова справочников у 2х GetBox кнопками


Благодарю за помощь

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



Пост N:2714
Зарегистрирован:17.02.12
ссылка на сообщение  Отправлено:05.08.19 15:11.Заголовок:gfilatov2002 Если д..


gfilatov2002
Если добавить методы в
CLASS TGetData INHERIT TCnlData 
...
METHOD SetKeyEvent ( nKey, bKey, lCtrl, lShift, lAlt ) INLINE ::Get:SetKeyEvent(nKey, bKey, lCtrl, lShift, lAlt)
METHOD SetDublClick( bBlock ) INLINE ::Get:SetKeyEvent( , bBlock )

METHOD Destroy() INLINE ::oGetBox := ::Super:Destroy()
...
то удобней писать
(This.&(o:GetName).Object):SetKeyEvent ( VK_F5, hb_MacroBlock(o:BtnAction) )
(This.&(o:GetName).Object):SetDublClick( hb_MacroBlock(o:BtnAction) )


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