Вверх ↑
Этот топик читают: Гость
Ответов: 1926
Рейтинг: 172
#1: 2024-03-22 20:31:55 ЛС | профиль | цитата
Это когда Redaction=true, и при двойном клике появляются поля для редактирования. Но прямого доступа к ним нет.
А нужно, например, сделать некоторые edit-ы недоступными для редактирования или выделить цветом.


Add(InlineCode,644566,658,560)
{
WorkPoints=#1:c|
DataPoints=#1:h|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses kol,Share,Debug,windows;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|9: public|16: h:THI_Event;|42: procedure c(var dt:TData; index:word);|5: end;|0:|14:implementation|0:|24:procedure THiAsmClass.c;|16:var hnd:integer;|18: Ctl: pControl;|5:begin|26: hnd := ToIntegerEvent(h);|39: Ctl := Pointer(GetProp(hnd, ID_SELF));|66: //GetProp - ф-ция winapi, извлекает указанное св-во окна/контрола|100: //SetProp - устанавливает св-во окна/контрола, в т.ч. произвольное (SetProp(hwnd, "TestProp", 555))|54: //KOL заносит в св-во ID_SELF Pcontrol (слава б-гу :)|22: Ctl.Color := $E8E8E8;|17: //_hi_OnEvent();|4:end;|0:|4:end.|
link(h,11891032:Var1,[(664,488)])
}
Add(MainForm,10489408,231,105)
{
Width=911
Height=350
Position=1
}
Add(StringTableMT,7503742,462,119)
{
Width=903
Height=250
Align=2
Font=[Calibri,28,0,0,204]
Name="table1"
Columns=#7:авб=200|7:где=150|7:еёж=150|11:зик-T20=160|7:лмн=160|
StrDelimiter="\9"
Redaction=0
Flat=1
TabGrid=0
Grid=0
IconsCheck=[]
MiscIcons=[]
Icons=[]
StringsStrLst=#24:йцу\9енг\9шщз\9фыв\9апро|28:еке\9енг\9шщипз\9фы54в\9апро|32:йцпку\9е55нг\9ш5нщз\9фыв\9апрьго|34:й5епцу\9ен634г\9шщз\9фыцьв\9аьпгро|34:йцрну\9е5нг\9шитщз\9фтпыв\9апрпк4о|
AutoTblStrLst=0
StaticColumn=0
Point(onEscCell)
Point(onChange)
Point(Matrix)
Point(EndIdx)
Point(FullTextTab)
Point(doInitTxtTab)
Point(onKeyDown)
Point(Index)
Point(Handle)
}
Add(InfoTip,13056749,231,266)
{
Info=#31:Блокировка редактирования ячеек|
Font=[MS Sans Serif,8,1,0,1]
Frame=2
HAlign=0
Width=498
Height=340
Margin=3
}
Add(Timer,2437119,301,413)
{
Interval=200
link(onTimer,1492792:doEvent1,[])
}
Add(Hub,1492792,350,413)
{
OutCount=4
link(onEvent2,3632333:In,[])
link(onEvent3,11821637:doEnumChildWindows,[])
link(onEvent4,6899760:doEnum,[(374,440)(374,531)])
}
Add(LineBreak,4662516,539,322)
{
link(Out,3781745:doClear,[])
Primary=[3632333,-161,98]
}
Add(WinEnum,11821637,420,406)
{
Point(onEnumChildWindows)
Point(doEnumChildWindows)
Point(ParentHandle)
link(onEnumChildWindows,12747369:doValue,[])
link(ParentHandle,2020457:Var,[])
}
Add(MT_MultiMem,12747369,469,420)
{
link(onData,10525174:doCompare,[])
}
Add(If_else,10525174,511,420)
{
Op2=String(obj_EDIT)
link(onTrue,1765035:doAdd,[])
link(Op1,12747369:Value1,[(517,408)(496,408)(496,464)(475,464)])
AddHint(1,37,70,13,Op2)
}
Add(IntegerArray,3781745,581,308)
{
IntArray=[]
}
Add(ArrayRW,1765035,581,406)
{
link(Array,922605:Var2,[])
link(Value,16686113:Var,[])
}
Add(LineBreak,16606972,476,476)
{
Caption="hnd"
Type=1
link(Data,12747369:Value2,[])
Primary=[16686113,119,-98]
}
Add(LineBreak,8278647,504,175)
{
Caption="hnd1"
Type=1
link(Data,7503742:Handle,[])
Primary=[2020457,-77,189]
}
Add(GetDataEx,922605,581,343)
{
link(Data,3781745:Array,[])
}
Add(LineBreak,9069183,588,357)
{
Caption="arr"
Type=1
link(Data,922605:Var3,[(594,348)])
Primary=[1795958,-203,140]
}
Add(CounterEx,5285802,427,525)
{
Max=1
Default=-1
Point(onThroughMax)
link(onNext,999608:doEvent1,[])
}
Add(ArrayEnum,6899760,385,525)
{
Type=1
link(onItem,5285802:doNext,[])
link(Array,1795958:Var,[])
AddHint(-85,26,35,13,Type)
}
Add(Case,6258814,497,532)
{
Value=Integer(1)
link(onTrue,7738208:In,[])
AddHint(3,-23,21,13,Value)
}
Add(Hub,999608,469,525)
{
link(onEvent1,5300686:doData,[])
link(onEvent2,6258814:doCase,[])
}
Add(LineBreak,12096479,343,532)
{
link(Out,6899760:doStop,[])
Primary=[7738208,196,7]
}
Add(WinTools,10447454,665,497)
{
Point(doEnable)
link(Handle,11891032:Var2,[])
}
Add(DoData,5300686,581,525)
{
Data=Integer(0)
link(onEventData,7030212:doEvent1,[])
AddHint(1,35,21,13,Data)
}
Add(LineBreak,1556672,385,567)
{
Caption="hnd"
Type=1
link(Data,6899760:Item,[])
Primary=[3317433,280,-105]
}
Add(Hub,7030212,623,525)
{
link(onEvent1,10447454:doEnable,[])
link(onEvent2,644566:c,[(647,538)(647,566)])
}
Add(GetDataEx,11891032,665,483)
{
link(Data,3317433:Var,[])
}
В IC код получает доступ к PControl по handle и можно менять стандартные св-ва контрола (а не только как оконного элемента).
карма: 9
0
Ответов: 793
Рейтинг: 168
#2: 2024-03-22 22:26:57 ЛС | профиль | цитата
3042 писал(а):
А нужно, например, сделать некоторые edit-ы недоступными для редактировани

С MTStrTbl можно обойтись и без InlineCode

Add(MainForm,15443588,238,112)
{
Width=621
Height=307
link(onCreate,3682515:doConvert,[])
}
Add(MTStrTbl,15391708,168,105)
{
Width=605
Height=268
Align=5
Name="tabs"
}
Add(Edit,6793014,462,224)
{
Left=10
Top=10
Width=135
Visible=1
WinStyle=1
Text=""
DataType=4
Point(doLeft)
Point(doTop)
Point(doWidth)
Point(doHeight)
Point(doVisible)
Point(doSetFocus)
Point(doBringToFront)
Point(doPosition)
Point(onKillFocus)
link(onChange,11974708:doData,[(501,230)(501,202)(116,202)(116,223)])
link(onEnter,8315683:doWork1,[(505,237)])
link(Str,7799279:Cell,[(468,215)(335,215)(335,271)(202,271)])
link(onKillFocus,8315683:doWork2,[])
}
Add(MST_UseEditCtrl,7799279,175,217)
{
MSTControl="tabs"
Point(doClientRect)
PColor(onCellSize,8421440)
PColor(onEscCell,32768)
link(onCellSize,9358300:doEvent,[])
}
Add(DoData,11974708,126,217)
{
link(onEventData,7799279:doSetData,[])
link(Data,6793014:Text,[(132,208)(167,208)(167,306)(468,306)])
}
Add(MT_MultiData,2622840,378,238)
{
Count=4
link(onData1,6793014:doLeft,[])
link(onData2,6793014:doTop,[])
link(onData3,6793014:doWidth,[])
link(onData4,12356216:doEvent1,[])
}
Add(Hub,12356216,427,259)
{
OutCount=5
link(onEvent1,6793014:doHeight,[])
link(onEvent2,6010293:doWork2,[])
link(onEvent3,6793014:doSetFocus,[])
link(onEvent4,6793014:doBringToFront,[])
link(onEvent5,6793014:doPosition,[])
}
Add(Hub,4296656,343,231)
{
link(onEvent1,6793014:doText2,[])
link(onEvent2,2622840:doSeparateMT,[])
}
Add(HubEx,8315683,501,238)
{
Angle=1
link(onEvent,12057740:doClear,[(505,272)])
}
Add(Memory,12057740,518,259)
{
Default=Integer(0)
link(onData,6010293:doWork1,[(556,265)(556,302)(452,302)])
}
Add(HubEx,6010293,448,266)
{
link(onEvent,6793014:doVisible,[])
}
Add(MST_ColAction,4139610,385,126)
{
Action=9
MaxColWidth=1000
Index=-2
MSTControl="tabs"
}
Add(MST_Load,571213,336,119)
{
Delimiter="\t"
MSTControl="tabs"
link(onLoadFromStream,4139610:doColAction,[])
}
Add(StreamConvertor,3682515,287,126)
{
Mode=7
Point(Data)
link(onResult,571213:doLoadFromStream,[])
link(Data,6934679:Text,[])
}
Add(StrList,6934679,287,77)
{
Strings=#42:Item Description Quantity Unit Price Value|63:13930 Double-action Quickstart II rem. L=740mm 1 PC 98,66 98,66|53:13100201 Spray gun for udder washer 20 PC 17,77 355,4|49:13246007 COMBI-cock ш51 mm cpl. 10 PC 63,43 634,3|51:25643301 Milk hose ш 24/14 x 2750 32 PC 9,76 312,32|56:14291 Service no.1 RDS MAX double box 1 PC 250,51 250,51|54:24144638 Spiral spring for tube filter 3 PC 43,2 129,6|40:22121763 V-belt spz 1087 4 PC 5,91 23,64|61:MH0015 Repair kit non-rotating cylinder ш40mm 8 PC 14,3 114,4|48:GS9835 Revision set SAC Unipuls 4 PC 13,97 55,88|52:22121735 El-motor 3,0kw 3x400v 1400 1 PC 186,4 186,4|55:23544122 Carbon disc ш44,7/38,3x5,8mm 10 PC 16,92 169,2|55:23544122 Carbon disc ш44,7/38,3x5,8mm 10 PC 16,92 169,2|54:23544122 Carbon disc ш44,7/38,3x5,8mm 2 PC 16,92 33,84|64:21200159 Top part UNIFL3/4 for steel bot.part 25 PC 30,09 752,25|57:24400111 Hose f. pump compl. UNIWASH 153 PC 10,58 1618,74|58:13225 Piston complete for valve UNIWASH3 4 PC 27,09 108,36|60:12200105 Vacuumgauge glycerine ш100mm 3/8" 5 PC 40,57 202,85|0:|
}
Add(MT_IndexToChanel,9358300,238,217)
{
Count=6
Point(Index)
link(Index,7799279:SubItem,[(244,208)(230,208)(230,257)(188,257)])
link(onEvent3,9574131:doWork2,[])
link(onEvent5,3908987:doWork2,[])
link(onEvent6,3908987:doWork3,[(284,258)])
}
Add(HubEx,9574131,280,231)
{
link(onEvent,4296656:doEvent1,[])
}
Add(HubEx,3908987,280,245)
{
Angle=3
link(onEvent,9574131:doWork3,[])
}

карма: 16

0
Ответов: 1926
Рейтинг: 172
#3: 2024-03-23 00:41:07 ЛС | профиль | цитата
Gunta, у меня в коде у таблицы Redaction=true, что позволяет не заморачиваться со всеми этими doLeft, doWidth...
И у StringTableMT также есть возможность в режиме Redaction=false использовать внешний edit со всеми этими связями на doLeft, doWidth (точка onMT_CellClick). А я говорил про ситуацию, когда хочется использовать уже встроенные edit-ы в таблицу, но при этом иметь к ним доступ как к внешним.

Редактировалось 1 раз(а), последний 2024-03-23 00:49:45
карма: 9
0
Ответов: 793
Рейтинг: 168
#4: 2024-03-23 11:53:12 ЛС | профиль | цитата
3042 писал(а):
у меня в коде у таблицы Redaction=true, что позволяет не заморачиваться со всеми этими doLeft, doWidth...

Как вариант
Add(MainForm,15443588,280,98)
{
Width=621
Height=307
link(onCreate,3682515:doConvert,[])
}
Add(MTStrTbl,15391708,273,161)
{
Width=605
Height=268
Align=5
Name="tabs"
Redaction=0
Point(onBeforeLineChange)
Point(ItemAtPos)
Point(onLineChange)
Point(onDblClick)
link(onBeforeLineChange,3924359:doAdd,[])
link(onLineChange,13600502:doValue,[])
link(onDblClick,10497607:doSeparateMT,[(319,209)(319,300)])
}
Add(MST_ColAction,4139610,427,112)
{
Action=9
MaxColWidth=1000
Index=-2
MSTControl="tabs"
}
Add(MST_Load,571213,378,105)
{
Delimiter="\t"
MSTControl="tabs"
link(onLoadFromStream,4139610:doColAction,[])
}
Add(StreamConvertor,3682515,329,112)
{
Mode=7
Point(Data)
link(onResult,571213:doLoadFromStream,[])
link(Data,6934679:Text,[])
}
Add(StrList,6934679,329,63)
{
Strings=#42:Item Description Quantity Unit Price Value|63:13930 Double-action Quickstart II rem. L=740mm 1 PC 98,66 98,66|53:13100201 Spray gun for udder washer 20 PC 17,77 355,4|49:13246007 COMBI-cock ш51 mm cpl. 10 PC 63,43 634,3|51:25643301 Milk hose ш 24/14 x 2750 32 PC 9,76 312,32|56:14291 Service no.1 RDS MAX double box 1 PC 250,51 250,51|54:24144638 Spiral spring for tube filter 3 PC 43,2 129,6|40:22121763 V-belt spz 1087 4 PC 5,91 23,64|61:MH0015 Repair kit non-rotating cylinder ш40mm 8 PC 14,3 114,4|48:GS9835 Revision set SAC Unipuls 4 PC 13,97 55,88|52:22121735 El-motor 3,0kw 3x400v 1400 1 PC 186,4 186,4|55:23544122 Carbon disc ш44,7/38,3x5,8mm 10 PC 16,92 169,2|55:23544122 Carbon disc ш44,7/38,3x5,8mm 10 PC 16,92 169,2|54:23544122 Carbon disc ш44,7/38,3x5,8mm 2 PC 16,92 33,84|64:21200159 Top part UNIFL3/4 for steel bot.part 25 PC 30,09 752,25|57:24400111 Hose f. pump compl. UNIWASH 153 PC 10,58 1618,74|58:13225 Piston complete for valve UNIWASH3 4 PC 27,09 108,36|60:12200105 Vacuumgauge glycerine ш100mm 3/8" 5 PC 40,57 202,85|0:|
}
Add(MST_EditEnd,12880784,539,294)
{
MSTControl="tabs"
link(EditEnd,4265232:Value,[])
}
Add(IndexToChanel,16239578,469,294)
{
Count=6
link(onEvent1,3296752:doWork2,[])
link(onEvent2,8960096:doWork2,[])
link(onEvent4,8960096:doWork3,[(515,321)])
}
Add(HubEx,3296752,511,294)
{
link(onEvent,12880784:doEditEnd,[])
}
Add(HubEx,8960096,511,301)
{
Angle=3
link(onEvent,3296752:doWork3,[])
}
Add(MT_MultiData,10497607,413,294)
{
From=1
Count=1
Point(Data)
link(onData1,16239578:doEvent,[])
link(Data,15391708:ItemAtPos,[(419,285)(307,285)])
}
Add(Memory,4265232,539,245)
{
Default=Integer(0)
}
Add(MT_MultiMem,13600502,399,196)
{
Count=6
link(onData,14242170:doAdd,[(452,202)(452,209)(382,209)(382,251)])
}
Add(MT_AddData,14242170,392,245)
{
Count=7
link(onAdd,16604570:doRowAction,[])
link(Data1,10403961:Value1,[])
link(Data2,10403961:Value2,[])
link(Data3,10403961:Value3,[])
link(Data4,13600502:Value3,[])
link(Data5,10403961:Value5,[])
link(Data6,13600502:Value5,[])
link(Data7,13600502:Value6,[])
}
Add(MST_RowAction,16604570,469,245)
{
Action=2
MSTControl="tabs"
}
Add(MT_MultiMem,10403961,392,189)
{
Count=6
}
Add(MT_Add,3924359,343,189)
{
InputMT=1
link(onAdd,10403961:doValue,[])
link(Data,15391708:Index,[(349,180)(335,180)(335,222)(286,222)])
}


Редактировалось 3 раз(а), последний 2024-03-23 12:23:17
карма: 16

0
Ответов: 793
Рейтинг: 168
#5: 2024-03-23 18:44:25 ЛС | профиль | цитата
3042 писал(а):
хочется использовать уже встроенные edit-ы в таблицу, но при этом иметь к ним доступ как к внешним.

Можно сделать без таймера

Add(InlineCode,644566,616,231)
{
WorkPoints=#1:c|
DataPoints=#1:h|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses kol,Share,Debug,windows;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|9: public|16: h:THI_Event;|42: procedure c(var dt:TData; index:word);|5: end;|0:|14:implementation|0:|24:procedure THiAsmClass.c;|16:var hnd:integer;|18: Ctl: pControl;|5:begin|26: hnd := ToIntegerEvent(h);|39: Ctl := Pointer(GetProp(hnd, ID_SELF));|66: //GetProp - ф-ция winapi, извлекает указанное св-во окна/контрола|100: //SetProp - устанавливает св-во окна/контрола, в т.ч. произвольное (SetProp(hwnd, "TestProp", 555))|54: //KOL заносит в св-во ID_SELF Pcontrol (слава б-гу :)|22: Ctl.Color := $E8E8E8;|17: //_hi_OnEvent();|4:end;|0:|4:end.|
link(h,11353236:Var3,[(622,187)])
}
Add(MainForm,10489408,56,224)
{
Width=1018
Height=350
Position=1
link(onCreate,7432034:doData,[])
}
Add(StringTableMT,7503742,161,210)
{
Width=1002
Height=250
Align=5
Font=[Calibri,28,0,0,204]
Name="table1"
Columns=#4:Item|11:Description|8:Quantity|4:Unit|5:Price|5:Value|
StrDelimiter="\t"
Redaction=0
Flat=1
TabGrid=0
Grid=0
IconsCheck=[]
MiscIcons=[]
Icons=[]
StringsStrLst=#63:13930 Double-action Quickstart II rem. L=740mm 1 PC 98,66 98,66|53:13100201 Spray gun for udder washer 20 PC 17,77 355,4|49:13246007 COMBI-cock ш51 mm cpl. 10 PC 63,43 634,3|51:25643301 Milk hose ш 24/14 x 2750 32 PC 9,76 312,32|56:14291 Service no.1 RDS MAX double box 1 PC 250,51 250,51|54:24144638 Spiral spring for tube filter 3 PC 43,2 129,6|40:22121763 V-belt spz 1087 4 PC 5,91 23,64|61:MH0015 Repair kit non-rotating cylinder ш40mm 8 PC 14,3 114,4|48:GS9835 Revision set SAC Unipuls 4 PC 13,97 55,88|52:22121735 El-motor 3,0kw 3x400v 1400 1 PC 186,4 186,4|55:23544122 Carbon disc ш44,7/38,3x5,8mm 10 PC 16,92 169,2|55:23544122 Carbon disc ш44,7/38,3x5,8mm 10 PC 16,92 169,2|54:23544122 Carbon disc ш44,7/38,3x5,8mm 2 PC 16,92 33,84|64:21200159 Top part UNIFL3/4 for steel bot.part 25 PC 30,09 752,25|57:24400111 Hose f. pump compl. UNIWASH 153 PC 10,58 1618,74|58:13225 Piston complete for valve UNIWASH3 4 PC 27,09 108,36|60:12200105 Vacuumgauge glycerine ш100mm 3/8" 5 PC 40,57 202,85|
AutoTblStrLst=0
StaticColumn=0
Point(onEscCell)
Point(onChange)
Point(Matrix)
Point(EndIdx)
Point(FullTextTab)
Point(doInitTxtTab)
Point(onKeyDown)
Point(Index)
Point(Handle)
Point(onDblClick)
Point(doAutoColWidth)
Point(doKeyBack)
link(onDblClick,11821637:doEnumChildWindows,[])
}
Add(WinEnum,11821637,245,217)
{
Point(onEnumChildWindows)
Point(doEnumChildWindows)
Point(ParentHandle)
link(onEnumChildWindows,5403653:doSeparateMT,[])
link(ParentHandle,7503742:Handle,[(258,208)(237,208)(237,264)(209,264)])
}
Add(If_else,10525174,343,231)
{
Op2=String(obj_EDIT)
link(onTrue,8392229:doNext,[])
}
Add(WinTools,10447454,567,196)
{
Point(doEnable)
link(Handle,11353236:Var2,[])
}
Add(DoData,7432034,105,238)
{
Data=Integer(-1)
link(onEventData,7503742:doAutoColWidth,[])
}
Add(MT_MultiData,5403653,294,231)
{
Count=1
Point(RemaindData)
link(onData1,10525174:doCompare,[])
}
Add(CounterEx,8392229,399,231)
{
Max=5
Default=-1
link(onNext,8644948:doEvent,[])
}
Add(IndexToChanel,8644948,462,231)
{
Count=6
Data=Integer(0)
link(onEvent2,722906:doWork2,[])
link(onEvent3,12623165:doWork2,[])
link(onEvent5,12623165:doWork3,[(515,265)])
}
Add(HubEx,722906,511,238)
{
Angle=3
link(onEvent,7589453:doEvent1,[(515,230)])
}
Add(HubEx,12623165,511,245)
{
Angle=3
link(onEvent,722906:doWork3,[])
}
Add(Hub,7589453,539,224)
{
link(onEvent1,10447454:doEnable,[])
link(onEvent2,644566:c,[])
}
Add(GetDataEx,11353236,567,182)
{
Angle=3
link(Data,5403653:RemaindData,[(445,187)(445,274)(300,274)])
}

карма: 16

0
Ответов: 2265
Рейтинг: 676
#6: 2024-03-27 09:14:47 ЛС | профиль | цитата
Gunta писал(а):
Можно сделать без таймера
Если редактировать клавиатурой то не будет работать.

3042, внес небольшую доработку (архив с файлами StringTableMT), в момент создания таблицей окон полей ввода на точку выдается индекс столбца и идентификатор окна поля ввода.

Добавленный код в pas файле подписан, так что если файл модифицирован, то достаточно вставить нужные строки. В ini файле это только одна строка добавляющая точку onMT_CreateEdit.
И не вижу смысла в подкрашивании, лучше сделать не доступным и убрать.
И желательно эти окна не удалять (close), так как таблица с ними работает.

Редактировалось 1 раз(а), последний 2024-03-27 09:15:15
карма: 11

0
6
Сообщение
...
Прикрепленные файлы
(файлы не залиты)