Автор | Сообщение |
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: 2272
Зарегистрирован: 11.02.10
|
|
Отправлено: 12.02.24 12:08. Заголовок: SergKis пишет: Пред..
SergKis пишет: Принято Но я добавлю эти изменения в обрамлении переменной __DEBUG__: цитата: | #ifdef __DEBUG__ ... #endif |
|
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 4511
Зарегистрирован: 17.02.12
|
|
Отправлено: 12.02.24 12:16. Заголовок: gfilatov2002 пишет Н..
gfilatov2002 пишет цитата: | Но я добавлю эти изменения в обрамлении переменной __DEBUG__: |
| Почему ? Это основной режим, в моем понимании. Сейчас Cargo окна пуст и доступа к нему нет. А сделать на базе Alert ф-ий по темам с доп. наполнением - большая потребность. Сейчас мешает полное отсутствие инф. о DRAW ICON ... и лишние манипуляции делать чтобы определять тип button-ов., а так доступна вся инф. о контролах окна в простом виде PS Сейчас пробую использовать добавки, для отладки, код получается ~ такой (если интересно) Скрытый текст
код prg (еще в начальной стадии) cTitle := "OK-CANCEL" aBtnColor := { LGREEN , {189,30,73} } cIcoRes := nIcoSize := NIL bInit := oa:bInitSomeBtn AlertOkCancel( cMsg, cTitle,1, cIcoRes, nIcoSize, aBtnColor, .T., bInit ) cTitle := "YES-NO-CANCEL" aBtnColor := { FUCHSIA, LGREEN , {189,30,73} } cIcoRes := oa:cIcoYesNo64 //App.Cargo:cIcoYesNo64 nIcoSize := oa:nIcoSize //64 bInit := oa:bInitSomeBtn AlertYesNoCancel( cMsg, cTitle, 3, cIcoRes, nIcoSize, aBtnColor, .T., bInit ) cTitle := "YES-NO" aBtnColor := { FUCHSIA, {189,30,73} } bInit := oa:bInitSomeBtn //{|| bInitAlertSomeBtn() } AlertYesNo( cMsg, cTitle, , cIcoRes, nIcoSize, aBtnColor, .T., bInit ) ... код обработчика (замена BUTTON на OBUTTON) o:bInitSomeBtn := {|| Local lBExt, lTime, lEbox, lDraw, ob, oo, a, b, i, o Local oc := This.Cargo Local cFocus := This.FocusedControl lTime := !Empty(oc:oTimer) lEbox := !Empty(oc:EditBox) lDraw := !Empty(oc:Draw) lBExt := !Empty(oc:lExtButton) IF !lBExt // метяем Button -> OButton IF HB_ISBLOCK( b := oAlert():b_Cargo2oNew ) oo := EVal(b, oc) //_o2log(oo, 12, "=> oo:...", .T.) i := 0 FOR EACH a IN oo:GetAll() o := a[2] IF "BUTT" $ o:cType i++ ? str(i, 2), o:cName, o:cType IF HB_ISBLOCK( b := oAlert():b_Btn2BtnEx ) This.&(o:cName).Release ob := EVal(b, o) IF !Empty(cFocus) This.&(cFocus).SetFocus ENDIF //_o2log(ob, 12, "=> ob:...", .T.) ENDIF ENDIF NEXT ENDIF ENDIF Return Nil } o:b_Cargo2oNew := {|oc| Local oo := oHmgData(), a, o Default oc := This.Cargo FOR EACH a IN oc:GetAll() o := oHmgData() o:nPos := hb_enumindex(a) IF HB_ISCHAR(a[2]) o:cName := a[1] o:cType := a[2] o:nIndex := This.&(a[1]).Index o:nY := int(This.&(a[1]).Row) o:nX := int(This.&(a[1]).Col) o:nW := int(This.&(a[1]).Width) o:nH := int(This.&(a[1]).Height) IF "BUTT" $ a[2] // [O]BUTTON o:cCaption := This.&(a[1]).Caption o:cInpMask := _HMG_aControlInputMask [ o:nIndex ] o:bAction := _HMG_aControlProcedures[ o:nIndex ] o:cFont := _HMG_aControlFontName [ o:nIndex ] o:nFont := _HMG_aControlFontSize [ o:nIndex ] o:aFont := _HMG_aControlFontAttributes[ o:nIndex ] o:hFont := _HMG_aControlFontHandle[ o:nIndex ] ELSEIF "LABE" $ a[2] // LABEL o:cValue := This.&(a[1]).Value ELSEIF "EDIT" $ a[2] // EDIBOX ELSEIF "TIME" $ a[2] // TIMER ENDIF oo:Set(a[1], o) ELSEIF a[1] == "DRAW" o:cType := a[1] o:aDraw := AClone(a[2]) o:cName := a[2][1] o:nY := int(a[2][2]) o:nX := int(a[2][3]) o:nW := a[2][5] o:nH := a[2][5] o:cIcoFile := a[2][4] o:lIsNumber := HB_ISNUMERIC( o:cIcoFile ) IF o:lIsNumber o:lIsHIcon := IsHIcon( o:cIcoFile ) ELSE o:lIsHIcon := .F. ENDIF oo:Set(a[1], o) ENDIF NEXT DO EVENTS Return oo } o:b_Btn2BtnEx := {|o| // меняем Button -> OButton Local ob := oHmgData() ob:Set(o:GetAll()) DEFINE BUTTONEX &(ob:cName) ROW ob:nY COL ob:nX WIDTH ob:nW HEIGHT ob:nH CAPTION ob:cCaption //BACKCOLOR aBack NOHOTLIGHT .F. NOXPSTYLE .F. VERTICAL .T. FLAT .T. END BUTTONEX This.&(ob:cName).Action := ob:bAction ob:nIndex := This.&(ob:cName).Index ob:cType := This.&(ob:cName).Type //"OBUTTON" Return ob } ...
|
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 2273
Зарегистрирован: 11.02.10
|
|
Отправлено: 12.02.24 12:25. Заголовок: SergKis пишет: Это ..
SergKis пишет: Понял. Тогда обрамление кода будет другим: цитата: | #ifdef _OBJECT_ ... #endif |
| поскольку в лайт-версии библиотеки команда SET OOP ON не поддерживается. P.S. Кстати, решил разделить Минигуи на две сборки: 1) профессиональную версию (с разными дополнительными оптимизациями в Харборе и компактным бинарником Минигуи) 2) стандартную версию, которая будет распространяться бесплатно, но без дополнительных оптимизаций в Харборе и с отладочным кодом в библиотеке). Что скажете по этому поводу На мой взгляд, надо стимулировать пользователей, которые поддерживают развитие и поддержание библиотеки в актуальном состоянии.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 4512
Зарегистрирован: 17.02.12
|
|
Отправлено: 12.02.24 12:32. Заголовок: gfilatov2002 пишет п..
gfilatov2002 пишет цитата: | поскольку в лайт-версии библиотеки команда SET OOP ON не поддерживается |
| Поддерживается (включен) CLASS THmgData и oHmgData() до команды #ifdef _OBJECT_ в h_objects.prg
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 2274
Зарегистрирован: 11.02.10
|
|
Отправлено: 12.02.24 12:37. Заголовок: SergKis пишет: Подд..
SergKis пишет: А как же тогда работает эта запись в заголовке minigui.ch цитата: | /* *********************************************************************** * Enable support for the internal OOP classes * * By default this is turned ON. */ #ifndef _LITE_ #define _OBJECT_ #endif |
|
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 4513
Зарегистрирован: 17.02.12
|
|
Отправлено: 12.02.24 12:54. Заголовок: gfilatov2002 Смотрю..
gfilatov2002 Смотрю h_objects.prg /* * MINIGUI - Harbour Win32 GUI library source code * * Copyright 2017-2022 Aleksandr Belov, Sergej Kiselev <bilance@bilance.lv> */ #include "minigui.ch" #include "i_winuser.ch" #ifdef __XHARBOUR__ #include "hbcompat.ch" #else #xtranslate hb_HSetCaseMatch( <x>[, <z>] ) => ( hb_HCaseMatch( <x>[, <z>] ), <x> ) #endif #include "hbclass.ch" #define _METHOD METHOD STATIC o_AppDlu2Pixel /////////////////////////////////////////////////////////////////////////////// CLASS THmgData /////////////////////////////////////////////////////////////////////////////// ... #ifdef _OBJECT_ #ifndef __XHARBOUR__ /////////////////////////////////////////////////////////////////////////////// CLASS TIniData INHERIT THmgData /////////////////////////////////////////////////////////////////////////////// ... Объект-контейнер в любой версии должен быть, мое мнение, он, как и препроцессор, основа в псевдо ООП
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 2275
Зарегистрирован: 11.02.10
|
|
Отправлено: 12.02.24 12:57. Заголовок: SergKis пишет: Смот..
SergKis пишет: Все верно! Функция oHmgData() используется при создании глобальных статических переменных в ядре библиотеки. Тогда обрамление будет таким #ifdef _NAMES_LIST_ ...
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 4514
Зарегистрирован: 17.02.12
|
|
Отправлено: 12.02.24 13:25. Заголовок: gfilatov2002 пишет К..
gfilatov2002 пишет цитата: | Кстати, решил разделить Минигуи на две сборки: |
| Не оч. понятно деление. По мне сейчас Min. комплект - SET OOP OFF, даже не представляю, что что то, серьезное, можно делать с ним (SQLRDD лишнее в ней). Когда заходили в hmg (~2012 г.) именно SET OOP ON не было, сделали и с тех пор это рабочая версия (по TsBrowse по мелочи перенес изменения из тек. версии в свою и всего хватает) PS В той, старой, версии еще не было тотальной борьбы за минимизацию кода и это хорошо, в ней спокойно работают hrb компиляции на лету, без комплекта harbour.exe и Include файлов, сейчас компиляция на лету затруднена, т.к. практически все нужные ф-ии убраны в файлы *.ch, например, это одна из причин, по которой не могу задействовать тек. версии hmg (только в качестве небольших утилит использовал) PS Пример для наглядности работы с macro использованием псевдо ф-й (т.е. городим огород), на основе oHmgData() делаем Скрытый текст
*----------------------------------------------------------------------------* FUNCTION oSys(cSec) // App.Cargo:oSystem usage: oSys():cTempFolder *----------------------------------------------------------------------------* LOCAL o IF Empty( App.Cargo:oSystem ) App.Cargo:oSystem := oHmgData() ; o := App.Cargo:oSystem o:nBorderWidth := GetBorderWidth() o:nBorderHeight := GetBorderHeight() o:nTitleHeight := GetTitleHeight() o:nMenuBarHeight := GetMenuBarHeight() o:BorderWidth := o:nBorderWidth o:BorderHeight := o:nBorderHeight o:TitleHeight := o:nTitleHeight o:MenuBarHeight := o:nMenuBarHeight // System folder o:cDesktopFolder := Sys.DesktopFolder + hb_ps() o:cMyDocumentsFolder := Sys.MyDocumentsFolder + hb_ps() o:cProgramFilesFolder := Sys.ProgramFilesFolder + hb_ps() o:cSystemFolder := Sys.SystemFolder + hb_ps() o:cTempFolder := Sys.TempFolder + hb_ps() o:cUserTempFolder := Sys.UserTempFolder + hb_ps() o:cWindowsFolder := Sys.WindowsFolder + hb_ps() o:DesktopFolder := Sys.DesktopFolder o:MyDocumentsFolder := Sys.MyDocumentsFolder o:ProgramFilesFolder := Sys.ProgramFilesFolder o:SystemFolder := Sys.SystemFolder o:TempFolder := Sys.TempFolder o:UserTempFolder := Sys.UserTempFolder o:WindowsFolder := Sys.WindowsFolder // Desktop area o:nRow := 0 o:nCol := 0 - GetBorderWidth() o:nWidth := Sys.DesktopWidth o:nHeight := Sys.DesktopHeight o:nDesktopWidth := Sys.DesktopWidth o:nDesktopHeight := Sys.DesktopHeight o:Y := o:nRow o:X := o:nCol o:W := o:nWidth o:H := o:nHeight o:MaxW := GetDesktopWidth() + 2*GetBorderWidth () o:MinH := GetTitleHeight () + 2*GetBorderHeight() + 2*GetMenuBarHeight() o:Row := o:nRow o:Col := o:nCol o:Width := o:nWidth o:Height := o:nHeight o:DesktopWidth := o:nDesktopWidth o:DesktopHeight := o:nDesktopHeight // Cliend area o:nClientRow := Sys.ClientRow o:nClientCol := Sys.ClientCol o:nClientWidth := Sys.ClientWidth o:nClientHeight := Sys.ClientHeight o:nY := o:nClientRow o:nX := o:nClientCol o:nW := o:nClientWidth o:nH := o:nClientHeight o:ClientRow := o:nClientRow o:ClientCol := o:nClientCol o:ClientWidth := o:nClientWidth o:ClientHeight := o:nClientHeight // TsBrowse color o:oTsbClr := oHmgData() o:oTsbClr:nClrText := GetSysColor( COLOR_WINDOWTEXT ) // [ 1 ] o:oTsbClr:nClrPane := GetSysColor( COLOR_WINDOW ) // [ 2 ] o:oTsbClr:nClrHeadFore := GetSysColor( COLOR_BTNTEXT ) // [ 3 ] o:oTsbClr:nClrHeadBack := GetSysColor( COLOR_BTNFACE ) // [ 4 ] o:oTsbClr:nClrForeFocu := GetSysColor( COLOR_CAPTIONTEXT ) // [ 5 ] o:oTsbClr:nClrFocuBack := GetSysColor( COLOR_ACTIVECAPTION ) // [ 6 ] o:oTsbClr:nClrEditFore := GetSysColor( COLOR_WINDOWTEXT ) // [ 7 ] o:oTsbClr:nClrEditBack := GetSysColor( COLOR_WINDOW ) // [ 8 ] o:oTsbClr:nClrFootFore := GetSysColor( COLOR_BTNTEXT ) // [ 9 ] o:oTsbClr:nClrFootBack := GetSysColor( COLOR_BTNFACE ) // [ 10 ] o:oTsbClr:nClrSeleFore := CLR_HGRAY // [ 11 ] inactive focused o:oTsbClr:nClrSeleBack := CLR_GRAY // [ 12 ] inactive focused o:oTsbClr:nClrOrdeFore := GetSysColor( COLOR_BTNTEXT ) // [ 13 ] o:oTsbClr:nClrOrdeBack := GetSysColor( COLOR_BTNFACE ) // [ 14 ] o:oTsbClr:nClrLine := GetSysColor( COLOR_BTNSHADOW ) // [ 15 ] o:oTsbClr:nClrSupHeadFore := GetSysColor( COLOR_BTNTEXT ) // [ 16 ] o:oTsbClr:nClrSupHeadBack := GetSysColor( COLOR_BTNFACE ) // [ 17 ] o:oTsbClr:nClrSpecHeadFore := GetSysColor( COLOR_BTNTEXT ) // [ 18 ] o:oTsbClr:nClrSpecHeadBack := GetSysColor( COLOR_BTNFACE ) // [ 19 ] o:oTsbClr:nClrSpecHeadActive := CLR_HRED // [ 20 ] o:oTsbClr:nClrAutoFilter := GetSysColor( COLOR_INACTCAPTEXT ) // [ 19 ] o:oTsbClr:nClrAutoSearch := GetSysColor( COLOR_INFOBK ) // [ 19 ] o:oTsbClr:nClrBtnHighLight := GetSysColor( COLOR_BTNHIGHLIGHT ) o:oTsbClr:nClrBtnChadow := GetSysColor( COLOR_BTNSHADOW ) o:oTsbClr:nClr_1 := o:nClrText // [ 1 ] o:oTsbClr:nClr_2 := o:nClrPane // [ 2 ] o:oTsbClr:nClr_3 := o:nClrHeadFore // [ 3 ] o:oTsbClr:nClr_4 := o:nClrHeadBack // [ 4 ] o:oTsbClr:nClr_5 := o:nClrForeFocu // [ 5 ] o:oTsbClr:nClr_6 := o:nClrFocuBack // [ 6 ] o:oTsbClr:nClr_7 := o:nClrEditFore // [ 7 ] o:oTsbClr:nClr_8 := o:nClrEditBack // [ 8 ] o:oTsbClr:nClr_9 := o:nClrFootFore // [ 9 ] o:oTsbClr:nClr_10 := o:nClrFootBack // [ 10 ] o:oTsbClr:nClr_11 := o:nClrSeleFore // [ 11 ] inactive focused o:oTsbClr:nClr_12 := o:nClrSeleBack // [ 12 ] inactive focused o:oTsbClr:nClr_13 := o:nClrOrdeFore // [ 13 ] o:oTsbClr:nClr_14 := o:nClrOrdeBack // [ 14 ] o:oTsbClr:nClr_15 := o:nClrLine // [ 15 ] o:oTsbClr:nClr_16 := o:nClrSupHeadFore // [ 16 ] o:oTsbClr:nClr_17 := o:nClrSupHeadBack // [ 17 ] o:oTsbClr:nClr_18 := o:nClrSpecHeadFore // [ 18 ] o:oTsbClr:nClr_19 := o:nClrSpecHeadBack // [ 19 ] o:oTsbClr:nClr_20 := o:nClrSpecHeadActive // [ 20 ] ENDIF IF HB_ISCHAR(cSec) IF "TSBC" $ upper(cSec) .or. "TSB" $ upper(cSec) RETURN App.Cargo:oSystem:oTsbClr ENDIF ENDIF RETURN App.Cargo:oSystem
| и используем в ini aWindow_YXWH = { oSys():Y, oSys():X, oSys():MaxW, oSys():MinH + 64 } PS Используя такую методику, теряется совместимость кодов для получения hrb, т.е. надо используемые ф-ии из *.ch переносить в отдельную lib и отключать *.ch от сборки проекта (собирать harbour.exe+Include можно, но для меня не вариант). Пока др. мыслей у меня нет
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 4517
Зарегистрирован: 17.02.12
|
|
Отправлено: 12.02.24 16:41. Заголовок: gfilatov2002 пишет ..
gfilatov2002 пишет цитата: | Тогда обрамление будет таким #ifdef _NAMES_LIST_ ... |
| CLASS THmgData не должен иметь никаких обрамлений кода, т.е. доступен всегда, как и заполнение Cargo Alert окна. Обрамление, как было, так и должно остаться при определении public переменных
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 2276
Зарегистрирован: 11.02.10
|
|
Отправлено: 12.02.24 17:03. Заголовок: SergKis пишет: CLAS..
SergKis пишет: цитата: | CLASS THmgData не должен иметь никаких обрамлений кода |
| Да. Именно так сейчас и сделано в коде ядра. И в заголовке minigui.ch указано: /* *********************************************************************** * Enable support for the internal OOP classes * * By default this is turned ON. */ #ifndef _LITE_ #define _OBJECT_ #endif
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 4518
Зарегистрирован: 17.02.12
|
|
Отправлено: 12.02.24 17:27. Заголовок: gfilatov2002 пишет И..
gfilatov2002 пишет цитата: | Именно так сейчас и сделано в коде ядра. |
| Я бы еще добавил уст. Значения во всех окнах, контролах (где сейчас пусто) _HMG_aControlMiscData2 [k] := oHmgData() вместо '' _HMG_aFormMiscData2 [ k ] := oHmgData() вместо '' и ,возможно, App.Cargo тоже, сейчас там версия (значение char), его перенести в объект App.Cargo под опред. именем "раз пошла такая пьянка ..."
|
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 7683
Зарегистрирован: 12.09.06
|
|
Отправлено: 12.02.24 18:41. Заголовок: Да при старте програ..
Да при старте программы делаем: INIT PROCEDURE SetsENV() SET DATE TO GERMAN SET DECIMALS TO 4 SET EPOCH TO 2000 SET EXACT ON SET SOFTSEEK ON SET CENTURY ON SET AUTOPEN OFF SET DELETED OFF ? Valtype(App.Cargo), App.Cargo ..... Получаем - C Harbour MiniGUI 3.2.8 (stable) А почему сразу нельзя присвоить так: App.Cargo := oHmgData() App.Cargo:MiniGui := "Harbour MiniGUI 3.2.8 (stable)" И потом нигде не мучиться по коду, делая своё пере присвоение для App.Cargo !
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 2277
Зарегистрирован: 11.02.10
|
|
Отправлено: 12.02.24 19:14. Заголовок: Andrey пишет: почем..
Andrey пишет: цитата: | почему сразу нельзя присвоить так: App.Cargo := oHmgData() |
| Уже сделал Благодарю за подсказку
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 7684
Зарегистрирован: 12.09.06
|
|
Отправлено: 12.02.24 21:20. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | P.S. Кстати, решил разделить Минигуи на две сборки: 1) профессиональную версию (с разными дополнительными оптимизациями в Харборе и компактным бинарником Минигуи) 2) стандартную версию, которая будет распространяться бесплатно, но без дополнительных оптимизаций в Харборе и с отладочным кодом в библиотеке). Что скажете по этому поводу |
| Может и надо такое деление... Только в проф-версию ещё бы предоставить сборку с MS-C и Unicode
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 4519
Зарегистрирован: 17.02.12
|
|
Отправлено: 13.02.24 09:11. Заголовок: gfilatov2002 Неболь..
gfilatov2002 Небольшая добавка CLASS TIniData INHERIT THmgData ... VAR nMaxVal AS NUMERIC INIT 20 // Max. length Value for note VAR cSrcReplChar AS STRING INIT "" // Original replacement character VAR cOutReplChar AS STRING INIT "" // Replacement by output symbol METHOD New( cIni, lMacro, lUtf8, cChar, cData, cSrcChar, cOutChar ) INLINE ( ::Super:New( .T. ), ; ::Def( cIni, lMacro, lUtf8, cChar, cData, cSrcChar, cOutChar ), Self ) CONSTRUCTOR _METHOD Def( cIni, lMacro, lUtf8, cChar, cData, cSrcChar, cOutChar ) _METHOD Read( cIniNew ) ... METHOD Def( cIni, lMacro, lUtf8, cChar, cData, cSrcChar, cOutChar ) CLASS TIniData ... ::cCommentChar := hb_defaultValue( cChar, ::cCommentChar ) IF HB_ISCHAR( cSrcChar ) .and. HB_ISCHAR( cOutChar ) ::cSrcReplChar := cSrcChar ::cOutReplChar := cOutChar ENDIF ... METHOD ToValue( cStr ) CLASS TIniData LOCAL xVal IF Empty( cStr ) ; RETURN cStr ENDIF IF !Empty( ::cSrcReplChar ) cStr := StrTran( cStr, ::cSrcReplChar, ::cOutReplChar ) ENDIF ... Это для оформления строк ini как таблица с колонками, задавать надо оба значения сразу, т.е. o:oMenuData := TIniData():New(o:cMenuFile, .T., , , , "|", ","):Read() или o:oMenuData := TIniData():New(o:cMenuFile, .T., , , , chr(9), ""):Read() содержимое ini, например, такое Скрытый текст
[MENU_1] ; //--------------------------------------------------------------------------------------------------------------------------------- ; // Name Item text Icon Font Disable Function Param Separator ; //--1-------------------2---------------------------3------------------------4--------5-------6---------------7---------------8---- 010 = { 0 | gTxt('Caption_1') | "i_About32" | "Bold" | 1 | "MsgInfo" | "" | 1 } 020 = {"I_1"| '&1. '+gTxt('Menu_by_1') | oAC('ICO'):cIcoMyDbg | "Bold" | | "My_Debug" | {1,2,3} | } 030 = {"I_2"| '&2. '+gTxt('Menu_by_2') | oAC('ICO'):cIcoMyDbg | "Normal" | | "My_Debug" | {2,"Str3"} | } 040 = {"I_3"| '&3. '+gTxt('Menu_by_3') | oAC('ICO'):cIcoMyDbg | "Bold" | | "My_Debug" | {3,"Str4"} | 1 } 050 = {"I_4"| '&4. '+gTxt('Menu_by_4') | oAC('ICO'):cIcoMgDbg | "Normal" | | "Mg_Debug" | {4,"Str4"} | } 060 = {"I_5"| '&5. '+gTxt('Menu_by_5') | oAC('ICO'):cIcoMgDbg | "Bold" | | "Mg_Debug" | {5,"Str5"} | 1 } 070 = {"M11"| '&6. '+gTxt('Menu_by_6') | oAC('ICO'):cIcoYesNo | "DlgFont" | | "My_YesNo" | {"test11"} | } 080 = {"M13"| '&7. '+gTxt('Menu_by_7') | oAC('ICO'):cIcoYesNo | "ComSnMs" | | "My_YesNo" | {"test12"} | 1 } 090 = {"M14"| '&8. '+gTxt('Menu_by_8') | oAC('ICO'):cIcoInfo | "Bold" | | "AlertInfo" | {"test14"} | } 100 = {"M15"| '&9. '+gTxt('Menu_by_9') | oAC('ICO'):cIcoInfo | "DlgFont" | | "AlertInfo" | {"test15"} | 1 } 110 = {"YYY"| '&A. '+gTxt('Run_Notepad_1') | oAC('ICO'):cIcoNtpd | "ComSnMs" | | "myViewLog" | {1,2,3,.F. , ,"a"} | } 120 = {"ZZZ"| '&B. '+gTxt('Run_Notepad_2') | oAC('ICO'):cIcoNtpd | "ComSnMs" | | "myOpenLog" | {2,4,6,.T. , ,"b"} | 1 } 130 = {"I_7"| '&C. '+gTxt('No_processing_f_1') | "i_About32" | "Bold" | 1 | "No_Funct" | {"Str7",7} | } 140 = {"I_8"| '&D. '+gTxt('No_processing_f_2') | oAC('ICO'):cIcoNoExe | "Normal" | | "No_Funct" | {"Str8",8} | }
|
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 2278
Зарегистрирован: 11.02.10
|
|
Отправлено: 13.02.24 11:50. Заголовок: SergKis пишет: Небо..
SergKis пишет: OK
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 4520
Зарегистрирован: 17.02.12
|
|
Отправлено: 14.02.24 11:10. Заголовок: gfilatov2002 пишет К..
gfilatov2002 пишет цитата: | Кстати, решил разделить Минигуи на две сборки: |
| Сборки, по мне, должны содержать WVT, WVG lib, т.к. часто надо делать доступы к разным, чужим базам, почта, ... Это проще делать на WVT (у нас она сделана была как WVG еще на hb 2.0, содержит main menu, statusbar, button, ...). Сейчас иду делать это на свою сбору hb и hmg, т.к. для таких работ не требуется GUI интерфейс, но схожесть нужна
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 4521
Зарегистрирован: 17.02.12
|
|
Отправлено: 14.02.24 13:07. Заголовок: PS Как относится к т..
PS Как относится к тек. версии hmg, как к конечной ? След. сборки уже поделятся на 2-е ? Т.к. новые сборки пока изучишь, пока поймешь, что можно, что нельзя ..., т.е. до реал. использования много времени утечет.
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 2279
Зарегистрирован: 11.02.10
|
|
Отправлено: 14.02.24 13:22. Заголовок: SergKis пишет: След..
SergKis пишет: цитата: | След. сборки уже поделятся на 2-е ? |
| Да. Но разница между ними будет только в отсутствии оптимизации кода Минигуи и Харбора в стандартной сборке. Эти оптимизации будут использованы в платной PRO-версии. Вот и все.
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 4522
Зарегистрирован: 17.02.12
|
|
Отправлено: 14.02.24 13:29. Заголовок: gfilatov2002 пишет Д..
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|