Вверх ↑
Этот топик читают: Гость
Ответов: 2377
Рейтинг: 685
#1: 2025-01-15 11:34:29 ЛС | профиль | цитата
Элемент MST_DragRow предназначен для перетаскивания выбранной строки курсором (зажатой левой клавишей мыши) в таблице строк MTStrTbl (вкладка Интерфейс 2, туда же и устанавливается по умолчанию). Работает как и все остальные элементы этой группы как менеджер и не требует каких либо настроек, достаточно подключить к таблице (свойство MSTControl). Точки в элементе все спрятаны, так как в большинстве случаев в них нет надобности. Но при желании можно и запретить перетаскивание определенных строк и отменить его в любой момент, а так же изменить вид перетаскиваемой строки.

Из известных проблем на данный момент:
-лучше не подключать сразу два элемента к одной таблице
-при включенном у таблицы множественном выборе (свойство MultiSelect = True) случается вместо начала перетаскивания строки уход в правый нижний край таблицы с выделением всего

Вид перетаскиваемой строки по умолчанию


Измененный вид перетаскиваемой строки



Скачать архив с элементом и примерами: Ссылка [29.04.2025 v1.1]
В архиве также pas файл для работы с компилятором FPC 3.2.2. Тема по компилятору: https://forum.hiasm.com/topic/61538

Элемент в тестовом режиме и на данный момент выложен для ознакомления.

Редактировалось 14 раз(а), последний 2025-04-29 10:32:44
карма: 11

2
Голосовали:strannik_nebes, Gitarist
Ответов: 187
Рейтинг: 4
#2: 2025-01-23 10:39:55 ЛС | профиль | цитата
Каких-то сбоев не выявлено, кроме указанных выше проблем.
карма: 1

0
Ответов: 264
Рейтинг: 18
#3: 2025-01-27 09:29:50 ЛС | профиль | цитата
С установленным AdjustControls не дружит

>
карма: 3

0
Ответов: 2377
Рейтинг: 685
#4: 2025-01-27 15:02:19 ЛС | профиль | цитата
fox-video, проблема в устаревшем файле таблицы MTStrTbl. getwinstyle - добавлено в таблицу относительно не так давно и им пользуется и MST_DragRow. Так что это не ошибка элемента MST_DragRow, а проблема в том что нет пока возможности обновлять файлы и автоматически вносить изменения в них чтоб работал AdjustControls. Стараюсь сделать необходимое чтоб это исправить, описано в этой теме: Изменение свойств интерфейса
карма: 11

0
Ответов: 187
Рейтинг: 4
#5: 2025-03-25 09:13:43 ЛС | профиль | цитата
sla8a, С новым компилятором FPC x64 не хочет работать.


Compiling D:\Soft\HiAsm 4 AltBuild FPC\Elements\delphi\code\hiMST_DragRow.pas
hiMST_DragRow.pas(207,10) Error: Illegal type conversion: "Int64" to "TMouseDownPt"
hiMST_DragRow.pas(242,58) Error: Call by var for arg no. 3 has to match exactly: Got "LongInt" expected "Int64"
hiMST_DragRow.pas(268,25) Error: Incompatible types: got "THIMST_DragRow._OnMessage(var MSG;var LongInt):Boolean;" expected "<procedure variable type of function(var MSG;var Int64):Boolean of object;Register>"
hiMST_DragRow.pas(330,4) Fatal: There were 3 errors compiling module, stopping
карма: 1

0
Ответов: 2377
Рейтинг: 685
#6: 2025-03-25 14:20:21 ЛС | профиль | цитата
strannik_nebes, прикрепил отдельно архив с файлом pas.
карма: 11

1
Голосовали:strannik_nebes
Ответов: 187
Рейтинг: 4
#7: 2025-04-14 08:23:08 ЛС | профиль | цитата
fix

Редактировалось 6 раз(а), последний 2025-04-14 08:47:48
карма: 1

0
Ответов: 156
Рейтинг: 1
#8: 2025-04-29 01:11:28 ЛС | профиль | цитата
Подскажите, почему, если сделать таблицу маленькой, с одним столбцом, то эффект "перетаскивания" действует только на последнюю и предпоследнюю строку?
Add(MainForm,12917916,49,91)
{
Width=169
Height=572
Caption="Test MST_DragRow"
Position=1
link(onCreate,10146517:doEnum,[])
}
Add(MTStrTbl,16035729,560,91)
{
Top=25
Width=144
Height=507
Font=[MS Sans Serif,12,0,0,1]
Name="Table_Column"
Layout="ver"
HeightScale=100
Columns=#10:Страна=100|0:|
FlatScroll=1
Redaction=0
HeaderDragDrop=0
Grid=0
DrawManager="testDraw"
Point(doVisible)
Point(doHeight)
Point(doCursor)
AddHint(-34,-32,83,13,Name)
}
Add(StrList,8154399,210,56)
{
Strings=#5:11111|5:88888|4:5555|8:78787878|5:88777|0:|
}
Add(ArrayEnum,10146517,224,105)
{
link(onItem,1274236:doRowAction,[])
link(Array,8154399:Array,[])
}
Add(MT_String,2002120,266,42)
{
}
Add(MST_RowAction,1274236,322,105)
{
MSTControl="Table_Column"
}
Add(MST_DragRow,8886965,84,406)
{
MSTControl="Table_Column"
Point(doRefresh)
Point(Bitmap)
Point(onStart)
Point(Handle)
Point(onEnd)
Point(Width)
Point(Height)
Point(onDrag)
link(onStart,2264624:doEvent1,[(124,412)(124,398)])
link(onEnd,4615193:doData,[(158,419)(158,293)])
}
Add(Img_Bmp,6251646,266,406)
{
link(onDraw,6864811:doOperation,[])
link(Bitmap,10190071:Var2,[])
}
Add(GetDataEx,9138734,224,382)
{
Angle=3
link(Data,8886965:Bitmap,[(216,387)(216,495)(90,495)])
}
Add(Hub,2264624,133,392)
{
link(onEvent1,10909638:doData,[(151,398)(151,237)])
link(onEvent2,2451278:doEvent,[])
}
Add(DoData,10909638,175,231)
{
Data=Integer(114)
link(onEventData,6108667:doWork2,[])
AddHint(-5,-20,33,13,Data)
}
Add(DoData,4615193,175,287)
{
Data=Integer(0)
link(onEventData,6108667:doWork3,[(221,293)])
AddHint(-2,-21,21,13,Data)
}
Add(HubEx,6108667,217,231)
{
link(onEvent,14652889:In,[])
}
Add(LineBreak,8062212,504,112)
{
Caption="cursor"
link(Out,16035729:doCursor,[])
Primary=[14652889,-273,119]
}
Add(RGN_SetToWindow,2060913,476,406)
{
link(onSetRegion,8886965:doRefresh,[(539,412)(539,533)(72,533)(72,412)])
link(Handle,8886965:Handle,[(482,389)(519,389)(519,486)(97,486)])
link(Region,14278502:Result,[(489,394)(513,394)(513,454)(398,454)])
}
Add(RGN_Script,14278502,392,406)
{
link(onCreateRgn,11834520:doDraw,[])
}
Add(LineBreakEx,14119014,98,469)
{
Caption="w"
Type=3
link(_Data,8886965:Width,[])
}
Add(LineBreakEx,740249,105,455)
{
Caption="h"
Type=3
link(_Data,8886965:Height,[])
}
Add(LineBreakEx,7434874,357,364)
{
Caption="w"
Type=2
}
Add(LineBreakEx,7085907,308,371)
{
Caption="h"
Type=2
}
Add(FormatStr,12641235,350,406)
{
DataCount=3
Mask="poly(0,%1,%1,0,%2,0,%2,%3,%1,%3)"
Point(FString)
link(onFString,14278502:doCreateRgn,[])
link(Str1,15136326:getVar,[])
link(Str2,7434874:getVar,[])
link(Str3,7877727:getVar,[])
}
Add(Math,6864811,308,406)
{
OpType=3
Op2=2
ResultType=0
link(onResult,12641235:doString,[])
link(Op1,7085907:getVar,[])
}
Add(LineBreakEx,7877727,364,378)
{
Caption="h"
Type=2
}
Add(Sharpened,4073863,224,406)
{
link(onResult,6251646:doDraw,[])
link(Bitmap,9138734:Var2,[])
}
Add(GetDataEx,10190071,266,382)
{
Angle=3
link(Data,9138734:Var3,[])
}
Add(LineBreakEx,13499235,308,455)
{
Caption="h2"
Type=3
link(_Data,6864811:Result,[])
}
Add(LineBreakEx,15136326,350,350)
{
Caption="h2"
Type=2
}
Add(RGN_Draw,11834520,434,406)
{
Style=0
LineColor=128
link(onDraw,2060913:doSetRegion,[])
link(Bitmap,10190071:Var3,[(440,387)])
}
Add(CheckBox,15192017,175,329)
{
Width=759
Height=25
Font=[MS Sans Serif,12,0,0,1]
Layout="ver"
Checked=0
Caption="Свой дизайн перетаскиваемой строки"
}
Add(IndexToChanel,2451278,175,399)
{
Point(Index)
link(onEvent2,4073863:doSharpened,[])
link(Index,15192017:Checked,[])
}


Редактировалось 1 раз(а), последний 2025-04-29 01:33:25
карма: 1

1
Голосовали:sla8a
Ответов: 2377
Рейтинг: 685
#9: 2025-04-29 10:36:24 ЛС | профиль | цитата
Gitarist, если правильно понял то ошибка была в том что перетаскивать получалось только вниз. Была проблема в определении позиции курсора над строкой из-за того что столбец был один. Поправил, архив в первом посте обновил. Достаточно обновить pas файл.
карма: 11

1
Голосовали:Gitarist
9
Сообщение
...
Прикрепленные файлы
(файлы не залиты)