Вверх ↑
Этот топик читают: Гость
Ответов: 499
Рейтинг: 1
#1: 2008-03-11 19:28:15 ЛС | профиль | цитата
собсно, возможен ли сабж?
на клавиатуре реализуется через перехват клавиш (например ctrl+up ctrl+down), и удалением-вставкой выделенной строки на позицию выше-ниже.
а вот мышом такое возможно на таблицах идущих в комплекте? в принципе отследить нажатие и удержание кнопки на мыши можно, а вот как определить, над какой строкой находится курсор?

карма: 0

0
Разработчик
Ответов: 26160
Рейтинг: 2127
#2: 2008-03-11 21:55:18 ЛС | профиль | цитата
HikeR, юзай StringTableMT, там такая возможность есть, выдает адрес ячейки (строка, столбец) по клику мыша.
карма: 22

0
Ответов: 3851
Рейтинг: 159
#3: 2008-03-11 22:13:45 ЛС | профиль | цитата
а как определить положение мыша - между какими строчками вставлять? Использование размера шрифта мне кажется сомнительным..
карма: 0
начавший
0
Ответов: 499
Рейтинг: 1
#4: 2008-03-13 16:32:00 ЛС | профиль | цитата
nesco писал(а):
выдает адрес ячейки (строка, столбец) по клику мыша.

выдает, не спорю. но я имел ввиду аналог HeaderDragDrop для строк.
карма: 0

0
Разработчик
Ответов: 26160
Рейтинг: 2127
#5: 2008-03-13 16:59:45 ЛС | профиль | цитата
Мдяяя уж... Чем дальше в лес, тем толще партизаны (с)
Ну так возми, да сделай на штатных компонентах
Мне что, в этой замученной таблице, еще и DragDrop строк с AlphaBlending'ом замутить, нет уж... увольте-с.
карма: 22

0
Ответов: 499
Рейтинг: 1
#6: 2008-03-13 19:23:07 ЛС | профиль | цитата
nesco писал(а):
Ну так возми, да сделай на штатных компонентах

нечем. таблица не отдает строку над которой находится курсор. также она не отдает высоту строки в пикселях, по которой можно было бы вычислить строку под курсором по высоте всей таблицы.
хотя TrackSelect прекрасно определяет и выделяет. из него нельзя вывести индекс строки?
карма: 0

0
Разработчик
Ответов: 26160
Рейтинг: 2127
#7: 2008-03-13 19:43:19 ЛС | профиль | цитата
HikeR писал(а):
таблица не отдает строку над которой находится курсор
А зачем тебе по текущему курсору определять строку, когда ты все равно для перетаскивания будешь нажимать мышь
карма: 22

0
Ответов: 499
Рейтинг: 1
#8: 2008-03-13 20:14:42 ЛС | профиль | цитата
чтобы понять, куда вставить строку при отпускании кнопки.
------------ Дoбавленo:

теория:
1 выделяю строку, которую хочу перетащить
2 зажимаю кнопку
3 перемещаю мышь выше-ниже
4 в момент отпускания кнопки выделенная строка вставляется перед той, над которой отжали кнопку.

карма: 0

0
Разработчик
Ответов: 26160
Рейтинг: 2127
#9: 2008-03-14 00:26:21 ЛС | профиль | цитата
Я понял для чего ты хотел -- мышь над пунктом, но, к сожалению , MousUp не работает над пунктами, и по-этому -- это реализовать не так просто, только по координатам. Ха, но можно и по координатам, если подумать.

------------ Дoбавленo:


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



Add(MainForm,1258690,217,119)
{
Left=20
Top=105
Height=336
Position=1
}
Add(StringTableMT,12838812,280,119)
{
Left=15
Top=10
Width=365
Height=240
Columns=#4:1=80|4:2=80|4:3=80|
AssignedIList=0
IconsCheck=[]
MiscIcons=[]
Icons=['Icon'=[ZIP7E03000078DAAD524B4B0251143EE11F900A9322132D5444A894284BB40423487053D1A645ABFE86B86897CF747C35E32B48A1962D5BF44BA2A06DBB7306023BB79932650217DE997399F9EE77BEF3B807608A1FB31978B7C28509C002006E3686C00E1A2E56C404935B811A85158A28B4DB200DF1D7F48FF82D19BAECC8E491D05741DEED055C2909DA61878EBBEA694FFD2F90E31AAD599C49E3415BF0B7650A370CF467D3C847A2F212CEE7F017774BB47963C05F2EA225236891864EE094E6B2E2DD6B8EF2B94C5B01A7D378D41D1CAD57C95512228B790CC9037CA34E6B55E2B43D1271E6C1E1E89CA4B388ECF857DC5736C8D096C7C4DD685BA24DDAFA11641D0EEDFCEE0FFF066511CE5124BE9AA842C1FA90A63583E62B5CC8894E6A88562FEF81BA414BCF1FD4B37B95AB58CAEB7C76F74A186F51A243FE8AF115C7DAE42DEB7CEED83883B4DFA69042E30FDE494F8DB5685263DCEF03BC3C027C38013E5D006FEF6C9700CF2980E42B802C03AC269993D24C7D625E5F33E1FB05FD63BEC1],'Icon'=[ZIP7E03000078DA63606004420101062029C190C1CCC020C6C0C0A001C440210605068838083830330C49F01F0911A38CA020A9E6C3A5886120EB62C0A68C015525A6D5FF3118F89531E09522E8485C528327FC6999B690C01FFBFFFF1F1F87D0933CFFFF7F15FEFFBFEC8EFFFFDF95FFFF3FF924AA3C0C00009DE778F9],'Icon'=[ZIP7E03000078DA63606004420101062029C190C1CCC020C6C0C0A001C440210605068838083830338C48D00006C42B3B70E000880141B8151F000384FAFFFFF1A83F000368EAE100AE00EE06AAA8C7E59E67CF9E91A41EA2050888578F1C5004C3132D1688892FAA00A02710F83310373230FC638060740012FB0F74D7FFC7083D00C1A6957E],'Icon'=[ZIP7E03000078DABD90B10E82301086AF7426210C8D6172F4317C1C5F80C242CA60E22BC843149E8208F2026EAE8E8E6E786DA5514C695CFC7BFF059AEF8E3B00089E2802CC2BD8510006001B345EC11ACCBDD29682432521F08BFEC69FDA561445C679CE39669EA679A6C5B98B97B2C6570C7CA865DD68CD785B82BC816D485DF2CDAB125DB50FC332A02208108BE323868B37FD0F8C0942C4D47F99EFDEE637CD17E641F55DD77CCAC3F7BDC192A4C2E68C55AEFFF39AA73B6343BBA6775FCB1BD866F73C8AB79FF0EE3B0C83E167E1E2BDBA8EE338F9428D6FE83BFAE1B1D2139D2CD897],'Icon'=[ZIP9605000078DA636060044221210620A9C0D0C0CAC020C6C0C0A001C4402106150688380844B032D003F040AD3580D212487C74AC02558F0D80E4728078021057007102949E800583C46DB099E56C6AFADF565FFFBF1D900672B7987A86FF379AF3E0BFD1BC2760AC33FDEE7FED796FFEDBFB7A81E5A166A960B8A6B3F33F434DCD7F91AC8CFF9ED179FFE3EEFFFFAFBBF0E57F535B93FFFAF6B6FFEB664DFB5F3E6DF2FFF2C2C2FFE56565FFA1EE32C030A7B4E63F4366C17FD198B8FF46DEA920752B4EBC7EFA7FCBDD7BFF773F7FF13F1BA837BBBAEAFFDAB5EBF09AA3F87FEF7F996F6BFFEBECEFFDEFEDE4FA3F2825FD7F0810A796E5FC8FCE4B05EB8761BCEE4102A74F9F86EB6160B803C7EBD7AF27CB1C64FD3036B9E6C0CC80D1D4F01725E1830D8F863351E19C83357F911ECEF8CA0EB2C17F2038C008C40C98F807911804007155A5FA]]
StringsStrLst=#16:0;0000;1111;2222|16:1;1111;2222;3333|16:2;2222;3333;4444|17:3;3333;44444;5555|16:4;6666;7777;8888|
AutoTblStrLst=0
Point(MouseY)
Point(onMouseMove)
Point(ImgSize)
link(onMouseMove,16329455:doOperation,[(324,132)(324,192)(282,192)(282,251)])
}
Add(Math,16329455,294,245)
{
OpType=1
Op2=19
ResultType=0
link(onResult,14550431:doCompare,[])
link(Op1,12838812:MouseY,[])
}
Add(If_else,14550431,350,245)
{
Type=4
link(onTrue,4517733:doCalc,[])
}
Add(MathParse,4517733,406,245)
{
MathStr="%1 div (%2 + 1)"
ResultType=0
link(onResult,9347758:doText,[])
link(X2,12838812:ImgSize,[(419,201)(307,201)])
}
Add(Edit,9347758,462,245)
{
Left=175
Top=260
Text=""
}
Add(InfoTip,14835596,168,217)
{
Info=#23:Correct Shift on Header|
Width=169
Height=67
}

Остальное, сам додумаешь
карма: 22

0
Ответов: 499
Рейтинг: 1
#10: 2008-03-14 01:17:59 ЛС | профиль | цитата
скажу только одно. от такого способа я сразу отказался. достаточно увеличить содержимое таблицы по вертикали до появления скроллбара, чтобы понять неработоспособность данного метода. он считает только видимую часть таблицы.

------------ Дoбавленo:

и все же, из TrackSelect-а нельзя что-то взять? как он выделяет строку под курсором?
карма: 0

0
Разработчик
Ответов: 26160
Рейтинг: 2127
#11: 2008-03-14 03:07:35 ЛС | профиль | цитата
HikeR, на вот тебе ссылку на обновление StringTableMT до версии 6.60 (добавлены три точки -- TopItem, PerPage и ItemAtPos (только отстань, а то достала меня эта таблица ))

[svn]StringTableMT.pas[/svn]

и пример определения пункта под курсором в двух вариантах под новую версию



Add(MainForm,1258690,224,189)
{
Left=20
Top=105
Height=187
Position=1
}
Add(StringTableMT,12838812,287,189)
{
Left=10
Top=10
Width=360
Height=95
Columns=#4:1=80|4:2=80|4:3=80|
AssignedIList=0
IconsCheck=[]
MiscIcons=[]
Icons=['Icon'=[ZIP7E03000078DAAD524B4B0251143EE11F900A9322132D5444A894284BB40423487053D1A645ABFE86B86897CF747C35E32B48A1962D5BF44BA2A06DBB7306023BB79932650217DE997399F9EE77BEF3B807608A1FB31978B7C28509C002006E3686C00E1A2E56C404935B811A85158A28B4DB200DF1D7F48FF82D19BAECC8E491D05741DEED055C2909DA61878EBBEA694FFD2F90E31AAD599C49E3415BF0B7650A370CF467D3C847A2F212CEE7F017774BB47963C05F2EA225236891864EE094E6B2E2DD6B8EF2B94C5B01A7D378D41D1CAD57C95512228B790CC9037CA34E6B55E2B43D1271E6C1E1E89CA4B388ECF857DC5736C8D096C7C4DD685BA24DDAFA11641D0EEDFCEE0FFF066511CE5124BE9AA842C1FA90A63583E62B5CC8894E6A88562FEF81BA414BCF1FD4B37B95AB58CAEB7C76F74A186F51A243FE8AF115C7DAE42DEB7CEED83883B4DFA69042E30FDE494F8DB5685263DCEF03BC3C027C38013E5D006FEF6C9700CF2980E42B802C03AC269993D24C7D625E5F33E1FB05FD63BEC1],'Icon'=[ZIP7E03000078DA63606004420101062029C190C1CCC020C6C0C0A001C440210605068838083830330C49F01F0911A38CA020A9E6C3A5886120EB62C0A68C015525A6D5FF3118F89531E09522E8485C528327FC6999B690C01FFBFFFF1F1F87D0933CFFFF7F15FEFFBFEC8EFFFFDF95FFFF3FF924AA3C0C00009DE778F9],'Icon'=[ZIP7E03000078DA63606004420101062029C190C1CCC020C6C0C0A001C440210605068838083830338C48D00006C42B3B70E000880141B8151F000384FAFFFFF1A83F000368EAE100AE00EE06AAA8C7E59E67CF9E91A41EA2050888578F1C5004C3132D1688892FAA00A02710F83310373230FC638060740012FB0F74D7FFC7083D00C1A6957E],'Icon'=[ZIP7E03000078DABD90B10E82301086AF7426210C8D6172F4317C1C5F80C242CA60E22BC843149E8208F2026EAE8E8E6E786DA5514C695CFC7BFF059AEF8E3B00089E2802CC2BD8510006001B345EC11ACCBDD29682432521F08BFEC69FDA561445C679CE39669EA679A6C5B98B97B2C6570C7CA865DD68CD785B82BC816D485DF2CDAB125DB50FC332A02208108BE323868B37FD0F8C0942C4D47F99EFDEE637CD17E641F55DD77CCAC3F7BDC192A4C2E68C55AEFFF39AA73B6343BBA6775FCB1BD866F73C8AB79FF0EE3B0C83E167E1E2BDBA8EE338F9428D6FE83BFAE1B1D2139D2CD897],'Icon'=[ZIP9605000078DA636060044221210620A9C0D0C0CAC020C6C0C0A001C4402106150688380844B032D003F040AD3580D212487C74AC02558F0D80E4728078021057007102949E800583C46DB099E56C6AFADF565FFFBF1D900672B7987A86FF379AF3E0BFD1BC2760AC33FDEE7FED796FFEDBFB7A81E5A166A960B8A6B3F33F434DCD7F91AC8CFF9ED179FFE3EEFFFFAFBBF0E57F535B93FFFAF6B6FFEB664DFB5F3E6DF2FFF2C2C2FFE56565FFA1EE32C030A7B4E63F4366C17FD198B8FF46DEA920752B4EBC7EFA7FCBDD7BFF773F7FF13F1BA837BBBAEAFFDAB5EBF09AA3F87FEF7F996F6BFFEBECEFFDEFEDE4FA3F2825FD7F0810A796E5FC8FCE4B05EB8761BCEE4102A74F9F86EB6160B803C7EBD7AF27CB1C64FD3036B9E6C0CC80D1D4F01725E1830D8F863351E19C83357F911ECEF8CA0EB2C17F2038C008C40C98F807911804007155A5FA],'Icon'=[ZIP7E03000078DA63606004420101062029C190C1CCC020C6C0C0A001C440210605068838083830330C02F01F156182063082A884B3D1180D1822FF51D978D4E351F61FD5344C27E1B29D01554B030EF41F87FAFFB88D856B44538F2685DF7CB4C064C0117A0C1856E08AAFFFB86316AB764AD2036D532314FC91FFFF7FA2C2FFFF1D407C90F9FFFF13AAFFFF1F6005B215FFFFBF00A41F2BFFFFFF46FAFFFFCFE910B5300000FAFD7FC3],'Icon'=[ZIP7E03000078DA63606004420101062029C190C1CCC020C6C0C0A001C440210605068838083830330C49F01F0911A30C011AC088688DFF61EAB12AC0C240528FE9BCFFA8E47F1CEE417776035E84613E31EA31DD8F163E0C78839760F8D03AFC6999B690C01FFBFFFF1F1F07D2FCFFFF4FF2FCFFFF95FBFFFF3240156F8078F24988384C1E0600F7027838]]
StringsStrLst=#16:0;0000;1111;2222|16:1;1111;2222;3333|16:2;2222;3333;4444|17:3;3333;44444;5555|16:4;6666;7777;8888|16:5;7777;8888;9999|16:6;8888;9999;0000|
AutoTblStrLst=0
Point(MouseY)
Point(onMouseMove)
Point(ImgSize)
Point(TopItem)
Point(PerPage)
Point(ItemAtPos)
link(onMouseMove,10325462:doEvent1,[(351,202)(351,262)(233,262)(233,321)])
}
Add(Math,16329455,301,315)
{
OpType=1
Op2=19
ResultType=0
link(onResult,14550431:doCompare,[])
link(Op1,12838812:MouseY,[])
}
Add(If_else,14550431,357,315)
{
Type=4
link(onTrue,4517733:doCalc,[])
}
Add(MathParse,4517733,413,315)
{
DataCount=3
MathStr="%1 div (%2 + 1) + %3"
ResultType=0
link(onResult,9347758:doText,[])
link(X2,12838812:ImgSize,[(426,271)(314,271)])
link(X3,12838812:TopItem,[(433,271)(321,271)])
}
Add(Edit,9347758,469,315)
{
Left=100
Top=110
Text=""
link(onChange,633828:doText,[(513,321)(513,342)(443,342)(443,363)])
}
Add(InfoTip,14835596,175,287)
{
Info=#23:Correct Shift on Header|
Width=169
Height=67
}
Add(Edit,633828,455,357)
{
Left=155
Top=110
Text=""
link(Str,12838812:PerPage,[(461,292)(328,292)])
}
Add(Edit,16705098,399,420)
{
Left=100
Top=130
Text=""
link(Str,12838812:ItemAtPos,[(405,310)(335,310)])
}
Add(InfoTip,15271026,315,399)
{
Info=#17:Example ItemAtPos|
Width=169
Height=67
}
Add(Hub,10325462,245,315)
{
link(onEvent1,16329455:doOperation,[])
link(onEvent2,16705098:doText,[(289,328)(289,426)])
}

карма: 22

0
Ответов: 499
Рейтинг: 1
#12: 2008-03-14 04:43:55 ЛС | профиль | цитата
вот пример с обычной таблицей. перетаскивание строк работает, но только в начале таблицы:
code_8623.txt
вот где не хватает страничной части, что-ли. то есть какой индекс у первой видимой строки
------------ Дoбавленo:

упс... уже все есть оказывается, обновить страницу я и забыл перед отправкой ;)

вот ItemAtPos - это именно то, чего не хватало. народ очень и очень благодарен ;)
------------ Дoбавленo:

ну вот теперь доработанный пример перетаскивания строк с новой StringTableMT:

#sha
Add(MainForm,1258690,28,14)
{
Left=20
Top=105
Width=360
Height=336
Position=1
link(onCreate,6872127:doFor,[(68,34)(68,20)])
}
Add(InfoTip,9880794,154,259)
{
Info=#11:обмен строк|
Width=316
Height=179
}
Add(StringTableMT,6306378,119,70)
{
Left=207
Width=145
Height=309
Align=3
Columns=#7:col1=40|7:col2=40|7:col3=40|
IconsCheck=[]
MiscIcons=[]
Icons=[]
Point(onMouseMove)
Point(doSelect)
Point(ItemAtPos)
Point(Strings)
Point(MouseY)
Point(PosY)
link(onMouseMove,3648294:doValue,[(171,83)(171,123)(59,123)(59,202)])
link(PosY,6306378:MouseY,[(132,61)(188,61)(188,130)(153,130)])
}
Add(DoData,13568737,133,196)
{
link(onEventData,1533851:doCompare,[])
link(Data,6306378:ItemAtPos,[])
}
Add(FormatStr,4149970,133,14)
{
Mask="%1;%1;%1"
link(onFString,6306378:doAdd,[(176,20)(176,53)(107,53)(107,76)])
}
Add(Hub,11912948,294,287)
{
link(onEvent1,2884913:doIndex,[])
link(onEvent2,7436775:doIndex,[])
}
Add(For,6872127,91,14)
{
End=99
link(onEvent,4149970:doString,[])
}
Add(GetDataEx,9634341,406,266)
{
link(Data,1654082:Value,[])
}
Add(Hub,6203200,175,371)
{
OutCount=6
link(onEvent1,622569:doWork1,[(222,377)(222,293)])
link(onEvent2,5698933:doRead,[])
link(onEvent3,622569:doWork2,[(230,391)(230,300)])
link(onEvent4,5698933:doWrite,[(275,398)(275,391)])
link(onEvent5,8545878:doWrite,[(389,405)(389,391)])
link(onEvent6,11241663:In,[(222,412)(222,419)])
}
Add(If_else,1872767,91,371)
{
Op2=Integer(0)
link(onTrue,6203200:doEvent1,[])
link(Op1,3648294:Value,[])
}
Add(Memory,3648294,91,196)
{
Default=Integer(-1)
link(onData,13568737:doData,[])
}
Add(ArrayRW,5698933,336,378)
{
link(onRead,8545878:doRead,[])
link(Array,2828166:Var2,[])
link(Index,2884913:Var,[])
link(Value,5698933:Item,[(356,366)(377,366)(377,423)(342,423)])
}
Add(ChanelToIndex,622569,245,287)
{
link(onIndex,11912948:doEvent1,[])
}
Add(ArrayRW,8545878,406,378)
{
link(Array,2828166:Var3,[(412,359)])
link(Index,7436775:Var,[])
link(Value,8545878:Item,[(426,366)(446,366)(446,425)(412,425)])
}
Add(InfoTip,7099717,77,161)
{
Info=#33:расчет номера строки под курсором|
Width=141
Height=81
}
Add(GetDataEx,16501480,336,259)
{
link(Data,2954423:Var3,[(349,184)])
}
Add(If_else,1533851,231,196)
{
Type=5
link(onTrue,12194190:doEvent1,[])
link(Op2,2954423:Var1,[(244,184)])
}
Add(Memory,3468807,329,140)
{
}
Add(Memory,1654082,413,196)
{
}
Add(GetDataEx,2954423,322,175)
{
link(Data,3468807:Value,[])
}
Add(DoData,15839786,329,196)
{
link(onEventData,1654082:doValue,[])
link(Data,2954423:Var2,[])
}
Add(Hub,12194190,273,196)
{
OutCount=3
link(onEvent1,15839786:doData,[])
link(onEvent2,3468807:doValue,[(317,209)(317,146)])
link(onEvent3,1872767:doCompare,[(315,216)(315,251)(79,251)(79,377)])
}
Add(PointHint,10757899,371,140)
{
Info=#14:новое значение|
Width=85
Height=18
PColor(Event,16711935)
}
Add(PointHint,5900623,385,175)
{
Info=#15:старое значение|
Width=92
Height=18
}
Add(InfoTip,5874213,224,112)
{
Info=#62:мониторинг изменения потока с сохранением предыдущего значения|
Width=260
Height=130
}
Add(GetDataEx,2828166,329,350)
{
Angle=3
link(Data,14910958:Var,[(300,359)])
}
Add(LineBreak,13348328,49,105)
{
Caption="doSelect"
link(Out,6306378:doSelect,[])
Primary=[11241663,182,308]
}
Add(GetIndexData,2884913,343,287)
{
link(Data1,16501480:Var2,[])
link(Data2,9634341:Var1,[(356,275)])
}
Add(GetIndexData,7436775,413,294)
{
link(Data1,9634341:Var2,[])
link(Data2,16501480:Var3,[(426,268)])
}
Add(LineBreak,10247717,140,140)
{
Caption="Strings"
Type=1
link(Data,6306378:Strings,[])
Primary=[14910958,154,196]
}
действительно работает в любую сторону, независимо от видимой части. просто здорово ;)
карма: 0

0
файлы: 1code_8623.txt [3.7KB] [140]
Разработчик
Ответов: 26160
Рейтинг: 2127
#13: 2008-03-14 10:20:42 ЛС | профиль | цитата
HikeR, обновись с SVN. Я убрал верхние точки, теперь ItemAtPos использует родительские переменные Ms.X & Ms.Y для координат, и ему не нужны внешние данные. Твой пример при загрузке скажет, что не найдена точка PosY, но будет прекрасно работать и без нее.
карма: 22

0
Ответов: 499
Рейтинг: 1
#14: 2008-03-14 12:24:08 ЛС | профиль | цитата
"и сказал Он, это хорошо" (с)

карма: 0

0
Ответов: 3851
Рейтинг: 159
#15: 2008-03-14 13:14:05 ЛС | профиль | цитата
Пример "таскания" строк в следующем дистрибе будет?
карма: 0
начавший
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)