Вверх ↑
Этот топик читают: Гость
Ответов: 2443
Рейтинг: 693
#256: 2025-07-01 15:20:45 ЛС | профиль | цитата
nesco, поправил файлы MST_DragRowManager используя твой последний hiMTStrTbl.pas. Будет время и желания посмотри архив (в первом посте с пометкой МЕНЕДЖЕР) в этой теме: MST_DragRow Перетаскивание строки таблицы
карма: 11

0
Разработчик
Ответов: 26313
Рейтинг: 2146
#257: 2025-07-03 15:50:50 ЛС | профиль | цитата
Да, обязательно посмотрю, как будет время
карма: 22

0
Разработчик
Ответов: 26313
Рейтинг: 2146
#258: 2025-07-18 16:05:11 ЛС | профиль | цитата
Посмотрел пока что код. И нашел то, что некорректно перемещается кортеж. Точнее, он вообще не перемещается. Основу перемещения надо было брать из методов UpRow и DownRow элемента MST_RowAction
Вот эта схема работает правильно, хотя и не имеет графического отображения перемещаемой строки и сделана на рассыпухе
Схема

Add(MainForm,2953706,294,385)
{
Width=570
Height=495
Caption="alcColorTable"
Position=1
Point(onKeyDown)
link(onKeyDown,12497842:doCase,[])
}
Add(ArrayEnum,10867382,133,168)
{
link(onItem,8476894:doSplit,[])
link(Array,2073113:Array,[])
}
Add(MultiStrData,8476894,182,168)
{
Char="="
link(onPart1,10492467:doTrim,[(235,174)(235,69)])
link(onPart2,10430147:doTrim,[])
}
Add(Trim,10430147,238,175)
{
Char=";"
link(onTrim,9961426:doCopy,[])
}
Add(Copy,9961426,287,175)
{
Position=5
Count=6
link(onCopy,51021:doEvent1,[])
}
Add(Copy,6565334,413,105)
{
Count=2
link(onCopy,4983611:doValue,[])
}
Add(Hub,51021,343,175)
{
OutCount=3
link(onEvent1,6565334:doCopy,[(385,181)(385,111)])
link(onEvent2,13490066:doCopy,[(395,188)(395,153)])
link(onEvent3,14896559:doCopy,[])
}
Add(Copy,13490066,413,147)
{
Position=3
Count=2
link(onCopy,10482346:doValue,[])
}
Add(Copy,14896559,413,189)
{
Position=5
Count=2
link(onCopy,13132822:doString,[])
}
Add(FormatStr,13132822,476,189)
{
DataCount=3
Mask="%1%2%3"
Point(FString)
link(onFString,7780749:doConvert,[])
link(Str2,10482346:Value,[])
link(Str3,4983611:Value,[])
}
Add(Memory,4983611,490,105)
{
}
Add(Memory,10482346,483,147)
{
}
Add(Trim,10492467,413,63)
{
Char=" "
link(onTrim,13639368:doReplace,[])
}
Add(Memory,11135864,686,63)
{
}
Add(Convertor,7780749,525,189)
{
Mode=5
link(onResult,14621313:doEvent1,[])
}
Add(FormatStr,4371953,686,196)
{
DataCount=8
Mask="%8=%1=%2=%7=%5=%4=%3=%6"
link(onFString,14363550:doMTString,[])
link(Str1,11135864:Value,[])
link(Str3,4420109:R,[])
link(Str4,4420109:G,[])
link(Str5,4420109:B,[])
link(Str6,560770:EndIdxIcons,[(727,175)(845,175)(845,261)(909,261)])
link(Str7,13132822:FString,[(734,184)(608,184)(608,233)(482,233)])
link(Str8,7216616:GetData,[])
}
Add(Convertor,6558578,644,196)
{
Digits=8
SymbolFill="0"
link(onResult,4371953:doString,[])
}
Add(Replace,13639368,490,63)
{
SubStr="acl"
link(onReplace,11135864:doValue,[])
}
Add(Hub,14621313,567,189)
{
link(onEvent1,4982551:doEvent1,[(603,195)(603,125)])
link(onEvent2,6558578:doConvert,[])
}
Add(ToRGB,4420109,700,140)
{
}
Add(EventFromData,7216616,735,35)
{
link(onEvent,1578733:doOperation,[])
}
Add(Math,1578733,784,35)
{
Op2=1
ResultType=0
link(onResult,7216616:doData,[(828,41)(828,29)(723,29)(723,41)])
link(Op1,10867382:Index,[(790,23)(461,23)(461,212)(146,212)])
}
Add(StrList,2073113,119,91)
{
FileName="ColorConstant.txt"
Strings=#38: aclAliceBlue = $FFF0F8FF;|38: aclAntiqueWhite = $FFFAEBD7;|38: aclAqua = $FF00FFFF;|38: aclAquamarine = $FF7FFFD4;|38: aclAzure = $FFF0FFFF;|38: aclBeige = $FFF5F5DC;|38: aclBisque = $FFFFE4C4;|38: aclBlack = $FF000000;|38: aclBlanchedAlmond = $FFFFEBCD;|38: aclBlue = $FF0000FF;|38: aclBlueViolet = $FF8A2BE2;|38: aclBrown = $FFA52A2A;|38: aclBurlyWood = $FFDEB887;|38: aclCadetBlue = $FF5F9EA0;|38: aclChartreuse = $FF7FFF00;|38: aclChocolate = $FFD2691E;|38: aclCoral = $FFFF7F50;|38: aclCornflowerBlue = $FF6495ED;|38: aclCornsilk = $FFFFF8DC;|38: aclCrimson = $FFDC143C;|38: aclCyan = $FF00FFFF;|38: aclDarkBlue = $FF00008B;|38: aclDarkCyan = $FF008B8B;|38: aclDarkGoldenrod = $FFB8860B;|38: aclDarkGray = $FFA9A9A9;|38: aclDarkGreen = $FF006400;|38: aclDarkKhaki = $FFBDB76B;|38: aclDarkMagenta = $FF8B008B;|38: aclDarkOliveGreen = $FF556B2F;|38: aclDarkOrange = $FFFF8C00;|38: aclDarkOrchid = $FF9932CC;|38: aclDarkRed = $FF8B0000;|38: aclDarkSalmon = $FFE9967A;|38: aclDarkSeaGreen = $FF8FBC8B;|38: aclDarkSlateBlue = $FF483D8B;|38: aclDarkSlateGray = $FF2F4F4F;|38: aclDarkTurquoise = $FF00CED1;|38: aclDarkViolet = $FF9400D3;|38: aclDeepPink = $FFFF1493;|38: aclDeepSkyBlue = $FF00BFFF;|38: aclDimGray = $FF696969;|38: aclDodgerBlue = $FF1E90FF;|38: aclFirebrick = $FFB22222;|38: aclFloralWhite = $FFFFFAF0;|38: aclForestGreen = $FF228B22;|38: aclFuchsia = $FFFF00FF;|38: aclGainsboro = $FFDCDCDC;|38: aclGhostWhite = $FFF8F8FF;|38: aclGold = $FFFFD700;|38: aclGoldenrod = $FFDAA520;|38: aclGray = $FF808080;|38: aclGreen = $FF008000;|38: aclGreenYellow = $FFADFF2F;|38: aclHoneydew = $FFF0FFF0;|38: aclHotPink = $FFFF69B4;|38: aclIndianRed = $FFCD5C5C;|38: aclIndigo = $FF4B0082;|38: aclIvory = $FFFFFFF0;|38: aclKhaki = $FFF0E68C;|38: aclLavender = $FFE6E6FA;|38: aclLavenderBlush = $FFFFF0F5;|38: aclLawnGreen = $FF7CFC00;|38: aclLemonChiffon = $FFFFFACD;|38: aclLightBlue = $FFADD8E6;|38: aclLightCoral = $FFF08080;|38: aclLightCyan = $FFE0FFFF;|38: aclLightGoldenrodYellow = $FFFAFAD2;|38: aclLightGray = $FFD3D3D3;|38: aclLightGreen = $FF90EE90;|38: aclLightPink = $FFFFC0CB;|38: aclLightSalmon = $FFFFA07A;|38: aclLightSeaGreen = $FF20B2AA;|38: aclLightSkyBlue = $FF87CEFA;|38: aclLightSlateGray = $FF778899;|38: aclLightSteelBlue = $FFB0C4DE;|38: aclLightYellow = $FFFFFFE0;|38: aclLime = $FF00FF00;|38: aclLimeGreen = $FF32CD32;|38: aclLinen = $FFFAF0E6;|38: aclMagenta = $FFFF00FF;|38: aclMaroon = $FF800000;|38: aclMediumAquamarine = $FF66CDAA;|38: aclMediumBlue = $FF0000CD;|38: aclMediumOrchid = $FFBA55D3;|38: aclMediumPurple = $FF9370DB;|38: aclMediumSeaGreen = $FF3CB371;|38: aclMediumSlateBlue = $FF7B68EE;|38: aclMediumSpringGreen = $FF00FA9A;|38: aclMediumTurquoise = $FF48D1CC;|38: aclMediumVioletRed = $FFC71585;|38: aclMidnightBlue = $FF191970;|38: aclMintCream = $FFF5FFFA;|38: aclMistyRose = $FFFFE4E1;|38: aclMoccasin = $FFFFE4B5;|38: aclMoneyGreen = $FFC0DCC0;|38: aclNavajoWhite = $FFFFDEAD;|38: aclNavy = $FF000080;|38: aclOldLace = $FFFDF5E6;|38: aclOlive = $FF808000;|38: aclOliveDrab = $FF6B8E23;|38: aclOrange = $FFFFA500;|38: aclOrangeRed = $FFFF4500;|38: aclOrchid = $FFDA70D6;|38: aclPaleGoldenrod = $FFEEE8AA;|38: aclPaleGreen = $FF98FB98;|38: aclPaleTurquoise = $FFAFEEEE;|38: aclPaleVioletRed = $FFDB7093;|38: aclPapayaWhip = $FFFFEFD5;|38: aclPeachPuff = $FFFFDAB9;|38: aclPeru = $FFCD853F;|38: aclPink = $FFFFB6C1;|38: aclPlum = $FFDDA0DD;|38: aclPowderBlue = $FFB0E0E6;|38: aclPurple = $FF800080;|38: aclRed = $FFFF0000;|38: aclRosyBrown = $FFBC8F8F;|38: aclRoyalBlue = $FF4169E1;|38: aclSaddleBrown = $FF8B4513;|38: aclSalmon = $FFFA8072;|38: aclSandyBrown = $FFF4A460;|38: aclSeaGreen = $FF2E8B57;|38: aclSeaShell = $FFFFF5EE;|38: aclSienna = $FFA0522D;|38: aclSilver = $FFC0C0C0;|38: aclSkyBlue = $FFA6CAF0;|38: aclSlateBlue = $FF6A5ACD;|38: aclSlateGray = $FF708090;|38: aclSnow = $FFFFFAFA;|38: aclSpringGreen = $FF00FF7F;|38: aclSteelBlue = $FF4682B4;|38: aclTan = $FFD2B48C;|38: aclTeal = $FF008080;|38: aclThistle = $FFD8BFD8;|38: aclTomato = $FFFF6347;|38: aclTransparent = $00FFFFFF;|38: aclTurquoise = $FF40E0D0;|38: aclViolet = $FFEE82EE;|38: aclWheat = $FFF5DEB3;|38: aclWhite = $FFFFFFFF;|38: aclWhiteSmoke = $FFF5F5F5;|38: aclYellow = $FFFFFF00;|38: aclYellowGreen = $FF9ACD32;|
Point(doLoad)
}
Add(MTStrTbl,3412059,182,434)
{
Left=5
Top=5
Width=545
Height=423
Font=[Courier New,8,1,0,204]
Name="tabl"
Columns=#5:ID=60|8:Name=125|8:Color=80|6:HEX=80|7:Blue=60|8:Green=60|6:Red=60|
FlatScroll=1
ColumnClick=1
SmallIconsManager="icons"
DrawManager="draw"
Point(onMouseMove)
Point(ItemAtPos)
Point(onMouseUp)
link(onClick,8857963:doSeparateMT,[(254,440)(254,293)])
link(onColumnClick,437380:doCase,[])
link(onMouseMove,10233410:doEvent,[(232,468)(232,496)(121,496)(121,524)])
}
Add(MST_RowAction,7296923,805,182)
{
MSTControl="tabl"
}
Add(MT_String,14363550,756,182)
{
Delimeter="="
link(onResult,7296923:doRowAction,[])
}
Add(IconsManager,560770,889,189)
{
Name="icons"
ImgSize=20
Icons=[]
Point(EndIdxIcons)
}
Add(Hub,4982551,644,119)
{
OutCount=4
link(onEvent1,14329012:doCreate,[(862,125)(862,62)])
link(onEvent2,4682190:doData,[(862,132)(862,153)])
link(onEvent3,15126526:doAdd,[(852,139)(852,279)])
link(onEvent4,4420109:doGetRGB,[])
}
Add(Bitmap,14329012,889,42)
{
HWidth=20
HHeight=20
Point(doCreate)
Point(onCreate)
link(onCreate,1719533:doDraw,[(957,48)(957,111)])
}
Add(Icon,14341706,938,133)
{
Transparent=65793
Point(doLoadFromBitmap)
}
Add(DoData,4682190,889,147)
{
link(onEventData,14341706:doLoadFromBitmap,[])
link(Data,6420969:Var2,[])
}
Add(ArrayRW,15126526,924,259)
{
link(Array,560770:IconArray,[(930,240)(895,240)])
link(Value,14341706:Icon,[])
}
Add(Img_Rectangle,1719533,994,105)
{
Point(Point1)
Point(Point2)
link(Bitmap,6420969:Var3,[(1000,96)])
link(Point1,6621306:Point,[(1014,89)(972,89)])
link(Point2,15381893:Point,[])
}
Add(GetDataEx,6420969,889,91)
{
link(Data,14329012:Bitmap,[])
}
Add(PointXY,6621306,966,42)
{
}
Add(PointXY,15381893,1015,42)
{
X=20
Y=20
}
Add(MST_SortInCol,2218945,294,434)
{
MSTControl="tabl"
Point(doSortDigit)
}
Add(MST_RowAction,13969240,812,420)
{
Action=8
MSTControl="tabl"
Point(Index)
link(Index,11682378:Var3,[(818,348)])
}
Add(MST_SelectRow,8210463,791,294)
{
MSTControl="tabl"
Point(doSetFocus)
}
Add(MST_RowAction,762390,798,462)
{
Action=9
MSTControl="tabl"
Point(Index)
link(Index,11682378:Var2,[])
}
Add(GetDataEx,11682378,798,343)
{
link(Data,8210463:Index,[])
}
Add(Memory,15001377,525,364)
{
Point(Data)
link(Data,11682378:Var1,[(531,348)])
}
Add(Hub,1298409,476,413)
{
InCount=2
OutCount=3
link(onEvent1,14956125:doWork2,[])
link(onEvent2,13969240:doRowAction,[])
link(onEvent3,9399632:doOperation,[])
}
Add(Hub,3026422,476,455)
{
InCount=2
OutCount=3
link(onEvent1,14956125:doWork3,[(501,461)])
link(onEvent2,762390:doRowAction,[])
link(onEvent3,9833844:doOperation,[])
}
Add(HubEx,14956125,497,413)
{
Angle=3
link(onEvent,15001377:doValue,[(501,370)])
}
Add(GetDataEx,2417978,525,406)
{
link(Data,15001377:Value,[])
}
Add(HubEx,11808865,637,427)
{
Angle=3
link(onEvent,15171303:doEvent1,[(641,300)])
}
Add(Math,9399632,525,427)
{
OpType=1
Op2=1
ResultType=0
link(onResult,15691649:doCompare,[])
link(Op1,2417978:Var2,[])
}
Add(Math,9833844,539,469)
{
Op2=1
ResultType=0
link(onResult,1219956:doCompare,[])
link(Op1,2417978:Var3,[(545,411)])
}
Add(Hub,15171303,749,294)
{
InCount=2
link(onEvent1,8210463:doSelect,[])
link(onEvent2,8210463:doSetFocus,[])
}
Add(MST_DrawManager,5730419,133,434)
{
Name="draw"
IconSize=18
SingleString=0
ColorRowSel=0
LightTxtColor=255
}
Add(Case,12497842,350,406)
{
Value=Integer(109)
link(onNextCase,11789265:doCase,[(394,412)(394,433)(338,433)(338,454)])
link(onTrue,1298409:doEvent1,[])
}
Add(Case,11789265,350,448)
{
Value=Integer(107)
link(onTrue,3026422:doEvent1,[])
}
Add(Button,16586322,28,168)
{
Left=5
Top=435
Width=115
TabOrder=-1
Caption="LoadColorText"
link(onClick,10867382:doEnum,[])
}
Add(Button,2946555,28,238)
{
Left=220
Top=435
Width=95
TabOrder=-1
Caption="LoadTable"
}
Add(Button,6212881,28,273)
{
Left=320
Top=435
Width=95
TabOrder=-1
Caption="SaveTable"
}
Add(If_else,15691649,581,427)
{
Type=4
Op2=Integer(0)
link(onTrue,11808865:doWork2,[])
link(onFalse,12444947:doOperation,[])
}
Add(Math,12444947,658,434)
{
Op2=1
ResultType=0
link(onResult,8010240:doWork2,[])
}
Add(If_else,1219956,595,469)
{
Type=3
link(onTrue,11808865:doWork3,[(641,475)])
link(onFalse,8466480:doOperation,[])
link(Op2,8210463:EndIdx,[(608,341)(818,341)])
}
Add(Math,8466480,658,476)
{
OpType=1
Op2=1
ResultType=0
link(onResult,8010240:doWork3,[(720,482)])
}
Add(HubEx,8010240,716,434)
{
Angle=3
link(onEvent,15171303:doEvent2,[(720,307)])
}
Add(Math,13226602,182,518)
{
OpType=1
Op2=1
ResultType=0
link(onResult,5527295:doCase,[])
link(Op1,3412059:ItemAtPos,[(188,503)(216,503)])
link(Op2,3412059:Index,[])
}
Add(IndexToChanel,10233410,133,518)
{
link(onEvent1,13226602:doOperation,[])
}
Add(If_else,3984063,294,518)
{
Type=1
Op2=Integer(0)
link(onTrue,15307666:doOperation,[(338,524)(338,496)])
link(onFalse,3026422:doEvent2,[(441,531)(441,468)])
}
Add(Case,5527295,245,518)
{
Value=Integer(0)
link(onNextCase,3984063:doCompare,[])
}
Add(Math,15307666,350,490)
{
OpType=33
ResultType=0
link(onResult,1298409:doEvent2,[(429,496)(429,426)])
}
Add(Case,437380,245,441)
{
Value=Integer(3)
link(onNextCase,2218945:doSortDigit,[])
}
Add(Edit,12538303,350,287)
{
Left=455
Top=435
Width=95
Font=[Tahoma,8,1,0,204]
Cursor=1
Text=""
Alignment=2
}
Add(MT_MultiData,8857963,294,287)
{
From=2
Count=1
Point(Data)
link(onData1,12538303:doText,[])
link(Data,3412059:Select,[(300,274)(169,274)(169,491)(188,491)])
}

КМК, за основу кода надо взять схему на рассыпухе и портировать ее в элемент.

--- Добавлено в 2025-07-18 16:10:06

Как будет немного свободного времени, я попробую заняться этим вопросом.

Редактировалось 3 раз(а), последний 2025-07-18 16:10:06
карма: 22

0
Разработчик
Ответов: 26313
Рейтинг: 2146
#259: 2025-07-18 22:28:31 ЛС | профиль | цитата
И точно надо таскать PaintBox по экрану или достаточно обычного перемещения селектора по направленью мыши, как в примере?
Хотя, признаюсь, я нашел, как ты копируешь данные хвоста и передаешь их в таблицу.
Но че-то как-то все очень сложно, да и нужно ли? Полупрозрачность ты все равно не сможешь сделать на контроле, только на форме

Редактировалось 2 раз(а), последний 2025-07-18 22:51:02
карма: 22

0
Разработчик
Ответов: 26313
Рейтинг: 2146
#260: 2025-07-19 00:29:23 ЛС | профиль | цитата
Кстати, о птичках, про твой компонент.
Ты удаляешь строку
procedure THIMST_DragRowManager.RowData;
begin
dragData := Value;
sControl.LVDelete(oldIndex);
end;
А хвост кто удалять будет?
Где вот такое у тебя перед удалением строки?
  if Assigned(PData(sControl.LVItemData[oldindex])) then
begin
FreeData(PData(sControl.LVItemData[oldindex]));
Dispose(PData(sControl.LVItemData[oldindex]));
end;

Редактировалось 2 раз(а), последний 2025-07-19 00:30:43
карма: 22

0
Ответов: 2443
Рейтинг: 693
#261: 2025-07-21 09:30:08 ЛС | профиль | цитата
nesco писал(а):
И точно надо таскать PaintBox по экрану или достаточно обычного перемещения селектора по направленью мыши, как в примере?
Из плюсов использования PaintBox-а:
-можно нарисовать что-то (рамку, фон и т.п.)
-плавное перемещение
-можно применить регионы (обрезать).
nesco писал(а):
КМК, за основу кода надо взять схему на рассыпухе и портировать ее в элемент.
Тоже не плохой вариант. Если решишь добавить такой способ перетаскивания строки, то я оставлю элемент как и был и будет возможность простого перетаскивания или если кому будет нужны рюшечки воспользуется MST_DragRow.
nesco писал(а):
Схема
Обрати внимание на следующее: если взять предпоследнюю строку и начать перетаскивать вниз, то можно получить отскок вверх на пару строк. Происходит при заходе на горизонтальный полосу прокрутки таблицы.
И еще хорошо бы чтоб было MouseCapture при перетаскивании строки, а то при выходе курсора за границы таблицы, перестает OnMouseMove работать.

Редактировалось 1 раз(а), последний 2025-07-21 19:20:03
карма: 11

0
Разработчик
Ответов: 26313
Рейтинг: 2146
#262: 2025-07-22 00:52:57 ЛС | профиль | цитата
Я продолжаю исследования. Пока что получилось сделать по твоим мотивам плавное перетаскивание, и, кстати, я добился перетаскивания контрола без захвата мыши, просто перемещением курсора с нажатой кнопкой.
Там проводится исследование сабклассинга и прочей чешуи. Я хочу получить перетаскивание аля HandleDragDrop
Единственное, что пока не работает, так это совместная работа с MST_DrawManager.
Метод по моей схеме получился всего на пару строк кода, но с портированием методов UP и Down в саму таблицу универсальным методом.
Но это не интересно

Редактировалось 4 раз(а), последний 2025-07-22 00:56:34
карма: 22

0
Ответов: 2443
Рейтинг: 693
#263: 2025-07-22 11:28:18 ЛС | профиль | цитата
nesco писал(а):
Единственное, что пока не работает, так это совместная работа с MST_DrawManager
Не заморачивайся ты с этим, это же пока только тестовое решение. Делай по своему, а потом посмотрим нужен ли будет вообще MST_DrawManager
карма: 11

0
Разработчик
Ответов: 26313
Рейтинг: 2146
#264: 2025-07-24 17:46:19 ЛС | профиль | цитата
Пока вот, что получается. Но кода там получилось, шо писец... Явно, не две строчки. Особенно эффект псевдопрозрачности



--- Добавлено в 2025-07-24 17:59:11

А с MST_DrawManager, оказывается, работает, но только не в режиме DoubleBuffering-a

Редактировалось 7 раз(а), последний 2025-07-24 17:59:42
карма: 22

0
Ответов: 2443
Рейтинг: 693
#265: 2025-07-31 09:32:14 ЛС | профиль | цитата
Подразнил гифкой и тишина
карма: 11

0
Разработчик
Ответов: 26313
Рейтинг: 2146
#266: 2025-07-31 14:09:32 ЛС | профиль | цитата
sla8a писал(а):
Подразнил гифкой и тишина

Проходится долгий путь тестирования и оптимизации
Блин, никак не могу побороть небольшие артефакты отрисовки. И очень даже возможно, что текущие возможности не дадут этого сделать. Тч, в скором времени выложу.

Редактировалось 1 раз(а), последний 2025-07-31 14:10:37
карма: 22

0
Разработчик
Ответов: 26313
Рейтинг: 2146
#267: 2025-08-03 13:50:22 ЛС | профиль | цитата
Ладно, пока вот так -- https://forum.hiasm.com/getfile/40598

Пример, на всякий случай
Схема

Add(MainForm,2953706,42,140)
{
Width=580
Height=500
Caption="ColorTable"
Position=1
Point(onKeyDown)
}
Add(ArrayEnum,10867382,224,245)
{
link(onItem,8476894:doSplit,[])
link(Array,2073113:Array,[])
}
Add(Hub,16456196,119,231)
{
InCount=2
OutCount=3
link(onEvent1,235600:doClear,[(144,237)(144,202)])
link(onEvent2,10867382:doEnum,[(214,244)(214,251)])
}
Add(MultiStrData,8476894,273,245)
{
Char="="
link(onPart1,10492467:doTrim,[(326,251)(326,146)])
link(onPart2,10430147:doTrim,[])
}
Add(Trim,10430147,329,252)
{
Char=";"
link(onTrim,9961426:doCopy,[])
}
Add(Copy,9961426,378,252)
{
Position=5
Count=6
link(onCopy,51021:doEvent1,[])
}
Add(Copy,6565334,504,182)
{
Count=2
link(onCopy,4983611:doValue,[])
}
Add(Hub,51021,434,252)
{
OutCount=3
link(onEvent1,6565334:doCopy,[(476,258)(476,188)])
link(onEvent2,13490066:doCopy,[(486,265)(486,230)])
link(onEvent3,14896559:doCopy,[])
}
Add(Copy,13490066,504,224)
{
Position=3
Count=2
link(onCopy,10482346:doValue,[])
}
Add(Copy,14896559,504,266)
{
Position=5
Count=2
link(onCopy,13132822:doString,[])
}
Add(FormatStr,13132822,567,266)
{
DataCount=3
Mask="%1%2%3"
Point(FString)
link(onFString,7780749:doConvert,[])
link(Str2,10482346:Value,[])
link(Str3,4983611:Value,[])
}
Add(Memory,4983611,581,182)
{
}
Add(Memory,10482346,574,224)
{
}
Add(Trim,10492467,504,140)
{
Char=" "
link(onTrim,13639368:doReplace,[])
}
Add(Memory,11135864,777,140)
{
}
Add(Convertor,7780749,616,266)
{
Mode=5
link(onResult,14621313:doEvent1,[])
}
Add(FormatStr,4371953,777,273)
{
DataCount=8
Mask="%8=%1=%2=%7=%5=%4=%3=%6"
link(onFString,14363550:doMTString,[])
link(Str1,11135864:Value,[])
link(Str3,4420109:R,[])
link(Str4,4420109:G,[])
link(Str5,4420109:B,[])
link(Str6,560770:EndIdxIcons,[(818,252)(936,252)(936,338)(1000,338)])
link(Str7,13132822:FString,[(825,261)(699,261)(699,310)(573,310)])
link(Str8,7216616:GetData,[])
}
Add(Convertor,6558578,735,273)
{
Digits=8
SymbolFill="0"
link(onResult,4371953:doString,[])
}
Add(Replace,13639368,581,140)
{
SubStr="acl"
link(onReplace,11135864:doValue,[])
}
Add(Hub,14621313,658,266)
{
link(onEvent1,4982551:doEvent1,[(694,272)(694,202)])
link(onEvent2,6558578:doConvert,[])
}
Add(ToRGB,4420109,791,217)
{
}
Add(EventFromData,7216616,826,112)
{
link(onEvent,1578733:doOperation,[])
}
Add(Math,1578733,875,112)
{
Op2=1
ResultType=0
link(onResult,7216616:doData,[(919,118)(919,106)(814,106)(814,118)])
link(Op1,10867382:Index,[(881,96)(265,96)(265,285)(237,285)])
}
Add(StrList,2073113,210,168)
{
FileName="ColorConstant.txt"
Strings=#38: aclAliceBlue = $FFF0F8FF;|38: aclAntiqueWhite = $FFFAEBD7;|38: aclAqua = $FF00FFFF;|38: aclAquamarine = $FF7FFFD4;|38: aclAzure = $FFF0FFFF;|38: aclBeige = $FFF5F5DC;|38: aclBisque = $FFFFE4C4;|38: aclBlack = $FF000000;|38: aclBlanchedAlmond = $FFFFEBCD;|38: aclBlue = $FF0000FF;|38: aclBlueViolet = $FF8A2BE2;|38: aclBrown = $FFA52A2A;|38: aclBurlyWood = $FFDEB887;|38: aclCadetBlue = $FF5F9EA0;|38: aclChartreuse = $FF7FFF00;|38: aclChocolate = $FFD2691E;|
Point(doLoad)
}
Add(MTStrTbl,3412059,252,455)
{
Left=5
Top=5
Width=555
Height=423
akRight=0
akBottom=0
Font=[Courier New,8,1,0,204]
HideFocus=0
Name="tabl"
DoubleBuffered=0
Columns=#5:ID=70|8:Name=125|8:Color=80|6:HEX=80|7:Blue=60|8:Green=60|6:Red=60|
SelectTextColor=255
SelectColor=12639424
FlatScroll=1
ColumnClick=1
HeaderDragDrop=0
RowDragDrop=0
CheckBoxes=0
Grid=0
SmallIconsManager="icons"
Point(Handle)
Point(onMouseMove)
Point(onMouseUp)
link(onClick,8857963:doSeparateMT,[(319,461)(319,419)])
link(onColumnClick,437380:doCase,[])
}
Add(MST_RowAction,7296923,896,259)
{
MSTControl="tabl"
}
Add(MT_String,14363550,847,259)
{
Delimeter="="
link(onResult,7296923:doRowAction,[])
}
Add(IconsManager,560770,980,266)
{
Name="icons"
ImgSize=32
Icons=[]
Point(EndIdxIcons)
}
Add(Hub,4982551,735,196)
{
OutCount=4
link(onEvent1,14329012:doCreate,[(953,202)(953,139)])
link(onEvent2,4682190:doData,[(953,209)(953,230)])
link(onEvent3,15126526:doAdd,[(943,216)(943,356)])
link(onEvent4,4420109:doGetRGB,[])
}
Add(Bitmap,14329012,980,119)
{
HWidth=20
HHeight=20
Point(doCreate)
Point(onCreate)
link(onCreate,1719533:doDraw,[(1048,125)(1048,188)])
}
Add(Icon,14341706,1029,210)
{
Transparent=65793
Point(doLoadFromBitmap)
}
Add(DoData,4682190,980,224)
{
link(onEventData,14341706:doLoadFromBitmap,[])
link(Data,6420969:Var2,[])
}
Add(ArrayRW,15126526,1015,336)
{
link(Array,560770:IconArray,[(1021,317)(986,317)])
link(Value,14341706:Icon,[])
}
Add(Img_Rectangle,1719533,1085,182)
{
Point(Point1)
Point(Point2)
link(Bitmap,6420969:Var3,[(1091,173)])
link(Point1,6621306:Point,[(1105,166)(1063,166)])
link(Point2,15381893:Point,[])
}
Add(GetDataEx,6420969,980,168)
{
link(Data,14329012:Bitmap,[])
}
Add(PointXY,6621306,1057,119)
{
}
Add(PointXY,15381893,1106,119)
{
X=20
Y=20
}
Add(MST_SortInCol,2218945,378,455)
{
MSTControl="tabl"
Point(doSortDigit)
}
Add(MST_DrawManager,5730419,203,455)
{
Name="draw"
IconSize=18
SingleString=0
LightTxtColor=16777215
}
Add(Button,16586322,42,238)
{
Left=5
Top=435
Width=115
akTop=1
akBottom=0
TabOrder=-1
Caption="LoadColorText"
link(onClick,16456196:doEvent2,[])
}
Add(Button,2946555,42,301)
{
Left=185
Top=435
Width=95
akLeft=1
akTop=1
akRight=0
akBottom=0
TabOrder=-1
Caption="LoadTable"
}
Add(Button,6212881,42,336)
{
Left=285
Top=435
Width=95
akLeft=1
akTop=1
akRight=0
akBottom=0
TabOrder=-1
Caption="SaveTable"
}
Add(Case,437380,329,462)
{
Value=Integer(3)
link(onNextCase,2218945:doSortDigit,[])
}
Add(Edit,12538303,434,413)
{
Left=465
Top=435
Width=95
akLeft=1
akTop=1
akRight=0
akBottom=0
Font=[Tahoma,8,1,0,204]
Cursor=1
Text=""
Alignment=2
}
Add(MT_MultiData,8857963,378,413)
{
From=2
Count=1
Point(Data)
link(onData1,12538303:doText,[])
link(Data,3412059:Select,[(384,404)(244,404)(244,509)(258,509)])
}
Add(StyleXP,14618349,42,189)
{
}
Add(MST_Clear,235600,154,196)
{
MSTControl="tabl"
}


Редактировалось 2 раз(а), последний 2025-08-03 13:52:31
карма: 22

0
файлы: 1MST_RowDragDrop_001.zip [29.1KB] [60]
Ответов: 946
Рейтинг: 199
#268: 2025-08-04 08:04:59 ЛС | профиль | цитата
nesco, Мне больше понравился способ создание иконок «на лету».
Я пока не вижу никакой необходимости в перетаскивании строк мышкой.
Если таблица небольшая, то и так всё видно. По-моему, чаще нужна сортировка.
А если в таблице несколько тысяч строк – тем более.
Если уж припрёт, то всегда можно сделать, как говорят, «на рассыпухе».
карма: 19

0
Ответов: 2443
Рейтинг: 693
#269: 2025-08-04 08:41:26 ЛС | профиль | цитата
nesco, в архиве нет ini файла.
карма: 11

0
Разработчик
Ответов: 26313
Рейтинг: 2146
#270: 2025-08-04 16:21:22 ЛС | профиль | цитата
sla8a писал(а):
в архиве нет ini файла

Вобла. Забыл добавить

MTStrTbl.ini

[About]
Version=2.50
Author=nesco, sla8a & HiAsm ©
Mail=nesco_sochi@mail.ru

[Type]
Class=WinElement
Info=MT таблица строк
Tab=WinControls
Inherit=WinControlChild,WinSplitter
Interfaces=ControlManager, MSTControl

[Edit]
Class=ListBox
Color=Color
Ctl3D=Ctl3D

[Property]
Width= |1|55
Height= |1|80
Color= | |clWindow
Ctl3D= | |0|True,False
DoubleBuffered=При установленном True включается режим двойной буферизации подложки для убирания мерцания при перерисовке|14|1|True,False
+Columns=Параметры столбцов таблицы (формат строки параметров: Название <ColDelimiter> Ширина <ColDelimiter> Индекс иконки <ColDelimiter> Индекс выравнивания (0 - taLeft; 1 - taRight; 2 - taCenter))|5|
@NIdxIcon=Позиция данных с индексом иконки (столбцы с этим номером, при групповом добавлении, в таблицу не добавляются). -1 - по умолчанию, после данных строки|1|-1
@NColorRow=Позиция данных со значением цвета строки (столбцы с этим номером, при групповом добавлении, в таблицу не добавляются). -1 - по умолчанию, после данных строки|1|-1
Row=Индекс строки по умолчанию|1|0
Col=Индекс столбца по умолчанию|1|0
##Selector=Cвойства селектора строки (свойства работают только при отключенном MST_DrawManager)
SelectColorMode=Режим цвета селектора строки (Standard - стандартные цвета селектора строки, Custom - к селектору применяются пользовательские цвета, CustomTextDefault - к селектору применяются пользовательские цвета, цвет текста строки остается заданным строкой)|4|0|Standard,Custom,CustomTextDefault
@SelectTextColor=Цвет текста селектора строки при фокусе на элементе|8|clWhite
@SelectTextColorNoFocus=Цвет текста селектора строки при без фокуса на элементе|8|clBlack
@SelectColor=Цвет селектора строки при фокусе на элементе|8|clHighlight
@SelectColorNoFocus=Цвет селектора строки без фокуса на элементе|8|clBtnFace
##
##Table=Дополнительные свойства таблицы
Scroll=True - разрешить прокрутку в окне, False - запретить прокрутку в окне. Несовместимо со стилями lvsList, lvsDetail, lvsDetailNoHeader|14|0|True,False
FlatScroll=True - разрешить плоский Scrollbar, False - не разрешать|14|0|True,False
ColDelimiter=Разделитель параметров столбцов по умолчанию|2|=
ColumnWidth=Ширина колонок по умолчанию|1|80
ColumnClick=Text - возвращать имя нажатого столбца, Index - возвращать его индекс|4|0|Text,Index
ColorItems=True - включить поддержку цвета ячеек, False - не включать|14|1|True,False
ImgColumn=True - показывать иконки столбцов, False - не показывать. В списке SmallIcons не должно быть пустых иконок|14|1|True,False
VirtualTab=True - перевести таблицу в виртуальный режим, False - не переводить|14|1|True,False
Redaction=True - разрешать редактирование ячеек, False - запретить редактирование|14|1|True,False
RowSelect=Выделение всей строки при её выборе|14|0|True,False
HeaderDragDrop=True - разрешить перетаскивание выбранного столбца, False - не разрешать|14|1|True,False
RowDragDrop=True - разрешить перетаскивание выбранной строки, False - не разрешать|14|1|True,False
TextAlign=Выpaвнивaние тeкcтa в столбцах: пo лeвoмy кpaю (пo-yмoлчaнию), пo пpaвoмy кpaю и пo цeнтpy. Действительно для стилей lvsDetail и lvsDetailNoHeader|14|0|taLeft,taRight,taCenter
CheckBoxes=True - показать флажки состояния, False - скрыть флажки состояния|14|1|True,False
TextInEmptyTable=Текст, выводимый по центру окна при пустой таблице|2|
IgnoreEmptyField=Игнорировать нажатие на пустое (не занятую строками) поле таблицы, событие onEmptyClick произойдет в любом случае|14|1|True,False
Alternating=Режим чередования строк, работает если не задействован (ColorItems = False) цвет ячеек (Off - без чередования строк, Even - цвет начинается с четной, Odd - цвет начинается с нечетной)|4|0|Off,Even,Odd
@AlternatingColor=Цвет чередующейся строки|8|clInfoBk
@Style=Стиль таблицы|14|3|lvsIcon,lvsSmallIcon,lvsList,lvsDetail,lvsDetailNoHeader
@Grid=True - показать сетку, False - скрыть сетку|14|1|True,False
@InfoTip=True - разрешить отображать Hint с полным текстом пункта таблицы, если текст не помещается в границы столбца, False - не разрешать|14|0|True,False
@TrackSelect=True - разрешить слежение за курсором, False - не разрешать|14|1|True,False
@MultiSelect=True - разрешить множественный выбор, False - запретить множественный выбор|14|1|True,False
@EnableOnClick=True - включить событие onClick, False - выключить событие onClick|14|0|True,False
@ChangeWidth=True - разрешить ручное изменение ширины столбца, False - не разрешать|14|0|True,False
##
SmallIconsManager=Менеджер маленьких иконок|20|(empty)|Icons
LargIconsManager=Менеджер больших иконок|20|(empty)|Icons
StateIconsManager=Менеджер иконок состояния|20|(empty)|Icons
DrawManager=Менеджер пользовательской отрисовки|20|(empty)|DrawManager

[Methods]
doClientRect=Получает параметры клиентского прямоугольника заданной ячейки|1|0
onClick=Событие происходит всякий раз при нажатии кнопки мыши на строке таблицы и выдает индекс строки в поток|2|
onColumnClick=Событие происходит всякий раз при нажатии на заголовке столбца|2|0
onCheck=Событие происходит всякий раз при изменении состояния флажка мышью|2|0
onClientRect=Событие происходит всякий раз после получения параметров видимого клиентского прямоугольника заданной ячейки и выдает их в поток ARG(Left, Top, Width, Height)|2|0
*onSelect=Событие происходит всякий раз после выбора новой строки таблицы и выдает индекс строки в поток. Повторный выбор одной и той же строки события не вызывает|2|
*onBeforeLineChange=Событие происходит всякий раз перед редактированием строки в списке и выдает эту строку кортежем в поток|2|0
*onLineChange=Событие происходит всякий раз после редактирования строки в списке и выдает эту строку кортежем в поток|2|0
*onChangeWidth=Событие происходит всякий раз при ручном изменении ширины столбца после отпускания кнопки мыши ARG(ColIdx, ChangeWidth, PreviousWidth)|2|
*onEmptyFieldClick=Событие происходит всякий раз при нажатии на пустую (не занятую строками) область таблицы|2|0
Select=Содержит выбранную строку, где строка - это набор MT-элементов со значениями каждой колонки и кортежем данных|3|0
Index=Содержит индекс выделенной строки|3|1
Count=Содержит количество строк|3|1
CountCol=Содержит количество столбцов|3|1
*EndIdx=Содержит индекс последней строки в таблице|3|1
*EndIdxCol=Содержит индекс последнего столбца в таблице|3|1
*ItemAtPos=Содержит в MT-потоке индекс и подиндекс элемента в окне, находящегося по координатам MouseX, MouseY|3|1
*TopItem=Содержит индекс элемента, отображаемого в первой строке списка|3|1
*PerPage=Содержит количество целых элементов, вмещающихся в одну страницу|3|1
*MTStrTbl=Содержит указатель на компонент|3|0
CodePageSet=На эту точку выдается подстрока при добавлении в таблицу для декодирования в нужную кодовую страницу. После декодирования, подстрока должна вернуться на эту же точку|4|2
CodePageGet=На эту точку выдается подстрока при получении из таблицы для декодирования в нужную кодовую страницу. После декодирования, подстрока должна вернуться на эту же точку|4|2
FormatCell=На эту точку выдается в MT-потоке текст подстроки, индекс строки и индекс столбца. Возвращаемое значение должно содержать форматную строку параметров для подстроки (<TextBkColor>,<TextColor>,<FontName>,<FontSize>,<FontStyle>,<FontCharSet>). Возвращаемая пустая форматная строка параметров игнорируется и параметры строки остаются по умолчанию|4|
*Row=Индекс строки|4|1
*Col=Индекс столбца|4|1


Редактировалось 1 раз(а), последний 2025-08-04 16:21:40
карма: 22

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